![]() |
[DELPHI 2010] EnumWindows mit Handle
Hallöchen!
Langsam bin ich echt sauer, dass mein Vater mit Delphi 2010 von seiner Firma mitgebracht hat! Nagut, es ist schnell, stabil und teuer! JEDOCH LASSEN SICH VIELE SOURCECODES NICHT KOMPILIEREN!!!!!! :evil: Ich glaube ich werde wieder zu delphi 7 umsteigen müssen! Naja.. Jetzt zu meinem Problem: Ich habe von Torry's Delphi Pages diesen Code:
Delphi-Quellcode:
um in einer ListBox alle offenen Fenster aufzulisten! [+ Handle]
function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export;
var Title, ClassName: array[0..255] of char; begin Result := True; GetWindowText(wHandle, Title, 255); GetClassName(wHandle, ClassName, 255); if IsWindowVisible(wHandle) then lb.Items.Add(string(Title) + '-' + string(ClassName)); end; procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWindowsProc, Integer(Listbox1)); end; Doch kompilieren lässt sich mal wieder nicht, der Aufrufcode! Nach
Delphi-Quellcode:
sagt er:
EnumWindows(@EnumWindowsProc
Variable erforderlich! Hat jemand ne Idee? :drunken: |
Re: [DELPHI 2010] EnumWindows mit Handle
Hmm, bei mir funkz es auf Anhieb in 2010. Welche Units nutzt du?
|
Re: [DELPHI 2010] EnumWindows mit Handle
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls; Also ich weiß auch nicht weiter... |
Re: [DELPHI 2010] EnumWindows mit Handle
Zeig mal DEINEN gesamten Code.
|
Re: [DELPHI 2010] EnumWindows mit Handle
Liste der Anhänge anzeigen (Anzahl: 2)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@EnumWindowsProc, Integer(ListBox1)); end; function TForm1.EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export; var Title, ClassName: array[0..255] of char; begin Result := True; GetWindowText(wHandle, Title, 255); GetClassName(wHandle, ClassName, 255); if IsWindowVisible(wHandle) then lb.Items.Add(string(Title) + '-' + string(ClassName)); end; end. Hoffentlich ist das kein dussliger Fehler :pale: |
Re: [DELPHI 2010] EnumWindows mit Handle
EnumWindowsProc muss eine reguläre Funktion sein, keine Methode.
|
Re: [DELPHI 2010] EnumWindows mit Handle
Jupp, funktioniert ohne Probleme.
Nur dieses stört mich etwas, aber es bereitet zumindestens keine Probleme. Zitat:
Zitat:
|
Re: [DELPHI 2010] EnumWindows mit Handle
OK, sry!
wie muss ich das denn jetzt machen? Wisst ihr, ich hatte Delphi nie in der Schule und habe mir das selber beigebracht! Wie muss ich das jetzt aufrufen? ^^ [DCC Fehler] Unit1.pas(29): E2003 Undeklarierter Bezeichner: 'EnumWindowsProc' Wenn ich das so schreibe function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export; €D1T: OK Ok alles Ok! Danke! Danke Danke! GOOGLE: ![]() |
Re: [DELPHI 2010] EnumWindows mit Handle
Setze die Funktion im Quelltext vor den Aufruf.
|
Re: [DELPHI 2010] EnumWindows mit Handle
Ja, so ist das noch besser! Klasse! ^^
Hier erhält man sehr viel Erfahrung und Hilfe :zwinker: |
Re: [DELPHI 2010] EnumWindows mit Handle
Ok, nun habe ich selbstständig versucht, das in einer ListView umzusetzen!
function EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall; var WinCaption : string; Len: integer; i : TListItem; begin Result := True; Len := GetWindowTextLength(Wnd); SetLength(WinCaption, Len); GetWindowText(Wnd, PChar(WinCaption), Len+1); if Trim(WinCaption) <> '' then begin i:= Form1.ListView1.Items.Add; i.Caption:= WinCaption; i.SubItems.add(inttostr(Wnd)); end; end; Funktioniert natürlich nicht, ist ja klar :? 1. Spalte: Fenstername 2. Spalte: Handle Wie muss ich mein Code umsetzen? Oder muss ich das ganz anders machen mit irgendwas wie
Delphi-Quellcode:
oder sowas?
for I:= 0 to WindowCount do begin
|
Re: [DELPHI 2010] EnumWindows mit Handle
Hast du den Code eigentlich verstanden?
Zitat:
Delphi-Quellcode:
Wobei LParam das LParam aus dem Aufruf von EnumWindows enthält
function EnumWindowsProc(wHandle: HWND; LParam: LongInt): Bool; stdcall;
Code:
Also, alles was du per LParam übergibst, hast du somit auch in der Prozedur
EnumWindows(@EnumWindowsProc, [color=#ff0000]LongInt(ListBox1)[/color]);
function EnumWindowsProc(wHandle: HWND; [color=#ff0000]LParam: LongInt[/color]): LongBool; stdcall; begin [color=#ff0000]TListView(LParam)[/color].Item.Add und mußt es einfach nur zurückcasten. (Wobei man hierbei auch mal den Prozedurrumpf anpassen könnte, so wie es in der Demo gemacht wurde Sowas wie Form1.ListView1 verursacht nur mehr Verwirrung und erzeugt fehleranfälligeren Code. PS: Boolean (1 Byte) <> BOOL (4 Byte) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 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