2024/02/03(土) [n年前の日記]
#1 [basic] FreeBASICで多重起動禁止
Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit で、多重起動禁止ができるのかどうか動作確認。
以下が参考になった。
_Mutex instances - freebasic.net
_Mutex Troubles [Solved] - freebasic.net
_Windows上で多重起動を防止する方法
Windowsに特化した方法になってしまうけど、CreateMutex() を使えば多重起動禁止ができるはず。
サンプルソースを書いてみた。
_mutex.bas
fbc mutex.bas で、mutex.exe を生成できる。
実行すると、最初の起動時は以下になる。
1つ目のプログラムがまだ実行されている間に、別のDOS窓で同じプログラムを実行すると、以下の表示になって終了する。
多重起動禁止になっているようだなと…。
以下が参考になった。
_Mutex instances - freebasic.net
_Mutex Troubles [Solved] - freebasic.net
_Windows上で多重起動を防止する方法
Windowsに特化した方法になってしまうけど、CreateMutex() を使えば多重起動禁止ができるはず。
サンプルソースを書いてみた。
_mutex.bas
#include once "windows.bi"
Const mutex_name = "MyProgramName"
Dim As HANDLE hMsp
hMsp = CreateMutex(NULL, TRUE, strptr(mutex_name))
If hMsp <> 0 Then
Dim As DWORD ret = GetLastError()
If ret = ERROR_ALREADY_EXISTS Or ret = ERROR_ACCESS_DENIED Then
' Already
Print "Already running. Exit."
ReleaseMutex(hMsp)
CloseHandle(hMsp)
end
End If
End If
Print "Running ... "
Print "Push Any Key"
sleep
ReleaseMutex(hMsp)
CloseHandle(hMsp)
fbc mutex.bas で、mutex.exe を生成できる。
実行すると、最初の起動時は以下になる。
> mutex.exe Running ... Push Any Key
1つ目のプログラムがまだ実行されている間に、別のDOS窓で同じプログラムを実行すると、以下の表示になって終了する。
> mutex.exe Already running. Exit.
多重起動禁止になっているようだなと…。
[ ツッコむ ]
以上です。