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:
function FindApp(AWindow: HWND) : boolean; stdcall;
var Buffer: PChar;
begin
GetWindowText(AWindow, Buffer, 255);
Result := True;
memo1.lines.add(buffer);
end;
Testweise werden hier im Memo die laufenden Applikationen angezeigt. Hier plane ich die Zeilen nach dem gesuchten Namen zu untersuchen.
Der Aufruf erfolgt aus eine Prozedur so:
EnumWindows(@FindApp,0);
Die folgenden (mir nicht erklärbaren) Dinge passieren:
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.