![]() |
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 :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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