![]() |
Handle vom Control eines fremden Fensters ermitteln?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
in dem Programm, welches ich fernsteuern möchte, geht eine Messagebox auf. In dieser müsste der Button "OK" gedrückt werden. Soweit alles kein Problem, wenn ich nur das Handle von dem Button herausbekommen könnte. Mit dem Programm WinSpy kann man sich ja die Handles anzeigen lassen. Ein Screenshot mit dem Handle des Button hängt an dieser Message dran. Das Handle von TApplication "Condor dedicated server" bekomme ich über Getwindow heraus. Um nun an das Handle von dem Button zu kommen verwende ich folgenden Code (welcher bei dem Hauptfenster der fremden Anwendung ohne Probleme funktioniert):
Delphi-Quellcode:
Leider wird mir immer nur der Wert 0 zurückgeliefert. Wie kann ich das Handle dieses Button herausbekommen?
dButton := FindWindowEx(dServerWindowHandle, 0, 'TspSkinButton', nil);
//dServerWindowHandle ist das Handle zu TApplication "Condor dedicated server" |
Re: Handle vom Control eines fremden Fensters ermitteln?
Das Parent des Buttons ist der MessagBox-Dialog und nicht das Hauotfenster der Anwnedung. Such also mit FindWindow die Messagebiox und dann mit dem Handle den Button mit FindWindowEx.
Jetzt ist der Anhang da. Eventuell hat der Button gar kein Handle, weil er von TGraphicControl abgeleitet ist, wie zum Beispiel der TSpeedButton, dann wirst du keine Chance haben. |
Re: Handle vom Control eines fremden Fensters ermitteln?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich komm an das Handle 6620706 (TApplication). Wenn ich jetzt folgendes ausführe bekomme ich wieder Null zurück geliefert:
Delphi-Quellcode:
Das ist kein Speedbutton, da ja WinSpy in dem Fall auch ein Handle für den OK Button zurückliefert.
dMessageForm := FindWindowEx(dServerWindowHandle, 0, 'TspMessageForm', nil); //dServerWindowHandle = 6620706
EDIT: Im Anhang ist nochmal das ganze von Winsight aus betrachtet - inklusive Hauptfenster. |
Re: Handle vom Control eines fremden Fensters ermitteln?
Selbst EnumChildWindows scheint nicht mit dem Handle des TApplication(siehe oben) zu funktionieren. Mit dem Handle des Hauptfensters funktionierts jedoch und ich bekomm alle Controls des Hauptfensters in die Stringlist.
Delphi-Quellcode:
Beim Debugen sieht man, dass der nicht die Funktion EnumProc anspringt (was jedoch mit dem Handle des Hauptfensters funktioniert).
function EnumProc(wnd: HWND; Lines: TStrings): BOOL; stdcall;
var buf : array[0..255] of char; begin Result := True; GetClassName(wnd, buf, SizeOf(buf) - 1); Lines.Add(Format('%d,%s', [GetDlgCtrlID(wnd), buf])); end; //... //Aufruf EnumChildWindows(dServerWindowHandle, @EnumProc, integer(WindowControls)); Irgendwie geh ich die Sache von der falschen Seite an ... |
Re: Handle vom Control eines fremden Fensters ermitteln?
Hat nicht Winspy eine möglichkeit, den entsprechenden FindWindow-Code automatisch zu generieren ?
(In der Symbolleiste ganz rechts ;) ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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