![]() |
Ein Handle herausfinden bei einer nicht eindeutigen Klasse
Hi
ich versuche das handle eines buttons herauszufinden (mit findwindowex). allerdings liegt dieser button in einem fenster das keine eindeutige fensterklasse hat und keinen titel. wenn ich jetzt versuche das parentfenster herauszufinden findet er mal das eine und mal das andere. also kann der button nur manchmal geklickt werden. was soll ich da machen?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var h: HWnd; begin h:=FindWindow('#32770',nil); //#32770 ist die fensterklasse (zweimal vorhanden) h:=FindWindowEx(h,0,'Button','ChannelUp'); //liefert manchmal ergebnis und manchmal nicht SendMessage(h,BM_CLICK,0,0); end; |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Geh die Child-Fenster mit EnumChildWindows rekursiv durch. Die Beschriftung des Buttons scheint ja eindeutig zu sein.
|
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Hi,
du sagst es direkt: Es existieren zwei Fenster dieser Fensterklasse. Dem entsprechend musst du auch zwei mal suchen und darauf reagieren. Lässt sich lösen per EnumWindows und/oder dem Text des Windows. Chris [edit]Satz korrigiert.[/edit] |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Zitat:
|
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
nein nicht das handle 2mal sondern die fensterklasse
und kann mir jemand des mit dem EnumChildWindows erklären? am besten mal in den code einbauen und dann posten... |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Solltest du selber hinbekommen:
![]() |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Delphi-Quellcode:
bei bedarf eventuell noch fenstertitel abfrage einbauen
var C: Array[0..256] Of Char;
winhandle, handle2: Cardinal; begin WinHandle := FindWindow(Nil, Nil); While (WinHandle <> 0) Do Begin windows.GetClassname(WinHandle, C, 255); if string(C) = '32770' then begin //überprüfen ob parentwindow das richtige ist handle2 := GetWindow(WinHandle, GW_OWNER); windows.GetClassname(handle2, C, 255); if string(C) = 'classname vom parentwindow' then begin end; end; WinHandle := GetWindow(WinHandle, GW_HWNDNEXT); End; end; |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Hi Luckie,
sorry... mein Fehler: ich meinte eigentlich, dass zwei Fenster dieser Klasse existieren. 2 mal das gleiche Handle für verschiedene Controls wäre wirklich schlecht. ;) Chris |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
ok soweit hab ich jetzt:
Delphi-Quellcode:
aber er findet den button nicht weil er vorher ein child findet das selber nochmal childs hat und dann diese child-childs durchgeht und dann abbricht wenn er mit denen fertig is.
function FindButton(const AhWindow : DWORD;const ApButton : PDWORD) : longbool; stdcall;
var h:Hwnd; begin Result := true; showmessage(inttostr(AhWindow)); h:=findwindowex(AhWindow,0,'Button','ChannelUp'); ApButton^:=h; if h <> 0 then result:=false; end; procedure TForm1.Button1Click(Sender: TObject); var h, hbutton: Hwnd; begin h:= findwindow(nil, 'InterVideo WinDVR'); hbutton:=0; windows.EnumChildWindows(h,@findbutton,integer(@hbutton)); showmessage(inttostr(hbutton)); end; |
Re: Ein Handle herausfinden bei einer nicht eindeutigen Klas
Ich weiß ja nicht, ob das geht, aber ich benutze in letzter Zeit immer wieder (geht so schön leicht und ist variabel) WindowFromPoint. Wenn man Die Position deines Handles irgendwann mal mit dem Mauszeiger erwischt, kann das dir helfen:
Delphi-Quellcode:
Das wäre z.B. in eine LabelMouseUp procedure eizubinden, dann musst du nur auf das Label klicken, geklickt halten, zu denerm Hanlde fahren und die Maustaste loslassen. Oder du schiebst das ganze in die FormKeyPress procedure rein, dann musst du nur die Maus positionieren und auf Tastendruck hast du dein Handle! (Dabei muss allerdings die Form aktiv sein, wegen Keydown).
var
H: THandle; begin H := WindowFromPoint(Mouse.CursorPos); {...} end; Wenn dich das interessiert kannst du ja mal auf die Seite schauen: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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