![]() |
AW: ClassName / Caption von Objekt erhalten
Lass Dir doch den Code zum Ermitteln des Button-Handles von WinSpy generieren. Dem schickst Du dann ein BM_CLICK (oder BN_CLICKED, ich weiß es gerade nicht genau, Code sollte im Forum zu finden sein).
|
AW: ClassName / Caption von Objekt erhalten
|
AW: ClassName / Caption von Objekt erhalten
das was ich hochgeladen hatte tut unter anderem genau dies....
|
AW: ClassName / Caption von Objekt erhalten
Gut, wenn du das Caption des Fensters schon hast, musst du das Fenster mit FindWindow suchen, dort kannst du das Caption als "Suchparameter" eingeben. Damit bekommst du das HWND, womit du weitermachen kannst.
Für den Button zufinden gibt es 2 Möglichkeiten: - Einmal, mit FindWindowEx, falls du Klasse oder Button-Text hast. Klasse wird schwer, da man Subclassing machen kann, und somit der Button keinen "festen" Klassenname hat. Button-Text, falls du einen Button mit einem bestimmten Text drücken willst, der sich nicht ändert. - Das zweite wäre, dass du mit EnumChildWindows, alle Child-Handles (also sozusagen "Controls") durchgehst und überprüfst, indem du dir zu jedem den Klasennamen oder Text geben lässt. Das würde dann so funktionieren:
Delphi-Quellcode:
So damit solltest du das denk ich jetzt hinbekommen. Dies ist alles aus dem Kopf geschrieben, hoffe das funkt so.
function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall;
begin //Überprüfe hier, was du brauchst. Du kannst alle Infos von diesem Child mit dem Parameter hHandle holen. //Wenn du das Fenster gefunden hast, gib False zurück, wenn nicht True. end; //Aufruf EnumChildWindows(hParentHWND,@EnumChildProc,0); //In den letzen Parameter kannst du eine eigene Zahl, Pointer übergeben. Diesen Wert findest du in der EnumChildProc im lParam wieder. Funktioniert wie mit SendMessage. Gruß NickelM |
AW: ClassName / Caption von Objekt erhalten
Ich weiß nicht was ich falsch mache, aber bei dem "EnumChildWindows" passiert bei mir einfach nichts...
Code:
Delphi-Quellcode:
Ist am Code irgendwas falsch?! ...
function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall;
begin ShowMessage('-'); end; procedure TForm1.FormCreate(Sender: TObject); var hParentHWND: HWND; begin hParentHWND := FindWindow(nil, 'Fenstername'); if hParentHWND = 0 then begin ShowMessage('Fenster nicht gefunden.'); Application.Terminate; end; EnumChildWindows(hParentHWND, @EnumChildProc,0); //In den letzen Parameter kannst du eine eigene Zahl, Pointer übergeben. Diesen Wert findest du in der EnumChildProc im lParam wieder. Funktioniert wie mit SendMessage. end; Mfg, Destroyer446 |
AW: ClassName / Caption von Objekt erhalten
Beispiel mit Notepad und enthaltenem Text
Delphi-Quellcode:
Function GetTextFromHandle(hwd:THandle):String;
const MyMaxText = 10000; begin SetLength(Result, MyMaxText); SetLength(Result, SendMessage(hwd, WM_GETTEXT, MyMaxText, lParam(PChar(Result)))); end; function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall; const MyMaxName = 255; MyMaxText = 255; var ClassName: string; begin Result := True; SetLength(ClassName, MyMaxName); SetLength(ClassName, GetClassName(hHandle, PChar(ClassName), MyMaxName)); Showmessage(ClassName+' - '+GetTextFromHandle(hHandle)); end; procedure TForm5.Button1Click(Sender: TObject); var hParentHWND: HWND; begin hParentHWND := FindWindow(nil,'Unbenannt - Editor'); if hParentHWND = 0 then begin ShowMessage('Fenster nicht gefunden.'); end else EnumChildWindows(hParentHWND, @EnumChildProc,0); end; |
AW: ClassName / Caption von Objekt erhalten
Bei Notepad gibts kein Problem, nur bei dem Programm schon, aber das liegt nicht am Code.. denk ich mal...
Naja, bei dem Proggi gehts wohl nicht. Danke, Destroyer446 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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