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 FindWindow: Alle Handles filtern (https://www.delphipraxis.net/108859-findwindow-alle-handles-filtern.html)

gizzy 20. Feb 2008 13:40


FindWindow: Alle Handles filtern
 
Hallöchen,

und zwar suche ich ALLE offenen Handles mit dem Gleichen Fenstertitel! Bei VB gibt es den Parameter "NextWindow" oder so, den man mit übergben kann, dann wird das nächste Handle von dem Fenster mit den bestimmten Titel genommen.

Hier mal um den Arbeitsplatz zu finden, sind aber jetzt mehrere davon offen, möchte ich jedes einzelne Handle haben.

Für 2??
Delphi-Quellcode:
var
handles: Array[1..20] of Integer;
i: IntegeR;
begin
For i:=1 to 20 do begin
  handles[i]:= 0;
end;

handles[1]:= FindWindow(nil, 'Arbeitsplatz');
//.. Da ich keine Hilfe für den Syntax von FindWindow gefunden habe, kann es ja sein, das "nil" falsch ist oder ertwas anderes
//   Eingesetzt werden kann

For i:=1 to 20 do begin
   listbox1.Items.Add(InttoStr(handles[i]));
end;
Wäre nett wenn mir da jemand weiterhelfen könnte

DeddyH 20. Feb 2008 13:42

Re: FindWindow: Alle Handles filtern
 
Ich denke, EnumWindows sollte Dir weiterhelfen.

Apollonius 20. Feb 2008 13:53

Re: FindWindow: Alle Handles filtern
 
Die Hilfe zu den API-Funktionen findest du in der [msdn:f1a4d706a3="FindWindow"]MSDN[/msdn:f1a4d706a3]. Als Lösung für dein Problem würde ich FindWindowEx vorschlagen.

gizzy 20. Feb 2008 14:03

Re: FindWindow: Alle Handles filtern
 
Danke soweit.
Habe folgende Funktion gefunden, leider verstehe ich sie nicht. Vielleicht könnte mir jemand ein Anwendungs Beispiel zeigen :)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWinProc, 0); //Fehler: Variable erforderlich
end;

function TForm1.EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
var
 WinCaption : string;
 Len: integer;
begin
 Result := True;
 Len := GetWindowTextLength(Wnd);
 SetLength(WinCaption, Len);
 GetWindowText(Wnd, PChar(WinCaption), Len+1);
 if Trim(WinCaption) <> '' then
   Form1.Listbox1.Items.Add(Format('%.6x : %s', [Wnd, WinCaption]));
end;
Quelle

Viele Grüße

Apollonius 20. Feb 2008 14:04

Re: FindWindow: Alle Handles filtern
 
Du darfst nicht einfach aus Funktionen Methoden machen!

gizzy 20. Feb 2008 14:59

Re: FindWindow: Alle Handles filtern
 
Bei diesem Tipp muss man ja auch das Handle mit geben, ka was das soll.
Der taugt anscheinend nichts.
Ich komm nicht weiter :(.
Könntet ihr mir ein Beispiel Code dazu geben, wie ich das am besten um setzte?

Viele Grüße und Danke im voraus

bitsetter 20. Feb 2008 20:11

Re: FindWindow: Alle Handles filtern
 
Zitat:

Zitat von Apollonius
Du darfst nicht einfach aus Funktionen Methoden machen!

Genau, du brauchst echt nur noch den Code per Copy und Paste hinzufügen. :roll:
Delphi-Quellcode:
function EnumWinProc(Wnd: THandle; Lbx: TListBox): Boolean; stdcall;
var
  WinCaption : string;
  Len: integer;
begin
  Result := True;
  Len := GetWindowTextLength(Wnd);
  SetLength(WinCaption, Len);
  GetWindowText(Wnd, PChar(WinCaption), Len + 1);
  if Trim(WinCaption) <> '' then
    Lbx.Items.Add(Format('%.6x : %s', [Wnd, WinCaption]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@EnumWinProc, DWord(ListBox1));
end;

gizzy 21. Feb 2008 10:49

Re: FindWindow: Alle Handles filtern
 
Hi, danke schonmal für eure Mühen.
Da immer noch der Fehler Variable erforderlich auftaucht und ich anscheinend sowas wie eine eine "Funktions-Variable" erstellen muss, frage ich mich ob das überhaubt der Richtige Weg zur Lösung meines Problems ist. Ich suche ja nicht "alle" Fenster sondern nur diese die "Arbeitsplatz" oder sonst wie heißen.
In VB geht das mit:
Zitat:

nhWnd = GetWindow(nhWnd, GW_HWNDNEXT)
Loop
Denke ich mal!
Weiß wer etwas, was mir alle Handles zu einen Fenstertitel liefert?

API 21. Feb 2008 11:05

Re: FindWindow: Alle Handles filtern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei ein Demo (code von bitsetter)

gizzy 21. Feb 2008 14:54

Re: FindWindow: Alle Handles filtern
 
Zitat:

Zitat von API
Anbei ein Demo (code von bitsetter)

Danke! Ich frag mich nur, obwohl ich exakt dies hatte, bei mir dieser Variablen Fehler kam! :gruebel:
Habe jetzt den Filter innerhalb des EnumWindows geändert. Sieht folgendermaßen aus und funktioniert auch Prima

Delphi-Quellcode:
if Trim(WinCaption) = 'Arbeitsplatz' then
    Lbx.Items.Add(InttoStr(wnd));
Dank schön


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.
Seite 1 von 2  1 2      

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