![]() |
Alle Handles eines Classname auflisten
moin
ich versuch mich grad an einem code, der mir alle Windownames, die den gleichen Classname haben (hier zB. '#32770'). also son Handle besteht ja auch Classname + Windowname:
Delphi-Quellcode:
jetzt will ich aber alle handles auflisten und deren Windowname nach einem bestimmtem schlüsselwort durchsuchen, um an das eine richtige fenster zukommen... denn mein gesuchter Windowname ändert sich ständig... aber ich kenne halt ca 80%^^
wnd := FindWindow('#32770', nil);
hat jmd eine idee, wie ich das verwirklichen kann? thx im vorraus mfg [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Alle Handles eines Classname auflisten
eine idee wäre nicht direkt nach dem classname zu suchen sondern nach einer bestimmten struktur. So suchst du mit EnumWindows erst alle Hauptfenster und prüfst dann mit EnumChildWindows ob Buttons etc. drauf sind wie beim gesuchten Fenster
|
Re: Alle Handles eines Classname auflisten
Hi,
zum besseren ausfiltern könntest du auch mit CreateToolHelp32SnapShot() an den Pfad der Anwendung gelangen deren Threads mit EnumThreadWindows() durchgehen um damit deren Toplevel Fenster aufzulisten. Mit GetClassName() kommst du dann an den Klassennamen und mit GetWindowText() an den Namen der Fenster. |
Re: Alle Handles eines Classname auflisten
:wiejetzt: ich hab echt kA^^
habe grade ewig gesucht und dann sonen code gefunden
Delphi-Quellcode:
der geht bei mir aber ÜBERHAUPT nicht :wall:
type
PMyEnumParam = ^TMyEnumParam; TMyEnumParam = record lb: TListbox; end; function TMainForm.GetWindows(const hWnd : Longword; Param: PMyEnumParam): LongBool; stdcall; var Len : Longint; S : String; begin Result := True; if not ( IsWindow(hWnd) and IsWindowVisible(hWnd) ) then Exit; Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0); if Len > 0 then begin SetLength(S, Len); SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S))); Param.lb.Items.Add(s); end; // mit Result = False kann die Callbackfunktion vorzeitig verlassen werden end; procedure TMainForm.Button2Click(Sender: TObject); var Param:PMyEnumParam; begin Param.lb := Listbox1; EnumWindows(@GetWindows, LPARAM(@Param)); end; er zeigt bei
Delphi-Quellcode:
immer an, dass er variablen will????
EnumWindows(@GetWindows, LPARAM(@Param));
und generell habe ich kein Plan von EnumThreadWindows() etc^^ aber thx für eure mühen scho ma! @bitsetter jo mit GetWindowText() komm ich klar^^ nur ich will ALLE WIndowNames die es zu einer bestimmten klasse gibt :gruebel: |
Re: Alle Handles eines Classname auflisten
Ändere es mal so ab:
Delphi-Quellcode:
Also TMainForm. rausnehmen.
function {TMainForm.}GetWindows(const hWnd : Longword; Param: PMyEnumParam): LongBool; stdcall;
Zitat:
Naja wird schon seinen Grund haben. EDIT: Code ein bisschen umgebaut, die Namen der Fenster die mit dem Klassennamen übereinstimmen, werden in eine Listbox hinzugefügt.
Delphi-Quellcode:
function EnumClassName(hWnd: THandle; Lbx: TListbox): Boolean; stdcall;
var Len : Longint; S : AnsiString; ClName: array[0..60]of char; begin Result := True; if IsWindowVisible(hWnd) then begin windows.GetClassName(hWnd, ClName, SizeOf(ClName)); if ClName = '#32770' then begin Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0); if Len > 0 then begin SetLength(S, Len); SendMessage(hWnd, WM_GETTEXT, Len + 1, DWord(Pchar(S))); Lbx.Items.Add(S); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumClassName, DWord(ListBox1)); end; |
Re: Alle Handles eines Classname auflisten
wow super !!! es geht^^ hätt nich gedacht, dass dieses prob so schnell gelöst sein kann :) THX :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz