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 Fenster Listen (https://www.delphipraxis.net/128705-fenster-listen.html)

Sir K 4. Feb 2009 12:04


Fenster Listen
 
Hallo,
ich benutze den folgenden Code um mir in einer ListBOx alle aktiven Fenster anzeigen zu lassen...
der Code ist hier aus dem Forum und müsste eig funktionieren... nur ich bekomme beim Funktionsaufru die Meldung Inkompatibble Typen 'HWND' und 'Pointer'.

Kann mir da einer helfen?
Delphi-Quellcode:
function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
var Bezeichnung : Array[0..200] of Char;
begin
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
     ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
     (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
     (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin
      GetWindowText(Wnd, Bezeichnung, 256);
    Form1.listbox1.Items.Add(Bezeichnung);
  end;
end;


procedure TForm1.aktualisieren1Click(Sender: TObject);
begin
ListBox1.Clear;
EnumWindows(@EnumWindowsProc, 1);
end;

mr_emre_d 4. Feb 2009 12:51

Re: Fenster Listen
 
Schau dir mal die HIlfe genauer an !!

Code:
Return Value

To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.

himitsu 4. Feb 2009 12:58

Re: Fenster Listen
 
Wo (in welcher Zeile) bekommst du denn diese Fehlermeldung?


PS:
Delphi-Quellcode:
var Bezeichnung : Array[0..200] of Char;

GetWindowText(Wnd, Bezeichnung, 256);
Length(Bezeichnung) = 210
MaxLength für GetWindowText = 256

fällt dir da was auf?

Sir K 4. Feb 2009 13:21

Re: Fenster Listen
 
Zitat:

Zitat von himitsu
Wo (in welcher Zeile) bekommst du denn diese Fehlermeldung?


PS:
Delphi-Quellcode:
var Bezeichnung : Array[0..200] of Char;

GetWindowText(Wnd, Bezeichnung, 256);
Length(Bezeichnung) = 210
MaxLength für GetWindowText = 256

fällt dir da was auf?

beim Funktionsaufruf:
Delphi-Quellcode:
EnumWindows(@EnumWindowsProc, 1);

Luckie 4. Feb 2009 13:28

Re: Fenster Listen
 
Wo kommt denn die eins beim Funktionsaufruf her?

Guck dir das mal an: http://www.michael-puff.de/Developer...mWindows.shtml

himitsu 4. Feb 2009 13:47

Re: Fenster Listen
 
grad getestet und ich bekomm keine Fehlermeldung :gruebel:

und wie gesagt:
Delphi-Quellcode:
GetWindowText(Wnd, Bezeichnung, 201);
// bzw.
GetWindowText(Wnd, Bezeichnung, Length(Bezeichnung));
@Luckie: die "1" ist doch egal ... da er LParam eh nicht verwendet


[add]
Delphi-Quellcode:
function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
var Bezeichnung : Array[0..200] of Char;
begin
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
      ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
      (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
      (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin
    GetWindowText(Wnd, Bezeichnung, Length(Bezeichnung));
    TListBox(LParam).Items.Add(Bezeichnung);
  end;
  Result := True;
end;


procedure TForm1.aktualisieren1Click(Sender: TObject);
begin
  ListBox1.Clear;
  EnumWindows(@EnumWindowsProc, LPARAM(ListBox1));
end;

Sir K 4. Feb 2009 13:54

Re: Fenster Listen
 
Zitat:

Zitat von Luckie
Wo kommt denn die eins beim Funktionsaufruf her?

Guck dir das mal an: http://www.michael-puff.de/Developer...mWindows.shtml

Delphi-Quellcode:
type
  PMyEnumParam = ^TMyEnumParam;
  TMyEnumParam = record
    lb: TListbox;
  end;
Wie muss ich diesen abschnitt eintragen? wenn cih den einfach hinzufüge bekomm ich erst mal die meldungen:
-"Feld Form1.Form1 besitzt keine entsprechende Komponente. Soll d. Deklaration entfert werden?"
-"Die Methode Button1Click, auf die Button1Click verweist, existiert nicht soll der Verweis entfernt werden?"

bei verneinung kommen dann folgende compiler meldungen:

; oder : erwartet aber = gefunden
Published-Feld 'PMyEnumParam' ist weder vom Typ class noch interface
Delphi-Quellcode:
PMyEnumParam = ^TMyEnumParam;
und das gleiche mit der nächsten Zeile..

Sir K 4. Feb 2009 13:58

Re: Fenster Listen
 
Zitat:

Zitat von himitsu
grad getestet und ich bekomm keine Fehlermeldung :gruebel:

und wie gesagt:
Delphi-Quellcode:
GetWindowText(Wnd, Bezeichnung, 201);
// bzw.
GetWindowText(Wnd, Bezeichnung, Length(Bezeichnung));
@Luckie: die "1" ist doch egal ... da er LParam eh nicht verwendet


[add]
Delphi-Quellcode:
function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
var Bezeichnung : Array[0..200] of Char;
begin
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
      ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
      (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
      (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin
    GetWindowText(Wnd, Bezeichnung, Length(Bezeichnung));
    TListBox(LParam).Items.Add(Bezeichnung);
  end;
end;


procedure TForm1.aktualisieren1Click(Sender: TObject);
begin
  ListBox1.Clear;
  EnumWindows(@EnumWindowsProc, LPARAM(ListBox1));
end;

habs mal enstprechend abgeändert aber es bleibt bei dem Fehler... also wenn du die Meldung nicht bekommst kann das ja nur heißen dass es an der delphi version liegt^^ welche hast du denn?

himitsu 4. Feb 2009 14:16

Re: Fenster Listen
 
in D7 und D2009 getestet

mr_emre_d 4. Feb 2009 14:21

Re: Fenster Listen
 
Ich werde natürlich wieder ignoriert ... :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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 by Thomas Breitkreuz