![]() |
Handle bei mehremals gleichen Klassennamen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ich habe das Problem, das ich das Handle von einen Steuerelement brauche... Das schwierige ist aber, das eine Klasse sehr oft vorkommt... Siehe im Anhang wie das Fenster zum Beispiel aussieht... Ich möchte jetzt den Handle von zb dem Button bekommen, der den Text Sound hat. Soweit bin ich bereits:
Delphi-Quellcode:
das Problem ist, das ich immer nur den Handle vom ersten AfxWnd70u bekomme, wie komme ich auf die darunterliegenden?procedure TForm1.Button4Click(Sender: TObject); var wndMain, wndChild: HWND; begin wndMain := FindWindow(nil,'Preference Window'); if wndMain <> 0 then begin wndChild := FindWindowEx(wndMain, 0, 'AfxWnd70u', nil); // bekomme immer 199242 wndChild := FindWindowEx(wndChild, 0, 'AfxWnd70u', nil); wndChild := FindWindowEx(wndChild, 0, 'Button', nil); end; end; also zb 199240 ? kann mir wer weiterhelfen? |
Re: Handle bei mehremals gleichen Klassennamen
Hallo,
habs jetzt zusammengebracht... ist war noch nicht ganz schön, aber es geht mal
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var wndMain, wndChild, temp: HWND; begin wndMain := FindWindow(nil,'Preference Window'); temp:=0; wndChild:=0; if wndMain <> 0 then while wndChild=0 do begin wndChild := FindWindowEx(wndMain, temp, 'AfxWnd70u', nil); temp:=wndChild; wndChild := FindWindowEx(wndChild, 0, 'AfxWnd70u', nil); end; wndMain:=wndChild; temp:=0; while GetWinText(wndChild)[1]<>'S' do begin wndChild := FindWindowEx(wndMain, temp, 'Button', nil); temp:=wndChild; end; end; |
Re: Handle bei mehremals gleichen Klassennamen
Hello,
so jetzt habe ich ein anderes Problem :-( Diesmal geht es nicht um Klassennamen sondern darum ein Handle von einer Form zu bekommen... Ich weiß, wie die Fenster Klasse heißt, aber es gibt mehrer Fenster, mit der selben Klasse. Ich kenne die ersten 5 Buchstaben des Fenster Titels, aber alle Zeichen dahinter sind Zufällig. Wie kann ich jetzt Sinnvoll FindWindow verwenden? Bzw. gibt es Alternativen? |
Re: Handle bei mehremals gleichen Klassennamen
Zitat:
In diesem Fall müsstest du eine eigene FindWindow Funktion schreiben, welche folgendes macht: - Per GetWindow() wird durch alle Fenster iteriert - Mit GetWindowText / GetClassName den Fenster Titel / Klassennamen ermittelt - Überprüfung, ob der Fenster Titel / der Klassennamen mit den übergebenen Parametern partiell ("match beginning") übereinstimmt.
Delphi-Quellcode:
Beispiel Aufruf:
function MyFindWindow(ClassName, WindowTitle: string): Boolean;
var NextHandle: HWND; WinTitle, WinClass: array[0..255] of Char; begin Result := 0; NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln while NextHandle > 0 do // falls Fenster gefunden begin // Fenster Titel, Klassennamen ermitteln GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle)); GetClassName(NextHandle, WinClass, SizeOf(WinClass)); // Überprüfung, ob Anfang der Strings übereinstimmen if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and (Copy(WinClass, 1, Length(ClassName)) = ClassName) then begin // Fenster gefunden, abbrechen Result := NextHandle; Break; end else NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln end; end;
Delphi-Quellcode:
MyFindWindow('Afx','Fenster Titel');
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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