![]() |
Problem mit IsExeRunning
Hallo,
ich nutze seit längerer Zeit die Routine IsExeRunning um festzustellen ob ein Programm gestartet ist:
Delphi-Quellcode:
Das hat bisher super funktioniert, doch jetzt kommt ein Programm daher bei dem es nicht zu funktionieren scheint. Nach dem Programmstart erscheint ein Anmeldefenster, das Programm wird von IsExeRunning gefunden. Nach der Anmeldung wird es dann nicht mehr gefunden, es befindet sich aber immer noch in der Taskliste. Wie kann das sein ??
function IsExeRunning(const AExeName: string): boolean;
var h: THandle; P: TProcessEntry32; begin P.dwSize := SizeOf(P); h := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0); try Process32First(h, P); repeat Result := AnsiUpperCase(AExeName) = AnsiUpperCase(P.szExeFile); until Result or (not Process32Next(h, P)); finally CloseHandle(h); end; end; Ich benutze IsExeRunning in einem NT-Service. KUBA |
AW: Problem mit IsExeRunning
Und Du bist ganz sicher, dass es derselbe Exename ist? Nicht, dass das Programm sich nach der Anmeldung beendet und ein anderes mit einem sehr ähnlichen Namen startet.
|
AW: Problem mit IsExeRunning
NT-Service? Ab Vista wird der NT-Service keinen Zugriff mehr auf den Desktop des angemeldeten Benutzers haben.
Mit dem Anmeldebildschirm: Meinst du hier evtl. den Dialog der von der UAC kommt? |
AW: Problem mit IsExeRunning
Ach ja, Betriebssystem ist Windows XP
Mit Anmeldebildschirm meine ich, dass es sich um eine Client-Anwendung handelt. Da kommt dann nach dem Start ein Anmeldebildschirm und wenn man die Zugangsdaten richtig eingegeben hat wird eine Verbindung zum Server hergestellt. KUBA |
AW: Problem mit IsExeRunning
Zitat:
KUBA |
AW: Problem mit IsExeRunning
|
AW: Problem mit IsExeRunning
Eher eine Scheinlösung.
Dein Beispiel:
Delphi-Quellcode:
Result := AnsiUpperCase(AExeName) = AnsiUpperCase(P.szExeFile);
Die "Lösung":
Delphi-Quellcode:
if pos(Exename, pe32.szExeFile) <> 0 then
result := pe32.th32ProcessID; |
AW: Problem mit IsExeRunning
Wenn AExeNamen wirklich nur der Name der Exe-Datei ist, ohne Pfadangabe, dann besser
Delphi-Quellcode:
.
Result := AnsiSameText(AExeName, ExtractFileName(P.szExeFile));
Delphi-Quellcode:
.
Pos('Programm.exe', 'C:\Programme\Spezialprogramm.exe) > 0
würde ja sonst True liefern :angle2: |
AW: Problem mit IsExeRunning
verstehe ich jetzt nicht ganz ...
habs so gemacht und geht:
Delphi-Quellcode:
oder:
//if not IsExeRunning ('ax.exe') then
hProcess := GetProcessHandleFromID(GetProcessID('ax.exe')); if hProcess = 0 then
Delphi-Quellcode:
aber warum IsExeRunning bei ax.exe nicht funktioniert ist schon seltsam, zumal ax.exe in der Taskliste zu sehen ist.
//if IsExeRunning ('ax.exe') then
hProcess := GetProcessHandleFromID(GetProcessID('ax.exe')); if hProcess <> 0 then KUBA |
AW: Problem mit IsExeRunning
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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