版本一:
/* 函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0 为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance Off ; 关闭自带互斥功能
if (Single("456")) { ; 独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
MsgBox 运行中
Return
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr", 0, "int", 0, "str", "Single_" flag)
return A_LastError=0xB7 ? true : false
}
/* 函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0 为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance Off ; 关闭自带互斥功能
if (Single("456")) { ; 独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
MsgBox 运行中
Return
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr", 0, "int", 0, "str", "Single_" flag)
return A_LastError=0xB7 ? true : false
}
/* 函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0 为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance Off ; 关闭自带互斥功能
if (Single("456")) { ; 独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
MsgBox 运行中
Return
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr", 0, "int", 0, "str", "Single_" flag)
return A_LastError=0xB7 ? true : false
}
版本二:
#Persistent
#SingleInstance off
ListLines
F24::Return
;-- 限制单进程运行函数,放在脚本任意位置即可
OnlyOne(flag="") {
local
static init:=OnlyOne(A_ScriptName)
hash:=0
Loop, Parse, flag
hash:=(hash*31+Ord(A_LoopField))&0xFFFFFFFF
MutexName:="Ahk_OnlyOne_" . hash
While (Mutex:=DllCall("OpenMutex","uint",0x100000,"int",0,"str",MutexName))
{
DllCall("CloseHandle", "ptr",Mutex)
DetectHiddenWindows, % (dhw:=A_DetectHiddenWindows) ? "On":"On"
WinGet, list, List, <<%flag%>> ahk_class AutoHotkeyGUI
Loop, % list
{
WinGet, pid, PID, % "ahk_id " . list%A_Index%
WinClose, ahk_pid %pid% ahk_class AutoHotkey,, 3
IfWinExist, ahk_pid %pid%,, Process, Close, %pid%
}
DetectHiddenWindows, %dhw%
}
DllCall("CreateMutex", "ptr",0, "int",0, "str",MutexName)
IfEqual, A_LastError, 0xB7, ExitApp
Gui, __OnlyOne__: Show, Hide, <<%flag%>>
}
#Persistent
#SingleInstance off
ListLines
F24::Return
;-- 限制单进程运行函数,放在脚本任意位置即可
OnlyOne(flag="") {
local
static init:=OnlyOne(A_ScriptName)
hash:=0
Loop, Parse, flag
hash:=(hash*31+Ord(A_LoopField))&0xFFFFFFFF
MutexName:="Ahk_OnlyOne_" . hash
While (Mutex:=DllCall("OpenMutex","uint",0x100000,"int",0,"str",MutexName))
{
DllCall("CloseHandle", "ptr",Mutex)
DetectHiddenWindows, % (dhw:=A_DetectHiddenWindows) ? "On":"On"
WinGet, list, List, <<%flag%>> ahk_class AutoHotkeyGUI
Loop, % list
{
WinGet, pid, PID, % "ahk_id " . list%A_Index%
WinClose, ahk_pid %pid% ahk_class AutoHotkey,, 3
IfWinExist, ahk_pid %pid%,, Process, Close, %pid%
}
DetectHiddenWindows, %dhw%
}
DllCall("CreateMutex", "ptr",0, "int",0, "str",MutexName)
IfEqual, A_LastError, 0xB7, ExitApp
Gui, __OnlyOne__: Show, Hide, <<%flag%>>
}
#Persistent
#SingleInstance off
ListLines
F24::Return
;-- 限制单进程运行函数,放在脚本任意位置即可
OnlyOne(flag="") {
local
static init:=OnlyOne(A_ScriptName)
hash:=0
Loop, Parse, flag
hash:=(hash*31+Ord(A_LoopField))&0xFFFFFFFF
MutexName:="Ahk_OnlyOne_" . hash
While (Mutex:=DllCall("OpenMutex","uint",0x100000,"int",0,"str",MutexName))
{
DllCall("CloseHandle", "ptr",Mutex)
DetectHiddenWindows, % (dhw:=A_DetectHiddenWindows) ? "On":"On"
WinGet, list, List, <<%flag%>> ahk_class AutoHotkeyGUI
Loop, % list
{
WinGet, pid, PID, % "ahk_id " . list%A_Index%
WinClose, ahk_pid %pid% ahk_class AutoHotkey,, 3
IfWinExist, ahk_pid %pid%,, Process, Close, %pid%
}
DetectHiddenWindows, %dhw%
}
DllCall("CreateMutex", "ptr",0, "int",0, "str",MutexName)
IfEqual, A_LastError, 0xB7, ExitApp
Gui, __OnlyOne__: Show, Hide, <<%flag%>>
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)