![]() |
Eigenes Handle finden
Hallo,
ich habe folgendes Problem: Ich habe eine Anwendung nonVCL geschrieben. Nun benötige ich u.a. für den Aufruf von GetWindow(); das Handle meines eigenen Programms. Wenn ich VCL benutze, dann nehme ich dort entweder Application.Handle oder abgeleitet vom Haupt-Formular self.Handle. Das geht hier leider nicht. Wie komme ich möglichst ohne großen Aufwand an mein Handle ran? Gruß, Alex P.S. Auch wenn die Lösung einfach sein sollte und schon 100fach im Forum steht, bitte nicht meckern. Ich habe schon mehrmals die Suche benutzt, aber nichts gefunden. U.U. liegt es auch an falschen/fehlenden Suchbegriffen. |
Re: Eigenes Handle finden
Wenn Du via
![]() |
Re: Eigenes Handle finden
Zitat:
Entschuldigung: Evtl. habe ich mich auch nicht vollständig/richtig ausgdrückt. Meine Anwendung hat kein(e) Fenster. Sie läuft einem Dienst ähnlich ohne Benutzerinteraktion im Hintergrund. Dabei ist es notwending, dass ich auf das Ende eines bestimmten Programms/Fensters warte (vgl. ![]()
Delphi-Quellcode:
Mit Einbindung der VCL klappt das wunderbar. Nur wie mache ich das ohne ein Fenster? Mit GetWindow(0, GW_HWNDFIRST); klappt es jedenfalls nicht.
function FindWindowByTitle(WindowTitle: string): Hwnd;
var NextHandle: Hwnd; NextTitle: array[0..255] of char; begin // Get the first window NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // retrieve its text GetWindowText(NextHandle, NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else // Get the next window NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; Result := 0; end; Gruß, Alex |
Re: Eigenes Handle finden
Warum so kompliziert. lass Windows doch die Arbeit für dich machen:
![]() |
Re: Eigenes Handle finden
Zitat:
Das bringt mich zu einem weiteren Problem: Mit der Function findet man ja allerhand Fenster, auch solche die nicht sichbar sind. Gibt es eine Möglichkeit gerade in MDI-Programmen auch die anderen Fenster im Programm selbst zu finden? Wenn ich z.B. Im FireFox mehrere Fenster geöffnet habe, dann zeigt er mir immer nur den Titel des aktuell angezeigten Fensters an. Dass es grundsätzlich möglich sein muss, sehe ich an ![]() Gruß, Alex |
Re: Eigenes Handle finden
Bei
![]()
Delphi-Quellcode:
Hier wird als HWND einfach ein Zeiger auf die Function selbst verwandt. Ich habe das in meiner o.g. Procedure probiert. Es sah auf den ersten Blick ganz verlocken aus. Aber ich hatte schon vermutet, dass es nicht gehen würde, denn Handle <> Pointer. Oder kann man das wider Erwarten zum Laufen bringen mit einem Compilter-Schalter?
function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export;
var Title, ClassName: array[0..255] of char; begin Result := True; GetWindowText(wHandle, Title, 255); GetClassName(wHandle, ClassName, 255); if IsWindowVisible(wHandle) then lb.Items.Add(string(Title) + '-' + string(ClassName)); end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWindowsProc, Integer(Listbox1)); end; Weiter unten auf ![]() Gruß, Alex |
Re: Eigenes Handle finden
Zitat:
Ist jetzt die Frage, wie erstellts du das Fenster ? |
Re: Eigenes Handle finden
Zitat:
Ich habe kein Fenster und ich erstelle auch keins. Deshalb kenne ich nicht "... das Handle deines Fensters." Wenn dem so wäre, gäbe es das Problem ja nicht. Ich habe eine Anwendung ohne die VCL und ohne jedes Fenster. Ich möchte nur die Namen der vorhandenen Fenster mit der unter ![]()
Delphi-Quellcode:
wieder, der eben ein Handle voraussetzt. Da ich weder ein TForm noch ein TApplication habe, kann ich self.Handle bzw. Application.Handle nicht als Parameter mitgeben. Ich weiß nicht, wie ich mein Problem noch schildern soll.
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
Was gebe ich ohne Fenster als hwnd mit? bzw. Was gibt es für Alternativen für die Funktion? Gruß, Alex |
Re: Eigenes Handle finden
|
Re: Eigenes Handle finden
Wenn Du kein Handle hast, dann kannst Du auch keines übergeben, versuchs an der Stelle mal mit nil oder so.
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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-2025 by Thomas Breitkreuz