Wie unterbinde ich den Mehrfachstart eines Programs?
-
Hi,
Ich habe ein Programm erstellt, welches nur einmal gestartet werden darf und (sofern jemand versucht dies nochmal zu starten) sich nicht nochmal starten lassen soll, solange das Program läuft.
Jedoch finde ich nun überhaupt nichts darüber.
Es existieren zwar einige Beispiele, wie man das in Delphi macht, doch da C++ (Builder) nicht Delphi ist, ist es echt nicht einfach, dies auch in C++ umzusetzen.
-
... indem du die suchfunktion des forums benutzt. alle fragen beantwortet?
hättest du da nicht auch selbst drauf kommen können?
Ratgeber
-
Hallo raptorxp,
versuch es mal in diesem Beitrag
http://www.c-plusplus.net/forum/viewtopic.php?t=81929&highlight=mutexViel Erfolg
Evi48
-
Da ich leider kein "professioneller" Programmierer bin sondern nur ein einfacher Mensch, der mal was zusammenschustern will, würde mir da noch fehlen, was man wo eintragen muss und was ich einzubinden habe.
Ich versuch mal, ob ich damit weiter komme, garantiere aber für nichts
-
Jetzt wieder was:
Wenn ich z.B. den Code (angepasst an mein Programm) verwende, kommt folgendes als Fehlermeldung raus:
[C++ Fehler] Casecalculator.cpp(70): E2316 '_fastcall TCasecalculatorv1::ApplicationEvents1Minimize(TObject *)' ist kein Element von 'TCasecalculatorv1'.
[C++ Fehler] Casecalculator.cpp(77): E2316 '_fastcall TCasecalculatorv1::ApplicationEvents1Restore(TObject *)' ist kein Element von 'TCasecalculatorv1'.WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { HANDLE hInstanceMutex = ::CreateMutex(NULL, TRUE, "Casecalculatorv1.MUTEX"); if (GetLastError() == ERROR_ALREADY_EXISTS) { if (hInstanceMutex) CloseHandle(hInstanceMutex); Application->Title = ""; HWND hPrevApp = ::FindWindow(NULL, "Casecalculatorv1"); if (hPrevApp) { PostMessage(hPrevApp, WM_SYSCOMMAND, SC_RESTORE, 0); // Falls minimiert SetForegroundWindow(hPrevApp); // kein schöner Stil, aber bringt das Fenster in den Vordergrund... } return 0; } try { Application->Initialize(); Application->Title = "Casecalculator v1"; Application->CreateForm(__classid(TCasecalculatorv1), &Casecalculatorv1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } ReleaseMutex(hInstanceMutex); CloseHandle(hInstanceMutex); return 0; } //--------------------------------------------------------------------------- void __fastcall TCasecalculatorv1::ApplicationEvents1Minimize(TObject *Sender) { ShowWindow(Application->Handle, SW_HIDE); TrayIcon1->Visible = true; } //--------------------------------------------------------------------------- void __fastcall TCasecalculatorv1::ApplicationEvents1Restore(TObject *Sender) { TrayIcon1->Visible = false; ShowWindow(Application->Handle, SW_SHOW); }Meine Frage wäre noch: Was muss ich noch dem Programm hinzufügen?
-
Hast Du die beiden:
void __fastcall ApplicationEvents1Minimize(TObject *Sender) ;
void __fastcall ApplicationEvents1Restore(TObject *Sender);in der Headerdatei des Formulars stehen?
Wenn ja, wo???
-
Altenburgers Frage ist schon berechtigt.
Macht mal die Augen auf, und denkt mal