Seite 1 von 1

Tasklist := .F.

Verfasst: So, 18. Mär 2007 22:31
von AUGE_OHR
hi,

Ich hab mir eine analog Uhr gebastelt. Da ein "eckiger" XbpDialog
dabei "blöd" aussieht hab ich also einen "runden" XbpDialog daraus
gemacht.

Nun liegt die Uhr auf dem Desktop, aber ich wollte kein Icon in der
Taskbar haben sodas ich Tasklist := .F. gesetzt habe.

leider lässt sich die Uhr jetzt "mehrfach" starten und mein "Check"
funktioniert nicht weil ich in der Tasklist nur das Icon der Uhr sehe
aber es hat ja auch keinen "Title" ...

In der "Prozessliste" finde ich dann "ACLOCK.EXE" ... aber wie frage
ich den die ab ?

gruss by OHR
Jimmy

Verfasst: So, 18. Mär 2007 22:51
von Martin Altmann
Hallo Jimmy,
andere machen das über einen Mutex!
In den Alaska-Newsgroups tauchen immer wieder entsprechende Beispiele auf.
Beim Starten Deines Programmes erzeugst Du einen speziellen Mutex und danach fragst Du einen Fehlercode ab. War alles OK, lief Dein Programm noch nicht.
Beispiel:

Code: Alles auswählen

DLLFUNCTION CreateMutexA( SecAttr, nInitialOwn, cName ) USING STDCALL FROM KERNEL32.DLL
DLLFUNCTION GetLastError() USING STDCALL FROM KERNEL32.DLL
.
.
.
CreateMutexA( 0, 1, "Irgendeine_eineindeutige_beliebige_ID")
If GetLastError() == 183
   MsgBox("Programm läuft bereits","Hinweis")
   QUIT
Endif
Viele Grüße,
Martin

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 14:21
von Manfred
ich bekomme immer 0 zurück.

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 14:36
von Martin Altmann
Dann machst Du halt was verkehrt!

Code: Alles auswählen

#define  MUTEX_ALL_ACCESS    2031617
        LOCAL nH := DllCall( "KERNEL32.DLL", DLL_STDCALL, "OpenMutexA", MUTEX_ALL_ACCESS, 0, "EasyDogW.eXe" )
        IF nH == 0
                nH := DllCall( "KERNEL32.DLL", DLL_STDCALL, "CreateMutexA", 0, 0, "EasyDogW.eXe" )
        ELSE
                ConfirmBox( , "Das Programm wird bereits ausgeführt und kann nicht ein weiteres Mal gestartet werden!", "EASYDOG - Das Rassehundeausstellungsprogramm!", XBPMB_OK, XBPMB_CRITICAL + XBPMB_APPMODAL + XBPMB_MOVEABLE )
                QUIT
        ENDIF
        DllCall( "KERNEL32.DLL", DLL_STDCALL, "ReleaseMutex", nH )
Denke an die supportedOS-Einträge in der .manifest-Datei - aber die hast Du ja sicherlich drin!

Viele Grüße,
Martin

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 14:37
von Manfred
bei dem Code stürzt das Programm direkt ab.

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 14:43
von Martin Altmann
Hast Du denn dll.ch included???

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 14:52
von Manfred
:banghead:

Re: Tasklist := .F.

Verfasst: Mi, 09. Okt 2019 17:47
von ramses
Es gäbe dann noch ot4xb_single_instance() aus ot4xb das funktioniert sehr zuverlässig.