programm verbieten sich mermals offen zu haben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

programm verbieten sich mermals offen zu haben

Beitrag 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
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Bild
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
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!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 ?
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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 ?
:bluescreen:

:iamwithstupid: stimmt auch wieder..
Also ne Sicherheit müsste man reinbauen...
OK...
2ter Versuch :mrgreen:

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!
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Und wenn man das Programm löscht, bleiben die Überreste dort liegen und
müllen die Registry zu. Danke schön!
Bild
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten