Ermitteln ob EXE aktiv ist
-
Aber da wird erklärt wie man verhindert das ein Programm 2x geöffnet wird.
Aber ich will eigentlich wissen wie man "ermittelt ob eine EXE Datei geöffnet ist".
-
Aber da wird erklärt wie man verhindert das ein Programm 2x geöffnet wird.
Damit wird auch doch irgendwie geklärt, ob ein Programm schon läuft. Ob du dann nun einen weiteren Start verhinderst oder sonstewas machst......
-
Achso ja Sorry hab ein Problem mit logischem Denken hehe
Danke
-
OK jetzt läuft es soweit...
Allerdings ein Problem.Programm1 (Ausgeführtes)
Programm2 (Überprüfendes)1. Erst mache ich Programm1 an, dann Programm2. Programm2 meldet das Programm1 bereits läuft. OK soweit. Wenn ich jetzt Programm1 schließe und Programm2 nochmal überprüfen lasse, wird immer noch gemeldet das Programm1 läuft.
2. Erst starte ich Programm2 und lasse überprüfen, keine Fehlermeldung. Dann starte ich Programm1 und lasse wieder überprüfen, das Programm meldet dass Programm1 läuft. Wenn ich Programm1 schließe wieder der selbe Fehler von Punkt1.
Programm1:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HANDLE hMutex=OpenMutex(MUTEX_ALL_ACCESS,0,"MeinProgramm"); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { ReleaseMutex(hMutex); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { if(!hMutex) { hMutex=CreateMutex(0,0,"MeinProgramm"); } else { ShowMessage("Das Programm läuft bereits"); } } //---------------------------------------------------------------------------Programm2:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE hMutex=OpenMutex(MUTEX_ALL_ACCESS,0,"MeinProgramm"); if(!hMutex) { ReleaseMutex(hMutex); } else { ShowMessage("Das Programm läuft bereits"); ReleaseMutex(hMutex); } } //---------------------------------------------------------------------------
-
Hallo
ich kann deinen Quellcode jetzt nicht testen, weil ich keinen Builder habe.
Aber CreateMutex und ReleaseMutex sollten besser in dem Konstruktor bzw. dem Destruktor des Forms stehen, und HANDLE hMutex sollte ein Member des Forms sein (also im Header des Forms nach private deklarieren).bis bald
akari
-
Danke akari, kannst du (oder jemand anderes) mir noch sagen was Konstruktor und Destruktor bedeutet? Oder wo ich das finde?
-
Konstuktor:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------besser ist aber das TForm Event OnCreat.
Destruktor:
ist ist das TForm Event OnDestroy
kannst du im Objektinspektor für TForm doppelt klicken.
Ok stimmt nicht ganz da der Destruktor danach kommt.
Den Destruktor würde ich nicht überschreiben!
-
Hallo
besser ist aber das TForm Event OnCreat.
Falsch. Genausowenig wie OnDestroy besser als der Destruktor sein soll. Das gegenteil ist der Fall, die Begründung hatten wir schon ein paar mal in verschiedenen Threads dieses Forums.
Danke akari, kannst du (oder jemand anderes) mir noch sagen was Konstruktor und Destruktor bedeutet? Oder wo ich das finde?
Lies gleich ein ganzes Tutorial zum Thema OOP, denn du wirst es noch brauchen.
bis bald
akari
-
Hi,
http://www.c-plusplus.net/forum/viewtopic-var-t-is-160149-and-highlight-is-%2Aoncreat%2A.html
Link von Braustein führt zu einem englischen Forum.
Die Aussage dort ist mir neu:Ok, so let's summarize the most important reason why OnCreate is
dangerous: because it could execute before your constructor executes
and before any member objects have been initialized. In C++, it is
generally mandated that a base class constructor should not be able to
call the member functions of a derived class. OnCreate violates
this. OnDestroy does too, but during destruction.Meine Frage ist jetzt, wie ich den Destruktor der Form einbaue?
etwa so:Beispiel:
unit1.h
private: __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner); ~Form1(); TGraphics::TBitmap *hallo;unit.cpp
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { hallo=new TGraphics::TBitmap(); } //--------------------------------------------------------------------------- ~Form1() { delete hallo; }wäre das so richtig?
-
Bitte die Faustregel beachten: ein Thema ein Thread, ein Thread ein Thema. Danke!
-
Geht sowas auch indem man prüft, ob z.B. ABC.EXE in den ausgeführten Prozessen steht? Wenn ja, wie prüft man dies?
-
Hallo
dlonra schrieb:
Meine Frage ist jetzt, wie ich den Destruktor der Form einbaue?
etwa so:ja, Syntax und Anwendung von Destruktor und Konstruktor sind in Ordnung.
Wenn du aber schon mal dabei bist, dann mach es gleich richtig und benutzt die Initialisierungsliste__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), hallo(new TGraphics::TBitmap()) { }Aber nun back to Topic.
Feyo-Su schrieb:
Geht sowas auch indem man prüft, ob z.B. ABC.EXE in den ausgeführten Prozessen steht? Wenn ja, wie prüft man dies?
Ja das geht auch, mit der WinAPI-Funktion FindWindow.
Allerdings ist das etwas unsauberer, mit den Mutexten geht das sicherer.bis bald
akari
-
Habe mal über Google bisschen gesucht, nachdem ich in der BCB Hilfe nichts gefunden hatte. Aber ich finde keine Seite wo steht wie man FindWindow benutzt. Hat vielleicht jemand gerade einen Link dazu, oder kanns selber erklären? Danke scho'ma
-
Hi,
hier hab ich ein Beispiel für FindWindow gefunden. So wie es aussieht muss dieser Code in die Projekt.cpp rein.
http://www.bcb-box.de/Informationen/Laeuftschon/laeuftschon.html

auch interessante Schnippsel
http://www.bcb-box.de/Informationen/informationen.html
Grüsse
-
Vielen Dank, funktioniert.
Muss nicht zwingend in die Projekt.cpp.