AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prüfen, ob eine Anwendung läuft
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob eine Anwendung läuft

Ein Thema von emsländer · begonnen am 28. Jan 2005 · letzter Beitrag vom 28. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 11:37
Moin,

ich habe aus der Codelibrary folgende Funktion eingesetz: http://www.delphipraxis.net/internal...ct.php?t=30942

Allerdings ein wenig verändert, damit es an meine Applikation passt:

Delphi-Quellcode:
function TFrm_login.GetProcessID(Exename: string): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;

function TFrm_login.GetProcessHandleFromID(ID: DWORD): THandle;
begin
  result := OpenProcess(SYNCHRONIZE, False, ID);
  CloseHandle(result);
end;

function TFrm_login.laufzeitcheck : boolean;
var
  hProcess: THandle;
  wf: DWORD;
begin
  result := true;
  hProcess := GetProcessHandleFromID(GetProcessID('Anwendung.exe'));
  if hProcess = 0 then result := false; // läuft nicht
end;
mein Aufruf ist folgendermaassen:

if not laufzeitcheck then begin
start applikation
...
...
...
...
end
else begin
showmessage('Applikation läuft bereits');
end;


Allerdings wird in jedem fall in die Variable hProcess <> 0.
Somit kann die Applikation nie gestartet werden.


Wer hat eine Idee?

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 11:44
Ist logisch, da dein Programm ja schon im Speicher ist, wenn geprüft wird ob dein Programm geladen wird...
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 11:57
Alternativ kannst du auch im OnCreate Ereignis über FindWindow gehen. Da im OnCreate das eigene Fensterhandle noch nicht erzeugt ist, wirst du deine eigene Anwendung somit auch nicht finden, sondern nur eine eventuell laufende.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 20:50
Zitat von Jelly:
Alternativ kannst du auch im OnCreate Ereignis über FindWindow gehen. Da im OnCreate das eigene Fensterhandle noch nicht erzeugt ist, wirst du deine eigene Anwendung somit auch nicht finden, sondern nur eine eventuell laufende.
Hast Du da bitte mal ein Beispiel?

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:21
Du könntest auch ein Semaphore benutzten. Für Details bin ich zu müde. Aber die Delphi-Praxis-Suche sollte trotzdem ausreichen.


Gruß DelphiFreund
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:27
Meine Idee schlug fehl... Über FindWindow ist die eigene Anwendung bereits findbar. Ne andere Möglichkeit fällt mir aber im Moment auch nicht ein?
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:36
Dann bin ich dran:

Delphi-Quellcode:
const
  MyGUID = 'hex-Zahl';
var
  Semaphore: THandle;

begin
  ActivationMessage := RegisterWindowMessage(PChar(MyGUID));

  Semaphore := CreateSemaphore(nil, 1, 1, PChar(MyGUID));

  if (GetLastError = ERROR_ALREADY_EXISTS) then
  begin
    ShowMessage('Das Programm läuft schon');
    Exit;
  end;
end;
Die MyGuid sollte eine GUID sein, muss es gaub ich aber nicht


Gruß und gute Nacht DelphiFreund
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:38
Hallo,
das Beispiel von DelphiFreund ist schon ganz gut. Du musst es direkt im Projektquelltext vor dem ersten Application.CreateForm einbauen.

P.S. am Ende der Anwendung CloseHandle(Semaphore); nicht vergessen. Ist zwar nicht nötig, da Windows alle Objekthandles selber schliesst wenn der primäre Thread terminiert. Wenn alle Objekthandles geschlossen sind entfernt Windows automatisch das Semaphore-Objekt. Sieht aber besser aus.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
DelphiFreund

Registriert seit: 29. Jul 2004
Ort: München
127 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:42
Sorry, das hab ich vergessen zu erwähnen. Danke für den Hinweis.
Sandro
Irren ist menschlich...
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: Prüfen, ob eine Anwendung läuft

  Alt 28. Jan 2005, 21:48
Zitat von Jens Schumann:
Hallo,
das Beispiel von DelphiFreund ist schon ganz gut. Du musst es direkt im Projektquelltext vor dem ersten Application.CreateForm einbauen.

P.S. am Ende der Anwendung CloseHandle(Semaphore); nicht vergessen. Ist zwar nicht nötig, da Windows alle Objekthandles selber schliesst wenn der primäre Thread terminiert. Wenn alle Objekthandles geschlossen sind entfernt Windows automatisch das Semaphore-Objekt. Sieht aber besser aus.
Erst einmal danke. Jetzt meckert mir der Compiler den hier an:

ActivationMessage := RegisterWindowMessage(PChar(MyGUID));

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:34 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