![]() |
Problem mit ENumWindows
Hallo zusammen,
ich habe diverse Beiträge zum ENumWindows durchforstet, konnte mein Problem aber nicht lösen. Aus meinem Programm heraus will ich erfahren, ob eine bestimmte Exe noch läuft, deren Name ich kenne und darauf reagieren. Dafür habe ich eine Funktion angelegt:
Delphi-Quellcode:
Testweise werden hier im Memo die laufenden Applikationen angezeigt. Hier plane ich die Zeilen nach dem gesuchten Namen zu untersuchen.
function FindApp(AWindow: HWND) : boolean; stdcall;
var Buffer: PChar; begin GetWindowText(AWindow, Buffer, 255); Result := True; memo1.lines.add(buffer); end; Der Aufruf erfolgt aus eine Prozedur so:
Delphi-Quellcode:
Die folgenden (mir nicht erklärbaren) Dinge passieren:
EnumWindows(@FindApp,0);
1.) Normalerweise werden die eingegebenen Codes ja vervollständigt. Als ich bei der Funktion die Zeile geschrieben habe, die das Memo füllt ...MEMO1. <- wurde nichts vorgeschlagen. Vielmehr meinte der Compiler, dass die Vervollständigung nicht geht, weil Fehler vorliegen. Wenn ich vor der MEMO1 jedoch FORM1. setzt klappt es. 2.) Die Funktion selbst ist nicht zu Beginn des Programms deklariert. Wenn ich das mache (etwa so hinter den bestehenden Proceduren): "function FindApp(AWindow: HWND) : boolean; stdcall;" Meint der Compiler dass beim Aufruf über "ENumWindows" in der Prozedur etwas fehlt -> "Variable required". 3.) Wenn ich die Deklaration weglasse und das Memo mit Form1.Memo1 anspreche werden die laufenden Apllicationen wirklich ins Memo geschrieben. Dann wird aber in der Prozedur, die den Aufruf ENumWindows macht beim nächsten Schritt eine Access Violation ausgelöst. Schalte ich den Schritt mit dem ENumWindos aus laufen die Folgeschritte weiter. Schalte ich die Folgeschritte aus läuft das ENum sauber. was mache ich falsch??? wahrscheinlich liegt es an mir...nur wo? P.S. Zwischenzeitlich hatte ich auch einen Stand wo beides ging doch da wurden Variablen (Zähler), die nach dem ENum liegen einfach mit Null gefüllt obwohl diese in der ENum gar nicht verändert wurden. Diesen Stand konnte ich aber nicht reporduzieren. |
Re: Problem mit ENumWindows
laut MSDN muss die EnumWindowsProc wie folgt aussehen:
Code:
Bei dir fehlt also der LParam und Boolean ist auch nicht das gleiche wie BOOL.
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, LPARAM lParam ); |
Re: Problem mit ENumWindows
Aha !?
Ich habe das Boolean gegen Bool getauscht. (Wo ist der Unterschied?) Wirklich geändert hat das aber nichts. Was das LParam angeht, so habe ich Beispiele gefunden, wo der Aufruf so erfolgte. Die muss ich das angeben und versorgen? (Ich dachte das ",0" hinter dem HWND würde hier reichen. |
Re: Problem mit ENumWindows
Deine Funktion muss so aussehen:
Delphi-Quellcode:
Der Aufruf ist schon richtig.
function FindApp(AWindow: HWND; lparam: LPARM) : Bool; stdcall;
|
Re: Problem mit ENumWindows
Muss ich das LPARM irgendwo deklarieren oder wird eine Unit dafür gebraucht?
Der Compiler sagt nun: Undeclared Identifier LPARM |
Re: Problem mit ENumWindows
Das Teil heißt glaube ich "LPARAM" und ist in der Unit Windows oder Messages.
|
Re: Problem mit ENumWindows
genau, ich hatte mich bei meinen letzten Post vertippt (einen Buchstaben bei dem Typen vergessen). Bei der C-Declaration aus dem MSDN (Beitrag #2 des Themas) stimmt es jedoch.
|
Re: Problem mit ENumWindows
Danke,
verschwunden sind die Probleme aber nicht. Wenn ich die Funktion deklariere (hinter den Prozeduren) kommt wieder die Meldung mit der fehlenden Variablen beim Aufruf der ENum. Ohne Deklaration gehts, aber der Folgebefehl nach der ENum macht eine Access Violation. Schon komisch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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