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.
多重起動禁止になっているようだなと…。
[ ツッコむ ]
以上です。