Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Handle und Klassen - Um welche Klasse handelt es sich? (https://www.delphipraxis.net/33718-handle-und-klassen-um-welche-klasse-handelt-es-sich.html)

MisterNiceGuy 11. Nov 2004 16:05


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:
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;
Mit XSpy hab ich den Classname der Anwendung bekommen, aber er findet nur einen Button, wenn ich
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?

Ultimator 11. Nov 2004 16:08

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;

toms 11. Nov 2004 18:56

Re: Handle und Klassen - Um welche Klasse handelt es sich?
 
Zitat:

Mit XSpy hab ich den Classname der Anwendung bekommen, aber er findet nur einen Button,
Hi,

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: http://www.delphipraxis.net/internal...ghlight=winspy

MisterNiceGuy 11. Nov 2004 19:09

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;

MisterNiceGuy 11. Nov 2004 19:34

Re: Handle und Klassen - Um welche Klasse handelt es sich?
 
Hmm also mit
Code:
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;
bekomm ich den richtigen Text auf dem Button.
Aber mit

Code:
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;
bekomm ich nicht den Inhalt der Liste :( Warum geht das bei dir? Was machst du anders? @toms

toms 11. Nov 2004 19:46

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.

SirThornberry 11. Nov 2004 19:48

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..

MisterNiceGuy 11. Nov 2004 21:23

Re: Handle und Klassen - Um welche Klasse handelt es sich?
 
Hab was, aber funzt net :(

http://www.swissdelphicenter.ch/de/showcode.php?id=1335

Christian Seehase 11. Nov 2004 21:33

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).

MisterNiceGuy 11. Nov 2004 21:57

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.
Seite 1 von 2  1 2      

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