programm verbieten sich mermals offen zu haben
programm verbieten sich mermals offen zu haben
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
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
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
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
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...

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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
... und nach einem Absturz kannste das Programm nie wieder[...]
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...
starten , oder wie ?
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
hallodri hat geschrieben:... und nach einem Absturz kannste das Programm nie wieder[...]
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...
starten , oder wie ?


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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
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)
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.
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.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End