| |
|
|
Michael Wodrich | Ich finde den Snippet einfach nicht mehr.
Wie verhindere ich, daß mein Programm mehrfach im Speicher steht. Mit FindWindow und hWnd-Vergleich klappt es bei mir nicht.
Nach erfolgreichem Test soll die laufende Instanz aktiviert werden.
Wieso ist zu diesem Thema eigentlich in beiden Foren nichts zu finden? |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 07.09.2006 ▲ |
|
|
|
|
Michael Wodrich | Aha, halbe Stunde für Flüchtigkeitsfehler verbraten...
siehe Code-Snippets
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 07.09.2006 ▲ |
|
|
|
|
| Äh, haste den nun was gefunden? Dafür nimmt man meist Mutex oder Semaphore. FindWindow ist zu unzuverlässig, weil es könnte das falsche Fenster gefunden werden |
|
|
| |
|
|
|
Michael Wodrich | Siehste und unter Mutex hab ich auch noch nicht in den Foren gesucht. Danke, da werde ich bestimmt fündig.
Ich wollte einfach nur das ODoku.exe Fenster auf eine Instanz beschränken. Da der Titel sehr lang ist, wird es dafür wohl ausreichen...
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 07.09.2006 ▲ |
|
|
|
|
| |
|
| |
|
|
|
| Hallo Michael Hier ein Code von Thomas Hölzer KompilierenMarkierenSeparierenPRFellow- Vorlage
Autor: Thomas Hölzer
Die Prozedur OnlyOne sorgt dafür, daß nur eine Instanz eines
Profan²- 32 Bit(!)-Programms aufgerufen werden kann.
Sie muß als erste beim Programmstart abgearbeitet werden
Am Programmende muß CloseHandle aufgerufen werden!
declare programm$, version$
programm$="ADRESSOR "
version$="1.5.0"
Globale Deklarationen
Def CreateMutex(3) !"KERNEL32","CreateMutexA"
Def GetLastError(0) !"KERNEL32","GetLastError"
Def CloseHandle(1) !"KERNEL32","CloseHandle"
Declare MutexName#,Mutex&
Proc OnlyOne
Declare error&,name$
Let name$=programm$ Ein beliebiger,unverwechselbarer Name
Dim MutexName#,Add(Len(name$),1)
String MutexName#,0=name$
Let Mutex&=CreateMutex(0,1,Mutexname#)
Let error&=GetLastError()
Dispose MutexName#
If And(Neq(Mutex&,0),Equ(error&,0))
MessageBox("Dies ist die erste Programminstanz
Lassen Sie zum Testen diese
Messagebox stehen und starten Sie das Programm noch einmal!","Mutex-Test",64)
Else
MessageBox("Das Programm ist schon aktiv ",programm$+version$,16)
CloseHandle(Mutex&)
End
EndIf
EndProc
Beispiel
OnlyOne
Die nächste Anweisung immer ans reguläre Progammende!!!
case mutex&: CloseHandle(Mutex&) PRFellow- Vorlage
Autor: Thomas Hölzer
Hast Du das gesucht ? |
|
|
| |
|
|
|
| [quote:1f0db0e676]Warum editierst Du dann Deinen Beitrag nicht? gruebel[/quote:1f0db0e676] Hallo iF Die Frage war berechtigt und ich habe jetzt erst kapiert, dass mir das Editieren meiner Beiträge möglich ist. Kannst Du mir noch mal verzeihen Hoffe dass jetzt alles stimmt |
|
|
| |
|
|
|
| [quote:0224cc50ff=Horst Horn]Hallo Der Code ist aus Versehen doppelt kopiert worden - Sorry [/quote:0224cc50ff] Warum editierst Du dann Deinen Beitrag nicht? |
|
|
| |
|
|