把这个函数丢到任何AHK脚本中,就可以限制单进程运行。
;-----------------------------
; 限制单进程运行 By FeiYue
;
; 用法:把本函数丢到任何脚本中,设定标记即可(修改001)
;-----------------------------
; 例子:同时启动10个本脚本,只会保留1个进程
#SingleInstance Off
MsgBox, 4096,, % A_Now
return
;-- 限制单进程运行 By FeiYue
OnlyOne(flag="") {
static init:=OnlyOne("001")
DetectHiddenWindows, % (bak:=A_DetectHiddenWindows) ? "On":"On"
mypid:=DllCall("GetCurrentProcessId")
flag:="Ahk_OnlyOne_Ahk<<" . flag . ">>"
Gui, Ahk_OnlyOne_Ahk: Show, Hide, %flag%
WinGet, list, List, %flag% ahk_class AutoHotkeyGUI
Loop, % list
IfWinExist, % "ahk_id " . list%A_Index%
{
WinGet, pid, PID
IfEqual, pid, %mypid%, Continue
WinClose, ahk_pid %pid% ahk_class AutoHotkey,, 3
IfWinNotExist,,, Continue
Process, Close, %pid%
WinWaitClose
}
WinGet, list, List, %flag% ahk_class AutoHotkeyGUI
IfNotEqual, list, 1, ExitApp
DetectHiddenWindows, %bak%
}