![]() |
ChildWindow nicht gefunden? Wieso?
Hallo, ich habe ein kleines Problem,
und zwar kann ich das Handle für eine ListBox nicht finden. Hier mal mein Code:
Delphi-Quellcode:
Function Find_IvAc_WindowHandle : HWND;
Var NextHandle: HWND; WinTitle, WinClass: Array[0..255] of Char; Const ClassName = 'Afx:00400000:0'; WindowTitle = 'IvAc'; 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; Function Find_IvAc_HandoffBox(IvAc_Handle :HWND):HWND; var wndChild : HWND; begin wndChild := 0; if IvAc_Handle > 0 then wndChild := FindWindowEx(ivAc_Handle, 0, 'ListBox', nil); result := wndChild; end; Ich bekomme nun bei der Funktion Find_IvAc_HandoffBox immer null als ergebnis zurück! Wieso das? Mit WinSpy wurde das Handle ja auch ermittelt. Was mache cih falsch? LG Marco! |
Re: ChildWindow nicht gefunden? Wieso?
Hi,
ich weiß jetzt nicht ob das was ich dir sage das ist was du suchst, aber normalerweise kommst du an eine Komponente die auf einem Child liegt so ran:
Delphi-Quellcode:
So solltest du an deine Listbox ran kommen, ob das jetzt das ist was du willst weiß ich wie gesagt nicht. Du kannst das auch so umschreiben dass du alle Childs durchgehen kannst (denk ich zumindest) aber für ein gerade angezeigtes funktioniert das so.
var Child : TChild; //-> TChild = T'Name des Childs'
begin //... was du sonst noch so machst // Main = Name des Main Forms // Das if assigned prüft ob das gerade gezeigte Child den Focus hat, also ob es gerade angewählt ist. if Assigned(Main.ActiveMDIChild) then begin Child := Main.ActiveMDIChild as TChild; Child.ListBox1.Items.Add('beispiel'); end; end; Gruß AnyKey |
Re: ChildWindow nicht gefunden? Wieso?
Also ich habs jetzt einfach mal so gemacht...
Delphi-Quellcode:
function Get_HandoffBox_Handle : HWND;
Var NextHandle: HWND; WinTitle, WinClass: Array[0..255] of Char; wndChild : HWND; Const ClassName = '#32770'; WindowTitle = ''; 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; // ermitteln ob Listbox und Button wndChild := FindWindowEx(Result, 0, 'ListBox', nil); if wndChild <> 0 then begin Result := wndChild; break; end; NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end else NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln end; end; Es funktioniert auch, setzt allerdings vorraus, dass das fenster auf dem die Box liegt vorher geöffnet wurde... |
Re: ChildWindow nicht gefunden? Wieso?
Ja das sagte ich ja ;)
Das Child muss schon existieren, geöffnet und aktiv sein. Hoffe das hat dir trotzdem weitergeholfen :-D Gruß AnyKey |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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