Seite 1 von 2
programm verbieten sich mermals offen zu haben
Verfasst: 15.12.2005 20:07
von sen-me
wie kann ich verhindern, das mein programm öfter als 1 mal gestartet wiurd?
ich wollte es so haben, das wenn das programm nochmal ausgeführt wird, dass es es nicht nochmal öffnet sondern das programm das schon offen ist makiert wird, also als würde man unten in taskleiste das programm angeklickt haben
Verfasst: 15.12.2005 20:11
von MVXA
Verfasst: 15.12.2005 20:30
von sen-me
thx, aber da wird dann immer das neu geöffnete fenster beibehalten, ich will aber das das fenster, das schon auf ist da bleibt, und da sneue weg geht
Verfasst: 15.12.2005 20:35
von Tafkadasom2k5
Genaue Ahnung habe ich nicht, aber eine Anregung:
Man könnte doch, eine Variable
OneInstant.s
in einen bestimmten Speicherbereich schreiben.
Bei jedem Start deines Programmes wird dieser Speicherbereich nach dieser Variablen über Pointer abgesucht (alternativ auch 3-4 verschiedene, falls der schon "besetzt" ist).
Wenn diese Variable mit dem Inhalt
"Instance already running" gefunden wird, dann öfnnet sich das ganze Fenster garnicht erst.
...Jetzt gebe ich weiter, an die
"Peek()" und "Poke()" Pro's...

(Oder ist mein Lösungsweg nicht möglich?)
Alternativ könntest du auch einen Reg-Eintrag machen, indem steht, das momentan dein Programm läuft...und beim Start deines Programs wird diese Variable gesetzt und beim schliessen gelöscht...
Wäre ne möglichkeit ohne direkt den Arbeitsspeicher anzusprechen...
Gr33tz
Tafkadasom2k5
Verfasst: 15.12.2005 20:39
von edel
[...]
Alternativ könntest du auch einen Reg-Eintrag machen, indem steht, das momentan dein Programm läuft...und beim Start deines Programs wird diese Variable gesetzt und beim schliessen gelöscht...
Wäre ne möglichkeit ohne direkt den Arbeitsspeicher anzusprechen...
... und nach einem Absturz kannste das Programm nie wieder
starten , oder wie ?
Verfasst: 15.12.2005 20:43
von Tafkadasom2k5
hallodri hat geschrieben:
[...]
Alternativ könntest du auch einen Reg-Eintrag machen, indem steht, das momentan dein Programm läuft...und beim Start deines Programs wird diese Variable gesetzt und beim schliessen gelöscht...
Wäre ne möglichkeit ohne direkt den Arbeitsspeicher anzusprechen...
... und nach einem Absturz kannste das Programm nie wieder
starten , oder wie ?

stimmt auch wieder..
Also ne Sicherheit müsste man reinbauen...
OK...
2ter Versuch
Du machst sozusagen 2 Variablen in die Reg...
In der ersten steht "Instance running" und in der zweiten steht "Sucessfully Closed".
Wenn nun "Instance running" gefunden wird, dann prüft er zusätzlich, ob letztesmal das Programm erfolgreich beendet wurde und startet es nach ner Userabfrage doch.
Gr33tz
Tafkadasom2k5
Verfasst: 15.12.2005 20:46
von MVXA
Und wenn man das Programm löscht, bleiben die Überreste dort liegen und
müllen die Registry zu. Danke schön!
Verfasst: 15.12.2005 20:49
von sen-me
also die 1. antwort find ich gut, da müsste man doch irgendwie machne könn das sich da sneue schließt nicht das alte
Verfasst: 15.12.2005 20:55
von MVXA
Code: Alles auswählen
ERROR_ALREADY_EXISTS = 183
Global WM_ACTIVATEOLDINST
WM_ACTIVATEOLDINST = RegisterWindowMessage_("WM_ACTIVATEOLDINST_PB")
MutexName$ = "mylittletestapp"
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If message = WM_ACTIVATEOLDINST
SetForegroundWindow_(WindowID(0))
EndIf
ProcedureReturn Result
EndProcedure
hMutex = CreateMutex_(0, 0, @MutexName$)
If GetLastError_() = ERROR_ALREADY_EXISTS
SendMessage_(#HWND_BROADCAST, WM_ACTIVATEOLDINST, 0, 0)
Delay(100)
End
EndIf
If OpenWindow(0,100,150,450,200,#PB_Window_SystemMenu,"MyLittleTestApp " + Str(Random(500)))
SetWindowCallback(@MyWindowCallback())
Repeat
ev=WaitWindowEvent()
Until ev=#PB_EventCloseWindow
EndIf
CloseHandle_(hMutex)
Das hättest du auch selbst programmieren können.
Verfasst: 15.12.2005 21:00
von AND51
Oder erstell stumpf in C:\ ene Textdatei wo du einfach 1 reinschreibst.
geht dein programm aus, löscht es die Datei oder schreibt 0 rein. Läuft dein Programm und eine zweite Instanz wird gestartet, prüft die einfach ob die Datei existiert oder eine 1 drinsteht und sagt "nene, Du, ich laufe bereits!"
Am besten Die Datei nicht in C:\ sondern im selben Ordner wie das Program speichern.