Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erkennen ob eine EXE aktiv ist... (https://www.delphipraxis.net/1526-erkennen-ob-eine-exe-aktiv-ist.html)

Ares 5. Dez 2002 16:59


Erkennen ob eine EXE aktiv ist...
 
Hallo!

Wie kann ich ermitteln ob ein Programm/ eine Exe gerade aktiv ist?

Ich möchte also z.B. erkennen können ob die c:\test\test.exe gerade läuft oder nicht.

wie stelle ich das an :?:

Besten Dank
Ares

RomanK 5. Dez 2002 17:03

Aus dem EasyDelphiHelper
Zitat:

Läuft ein bestimmtes Programm?


Folgende Funktion überprüft, ob eine bestimmte EXE-Datei gestartet wurde. Als Parameter muss der Funktion der Pfad+Dateiname übergeben werden. Es wird versucht eine Datei mit dem gleichen Dateinamen anzulegen.
Delphi-Quellcode:
function ExeFileIsRunning(ExeFile: string): boolean;
var
  H:word;
begin
  H := CreateFile(PChar(ExeFile),
                  GENERIC_READ,
                  0,
                  nil,
                  OPEN_EXISTING,
                  0,
                  0);
  Result := (H >= 65535);
  CloseHandle(H);
end;


Ares 5. Dez 2002 17:13

Danke, aber leider funktioniert es nicht...
 
Hallo!

Vielen Dank für die flotte Antwort. Ich habe die Funktion gerade an der Outlook.exe ausprobiert und leider klappt es nicht.

Egal ob Outlook aktiv ist oder nicht bekommt H den Wert 1908 und das Ergbnis ist somit immer false...

Der Pfad wird jedenfalls korrekt als 'E:\PROGRA~1\Office\Office10\OUTLOOK.EXE' übergeben.

Woran kann es also liegen?

Besten Dank
Ares

CalganX 5. Dez 2002 17:34

Versuch einfach mal nur "OUTLOOK"...

Chris

PS: Ansonsten mal alle möglichen Handlenamen austesten...

Ares 5. Dez 2002 17:54

Hilft leider auch nicht...
 
Hallo!

Danke auch fürden tipp, aber das Ergebnis ist leider das gleiche. Nur ist H nun 65535 egal ob Outlook aktiv ist oder nicht. Bei anderen Programmen übrigens genau das selbe...

Sorry, wenn ich mich jetzt besonders blöd anstelle aber wie genau teste ich denn alle Möglichen Handle durch? Ich hab leider keine genau Vorstellung davon was das ist oder welche Handlenamen es alles gibt...

Besten Dank
Ares

CalganX 5. Dez 2002 18:08

Du probierst die, die theorethisch möglich wären. Versuche es mal mit MSOUTLOOK...

Chris

Christian Seehase 5. Dez 2002 18:11

Moin Zusammen,

also bei mir sähe die Funktion so aus:

Delphi-Quellcode:
function IsRunning(const AsExePath : string): boolean;

var
  fsWork : TFileStream;

begin
  Result := false;
  try
    fsWork := TFileStream.Create(AsExePath,fmOpenRead or fmShareExclusive);
    FreeAndNil(fsWork);
  except
    Result := true;
  end;
end;
Als AsExePath ist hier, logisch, der Pfad zur Datei anzugeben.

Funktionsprinzip:
Man versucht einen Filestream für exklusiven Zugriff zu öffnen.
Dies geht schief, wenn das Programm läuft, da die Datei dann vom System gelockt ist, und nicht exklusiv geöffnet werden kann.
Klappt es, wird der Filestream wieder freigegeben, und false zurückgeliefert.

Eine andere Variante wäre es, zu versuchen die Datei zum Schreiben zu öffnen. Das sollte ebenso auf eine Exception auflaufen, wenn das Programm läuft.

Das ist die Umkehrung einer MiniKompo, die ich hier in schon mal in einem Thread (Datei für Schreibzugriffe sperren?) gepostet hatte.

Leider kann ich die beiden Varianten zur Zeit nicht ausprobieren, aber es sollte funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz