![]() |
Handle und Klassen - Um welche Klasse handelt es sich?
Hi ich wollte aus einem FTP Programm, das einzelne Kopiervorgänge anzeigt Daten auslesen. (Dateiname, Fertigstellung etc.)
Jetzt lese ich hier überall im Forum, dass man den Klassennamen der Komponente braucht. Es handelt sich bei der Komponente um eine Art Listbox, leider weiß ich nicht was ich als Classname bei FindWindowEX() angeben soll :/ 2. und viel wichtigeres Problem: Ich komme noch nichtmal soweit! Sitze schon seit einer halben Stunde an dem Codeschnipsel fest:
Code:
Mit XSpy hab ich den Classname der Anwendung bekommen, aber er findet nur einen Button, wenn ich
var
FoundWindow,F2: HWND; WindowText: array[0..255] of char; begin F2 := FindWindow('TApplication',nil); {Find a TButton child window} FoundWindow := FindWindowEx(F2, 0, 'TButton', nil); {Get its text} GetWindowText(FoundWindow, WindowText, 255); {Display it} label1.Caption := 'FindWindowEx found window handle ' + IntToStr(FoundWindow) + ': ' + WindowText; bei FoundWindow := FindWindowEx(Form1.handle, 0, 'TButton', nil); Das Form1.handle angebe. Wenn ich da F2 für einsetze, also mein ermitteltes Handle, findet er nicht :( Was mach ich nur Falsch? |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Also ich ermittle den Klassennamen in meinem Programm so:
Delphi-Quellcode:
function Klassenname(Handle: HWND): string;
begin SetLength(Result, 260); SetLength(Result, Windows.GetClassName(Handle, PChar(Result), Length(Result))); end; |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Zitat:
Probier's mal mit meinem WinSpy Programm. Kannst mit "Fenster auswählen" den Button auswählen und dann im Menü "Optionen" "FindWindow Code2" auswählen. Dann generiert es dir automatisch den Code zum Auffinden des Buttons Download gibt's hier: ![]() |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Hey Toms, genial :) Mit deinem Programm lässt sich das machen, was ich will! Gehe ich auf die Komponente (SysListView32) und klicke auf Control Text... steht da das, was ich haben will! *freu*
Kannst du mir sagen wie du den Text ausgiebst? Wäre klasse!! :) Edit: Das müsste doch hiermit gehen (Tut es aber nicht :( )
Code:
procedure TForm1.Button1Click(Sender: TObject);
var FoundWindow,F2: HWND; WindowText: array[0..255] of char; begin F2 := FindWindow('wxWindowClassNR',nil); {Find a TButton child window} FoundWindow := FindWindowEx(F2, 0, 'SysListView32', nil); {Get its text} GetWindowText(FoundWindow, WindowText, 255); {Display it} label1.Caption := WindowText; end; |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Hmm also mit
Code:
bekomm ich den richtigen Text auf dem Button.
procedure TForm1.Button4Click(Sender: TObject);
var wnd: HWND; WindowText: array[0..2000] of char; begin wnd := FindWindow('wxWindowClassNR',nil); wnd := FindWindowEx(wnd, 0, 'wxWindowClassNR', nil); wnd := FindWindowEx(wnd, 0, 'Button',nil); if wnd <> 0 then begin GetWindowText(wnd, WindowText, 2000); {Display it} memo1.Text := WindowText; end; end; Aber mit
Code:
bekomm ich nicht den Inhalt der Liste :( Warum geht das bei dir? Was machst du anders? @toms
procedure TForm1.Button3Click(Sender: TObject);
var WindowText: array[0..2000] of char; wnd: HWND; begin wnd := FindWindow('wxWindowClassNR',nil); wnd := FindWindowEx(wnd, 0, 'wxWindowClassNR', nil); wnd := FindWindowEx(wnd, 0, 'SysListView32', nil); if wnd <> 0 then begin GetWindowText(wnd, WindowText, 2000); {Display it} memo1.Text := WindowText; end; end; |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Eine ListView kannst du nicht so einfach auslesen.
Habe jetzt leider zu wenig Zeit, um dir einen Code zu posten. Werde es dann morgen tun. |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
bei listviews gibt es specielle messages, such einfach mal nach LVM-Messages. Mit denen kann man Listviews auslesen und so weiter..
|
Re: Handle und Klassen - Um welche Klasse handelt es sich?
|
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Moin MrNiceGuy,
was die Schweizer da beschreiben, bezieht sich auf die ListBox nicht auf den ListView. Das Auslesen mit den gezeigten Techniken funktioniert aus anderen Prozessen heraus nur bei Controls die es schon unter 16 Bit Windows gab (Button, Edit, ListBox...) aber nicht mit denen, die beim 32 Bit Windows hinzugekommen sind (z.B. ListView, TreeView). |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Hi, jap das hab ich grad gelesen, ich versuche jetzt die Prozedur umzuschreiben, jedoch hapert es schon wieder. Ich ersetze das:
LB_GETCOUNT durch ein LVM_GETITEMCOUNT aber da meint Delphi, dass es den Befehl nicht kenne :( Bevor ich jetzt verzweifle geh ich lieber erstmal schafen. :roll: 'Nacht :) |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Moin MisterNiceGuy,
die Message befindet sich in der Unit commctrl. Wenn sich der ListView in einem anderen Prozess befindet wird Dir das aber auch nichts nutzen. |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Zitat:
@toms: was ist eigentlich der Unterschied zwischen "FindWindow Code" und "FindWindow Code2"?? :gruebel: |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Zitat:
Es gibt Fälle, wo es auf einem Parent Control mehrere Controls gleicher Klasse gibt. Bsp: Klassen Name: "ExploreWClass" | Title: "Arbeitsplatz" | Handle: 9700290 13697954: WorkerW 3801872: ReBarWindow32 9896804: ToolbarWindow32 <------ 10224428: WorkerW 12321790: ToolbarWindow32 <------ Dann findet ein Aufruf von FindWindowEx(...) nur das erste Control. "FindWindow Code2" erstellt einen "richigeren Code" indem es auch das richtige Control findet. Später wird dann der Menüpunkt "FindWindow Code2 Beta" wieder durch "FindWindow Code" ersetzt. Habe eigentlich nur darum schon eine Preview meines WinSpys aufs Netzt gestellt, weil MisterNiceGuy genau obiges Problem hatte und mein alter WinSpy auch noch nicht in der Lage war, Controls gleicher Klasse auf einem Parent korrekt zu finden. Hilft die Erklärung so? mfg Thomas |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Hi öhhm, das Problem hat sich ja jetzt glücklicherweise gelöst. Jetzt geht es mir nur darum, dass ich den Text nicht aus dem Listview bekomme :( @Toms: Dein Programm kann das und ich wollt nur gerne wissen wie du das gemacht hast :wiejetzt:
|
Re: Handle und Klassen - Um welche Klasse handelt es sich?
:wink:
![]() |
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Zitat:
|
Re: Handle und Klassen - Um welche Klasse handelt es sich?
Gaaaanz großen Tennis :) Dankeschön!! Habt alle was gut!! *g* :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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