Hier ist mein Code:
Code: Alles auswählen
handle=FindWindow_(0,"Programmtitel")
If IsWindow_(handle)=1
End
EndIf
Code: Alles auswählen
handle=FindWindow_(0,"Programmtitel")
If IsWindow_(handle)=1
End
EndIf
Code: Alles auswählen
If AppRunning("{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}")
MessageRequester(" EasySetup", "An other copy of EasySetup is running.", #MB_OK|#MB_ICONERROR)
End
EndIf
Mutex.l = CreateMutex_(0,0, "{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}")
.....
CloseHandle_(Mutex)
Die Lib AppRunning ist unnötig wenn Du es so machst:Thorsten1867 hat geschrieben:Benutze einen MutexString. Hier ein Beispiel aus meinem Programm. Du solltest aber einen eigenen String verwenden (am besten eine GUID):PS: AppRunning() ist eine Library aus PBOSLCode: Alles auswählen
If AppRunning("{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}") MessageRequester(" EasySetup", "An other copy of EasySetup is running.", #MB_OK|#MB_ICONERROR) End EndIf Mutex.l = CreateMutex_(0,0, "{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}") ..... CloseHandle_(Mutex)
Code: Alles auswählen
Mutex.l = CreateMutex_(0,0, "{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}")
If GetLastError_() = #ERROR_ALREADY_EXISTS
MessageRequester(" EasySetup", "An other copy of EasySetup is running.", #MB_OK|#MB_ICONERROR)
ReleaseMutex_(Mutex)
CloseHandle_(Mutex)
End
EndIf
; ....
; ....
CloseHandle_(Mutex)
Code: Alles auswählen
MutexID=CreateMutex_(0,1,"My Program")
MutexError=GetLastError_()
If MutexID=0 Or MutexError<>0
ReleaseMutex_(MutexID)
CloseHandle_(MutexID)
End
EndIf
If OpenWindow(0,300,300,200,100,"My Program")
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
EndIf
;- Mutex Close
CloseHandle_(MutexID)
End
aus den postings der kollegen kannst du ersehen, warum es so aufwendig sein muss.RSBasic hat geschrieben:Dabei fiel mir auf, dass die so aufwendig sind.
Ich habe für normale User einen Beispiel geschrieben, was sehr einfach zu verstehen ist.
Danke! Soetwas habe ich schon fast vermutet.ts-soft hat geschrieben:Die Lib AppRunning ist unnötig wenn Du es so machst:GrußCode: Alles auswählen
Mutex.l = CreateMutex_(0,0, "{7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA}") If GetLastError_() = #ERROR_ALREADY_EXISTS MessageRequester(" EasySetup", "An other copy of EasySetup is running.", #MB_OK|#MB_ICONERROR) ReleaseMutex_(Mutex) CloseHandle_(Mutex) End EndIf ; .... CloseHandle_(Mutex)
Thomas
Schau hierJilocasin hat geschrieben:Darf ich mal ganz bescheiden fragen woher diese lustigen Ziffernkombinationen wie hier 7CH2DA07-6695-4FFE-A2A6-5F7055F1A8FA kommen?![]()
Ist das einfach was zum ausdenken oder hat das nen speziellen Zusammenhang?
Code: Alles auswählen
Structure PROCESSENTRY33
dwSize.l
cntUsage.l
th32ProcessID.l
th32DefaultHeapID.l
th32ModuleID.l
cntThreads.l
th32ParentProcessID.l
pcPriClassBase.l
dwFlags.l
szExeFile.b[#MAX_PATH]
EndStructure
Procedure SearchProcess(Name.s)
result.b = #False
If OpenLibrary(0, "Kernel32.dll")
CreateToolhelpSnapshot = GetFunction(0, "CreateToolhelp32Snapshot")
ProcessFirst = GetFunction(0, "Process32First")
ProcessNext = GetFunction(0, "Process32Next")
If CreateToolhelpSnapshot And ProcessFirst And ProcessNext
Process.PROCESSENTRY33\dwSize = SizeOf(PROCESSENTRY33)
Snapshot = CallFunctionFast(CreateToolhelpSnapshot, $2, 0)
If Snapshot
ProcessFound = CallFunctionFast(ProcessFirst, Snapshot, Process)
While ProcessFound
PN$ = UCase(PeekS(@Process\szExeFile))
If UCase(Name) = GetFilePart(PN$) : result = #True : EndIf
ProcessFound = CallFunctionFast(ProcessNext, Snapshot, Process)
Wend
EndIf
CloseHandle_(Snapshot)
EndIf
CloseLibrary(0)
EndIf
ProcedureReturn result
EndProcedure
If SearchProcess("EasySetup.exe")
Debug "Programm läuft"
Else
Debug "Nicht gefunden"
EndIf