Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FensterHandle über den Prozess ermitteln (https://www.delphipraxis.net/132461-fensterhandle-ueber-den-prozess-ermitteln.html)

Asatru 14. Apr 2009 16:46

Re: FensterHandle über den Prozess ermitteln
 
Ok das hilft mir schonmal zu 50% weiter nun nur die Frage, wie verbinde ich dann sowas in der Procedur?

Damit ich dann eben Testläufe machen kann? Muss dann mein quellcode der sich dann das handle holt in die klammern verstaut werden von enumWindows?

MFG

jaenicke 14. Apr 2009 17:28

Re: FensterHandle über den Prozess ermitteln
 
Ich würde das in die Callbackprozedur legen oder von da aus eine andere mit dem Fensterhandle als Parameter aufrufen. ;-)

Asatru 14. Apr 2009 17:58

Re: FensterHandle über den Prozess ermitteln
 
Stehe grad uffn schlauch, hab mal bissle durchgetest aber nie funzte es, zu testzwecken behalte ich nun das auflisten der Klassen bei und baue Vorher nur eben eine Abfrage rein.

Ist es ein falscher Weg wenn ich einfach nur Frage

wenn classname gleich diesen Ausdruck hat dann adde den Klassennamen

?!?

Delphi-Quellcode:
function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export;
var
  ClassName: array[0..255] of char;
  ClassName_gesucht: array[0..255] of char;
begin
  GetClassName(wHandle, ClassName, SizeOf(ClassName)); // Klassenname ermitteln
  ClassName_gesucht:= 'wxWindowClassNR';
  if Classname = ClassName_gesucht then
     lb.Items.Add(string(ClassName));
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
 EnumWindows(@EnumWindowsProc, Integer(Listbox1));
end;

jaenicke 14. Apr 2009 19:51

Re: FensterHandle über den Prozess ermitteln
 
Passiert nix, oder was passiert (nicht)?

Asatru 14. Apr 2009 21:44

Re: FensterHandle über den Prozess ermitteln
 
hab classname_gesucht mal mit als array angegeben aber passiert nie was, wollte sagen eben wenn classname übereinstimmt dann soll ereben alle classnamen mir mal anzeigen damitich erstmal weis das es funktioniert der vergleich, aber irgendwie komme ich net uff den richtigen vergleich!

x000x 15. Apr 2009 00:09

Re: FensterHandle über den Prozess ermitteln
 
Moin moin,

in deiner Callback Funktion fehlt ein Result := True ...
So wie es jetzt aussieht, steigt er nach dem 1. Aufruf aus.

Asatru 15. Apr 2009 15:25

Re: FensterHandle über den Prozess ermitteln
 
Ja sorry vergessen trotzdem passiert einfach nix dann beim klicken auf mein Label, aber rein vom quellcode mit

Delphi-Quellcode:
result := true;
ist den mein Vergleich richtig ausgedrückt?

DeddyH 15. Apr 2009 15:29

Re: FensterHandle über den Prozess ermitteln
 
Und wenn Du die Arrays vor Gebrauch erst einmal nullst?
Delphi-Quellcode:
FillChar(Classname,SizeOf(Classname),#0);

Asatru 15. Apr 2009 15:36

Re: FensterHandle über den Prozess ermitteln
 
löl

recht Herzlichen Dank nun hat es geklappt


MFG

Edit: Mir hat sich grad ein Neues Problem eröffnet. Folgende Thematik:

Also ich will mir aus einem Programm 2 Zahlen holen (X und Y Koordinate) Nur das Problem ist, das eine andere Anwendung schon alle Fenster (Wo ich x und y hole) via WinAPI in seine eigenen Tabsheets gezogen hat! Muss ich dem Prog nun sagen das jeder Tab eigentlich eigenes Window ist? Wenn ja wie müsste ich an die Sache rangehen? MFG

Delphi-Quellcode:
function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export;
var
  Title, ClassName: array[0..255] of char;
  ClassName_gesucht: array[0..255] of char;
  xcor,ycor: String;
begin
  Result:= true;
  FillChar(Classname,SizeOf(Classname),#0);
  GetWindowText(wHandle, Title, SizeOf(Title));
  GetClassName(wHandle, ClassName, SizeOf(ClassName)); // Klassenname ermitteln
  Classname_gesucht := 'WindowsForms10.Window.8.app.0.378734a' ;
  if Classname = ClassName_gesucht then
      begin
            wHandle := FindWindowEx(wHandle, 0, 'WindowsForms10.SysTabControl32.app.0.378734a', nil);
            wHandle := FindWindowEx(wHandle, 0, 'WindowsForms10.Window.8.app.0.378734a', nil);
            wHandle := FindWindowEx(wHandle, 0, 'wxWindowClassNR', nil);
            wHandle := FindWindowEx(wHandle, 0, 'wxWindowClassNR', 'ID_PANEL1');
            wHandle := FindWindowEx(wHandle, 0, 'wxWindowClassNR', 'ID_PANEL2');
            wHandle := GetDlgItem(wHandle, 532);
                if wHandle <> 0 then
                    begin
                        xcor := PCHar('x: ' + GetWinText(wHandle));
                        lb.Items.Add(xcor);
                    end;
      end;



end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc, Integer(Listbox1));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz