AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen ob eine EXE aktiv ist...

Ein Thema von Ares · begonnen am 5. Dez 2002 · letzter Beitrag vom 5. Dez 2002
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Erkennen ob eine EXE aktiv ist...

  Alt 5. Dez 2002, 17:59
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
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 5. Dez 2002, 18: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;
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Danke, aber leider funktioniert es nicht...

  Alt 5. Dez 2002, 18:13
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 5. Dez 2002, 18:34
Versuch einfach mal nur "OUTLOOK"...

Chris

PS: Ansonsten mal alle möglichen Handlenamen austesten...
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#5

Hilft leider auch nicht...

  Alt 5. Dez 2002, 18:54
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6
  Alt 5. Dez 2002, 19:08
Du probierst die, die theorethisch möglich wären. Versuche es mal mit MSOUTLOOK...

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 5. Dez 2002, 19: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 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