![]() |
Fremdes Fenster in Vordergrund holen
Huhu,
ich weiß nicht ob ichs ins richtige Forum packe.. zur Not bitte verschieben. Also, momentan werkel ich an einem Projekt, das die Shell ersetzt. Zu erklären warum, würde zu lange dauern. Ich habe also ein Formular, das ich in Vollbild als Desktop hinter alles lege. Soweit passt es auch. Über diese Oberfläche, kann ich verschiedene andere Programme starten. Problem ist jetzt erstmal, das, wenn ich das Formular anklicke, es sich über die anderen gestarteten Programme setzt. Das ist soweit aber nicht schlimm, weil ich eh eine art "TaskLeiste" einbauen wollte bzw. schon hab. Die funktioniert soweit. Es ist eine ToolBar, die per ToolBarButton die geöffneten Programme anzeigt. Generiert wird das dann dynamisch. Jetzt fehlt einzig die Funktion, wie ich die Fenster durch klick auf den ToolbarButton in den Vordergrund bekomme. Mit folgendem Code fülle ich die "TaskLeiste":
Delphi-Quellcode:
Die Funktion wird aus einem normalen EnumWindowsProc aufgerufen. "t" ist dabei der Titel der Anwendung:GetText(Wnd)
function TaskToBar(t: String; pid: String): string;
var TB: TDSToolButton; i: integer; Event: TNotifyEvent; begin TB := TDSToolButton.Create(form1); TB.Parent := form1.Frame21.DSToolBar1; TB.Width := 35; // wirkt sich nicht aus TB.Height := 35; // ??? //TB.AutoSize := False; TB.Caption := IntToStr(i); TB.ShowHint := True; TB.Hint := pid; tb.Caption := t; TB.ShowText := true; tb.PopupSide := popLeft; tb.OnClick := form1.TaskClick; end; und pid (so hoffe ich) die ProzessID: IntToStr(Wnd) Die ProzessID schreibe ich, vorrübergehend, als String in den Hint, damit ich sie übergeben kann. TaskClick sieht so aus:
Delphi-Quellcode:
Die Frage ist jetzt.. wie bekomme ich aus diesem ID String wieder einen WindowHandel, so das ich damit arbeiten kann? Und das möglichst unkompliziert ? Also nicht indem ich nochmal per EnumWindow alles durchgehen muss?
procedure TForm1.TaskClick(sender : TObject);
var id:String; fenster: Hwnd; begin id := TDSToolButton(sender).Hint; end; Falls jemand helfen kann, danke ich schonmal im Vorraus. Ich hoffe ich hab gut beschrieben worum es mir geht. Gruß, Andreas |
Re: Fremdes Fenster in Vordergrund holen
Vorausgesetzt, id ist der Windowhandle:
Versuch es Mal mit
Delphi-Quellcode:
Martin
setWindowPos(strToInt(id), 0, 0, 0, 0, 0, SWP_SHOWWINDOW);
|
Re: Fremdes Fenster in Vordergrund holen
Moin!
Der korrekte Code für dein Vorhaben ist wohl:
Delphi-Quellcode:
(HWND ist das Fensterhandle)
SetForegroundWindow(HWND);
Gruß, Max Edit: Die schönste Methode ist es nicht einen Hint als Container zu verwenden, aber wenn es unbedingt sein muss dann speichere gleich das Fensterhandle darin. Ist ja auch nichts anderes als 'ne Nummer. |
Re: Fremdes Fenster in Vordergrund holen
Guten Morgen,
also die Version von Martin klappt schon ganz gut, vielen Dank dafür. Ist ja doch einfacher als ich mir das in meinem Kopf schon ausgemalt hab. Wenn ich den Firefox in den Vordergrund hole ist er zwar nicht mehr im Vollbild Modus sondern SEHR klein.. aber das kann man per click ändern.. bzw. ändert sich ja vielleicht wenn ich noch mit den Parametern rumspiele *g* @Max Deine Version hatte ich gestern stundenlang ausprobiert. Nur hab ich keine MÖglichkeit gefunden wie ich aus der Zahl (ob nun als Integer oder String) einen Window Handle mache. Und den Handle als Objekt abspeichern hab ich eben nicht hinbekommen weil Hint unbedingt nen String will *g* |
Re: Fremdes Fenster in Vordergrund holen
Versuche einmal, den Window Handle statt im Hint im Tag zu speichern. Dies ist schon ein Integer, da musst Du keine Typumwandlung mehr machen.
Martin |
Re: Fremdes Fenster in Vordergrund holen
Huch.. das funktioniert tatsächlich perfekt.
Aber das wundert mich. Wieso steht überall das im Tag der Typ Integer erforderlich ist? Der WindowHandle ist doch selbst eine Art Container.. und nich nur ein einfacher Integer.. blöde Frage aber.. wieso geht das? |
Re: Fremdes Fenster in Vordergrund holen
Der WindowHandle ist kein Container, sondern einfach eine Nummer (ein DWord, also ohne Vorzeichen).
Martin |
Re: Fremdes Fenster in Vordergrund holen
Ok.. hab ich wieder was gelernt.
Vielen Dank :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz