版本一:

Plain text
复制到剪贴板
Open code in new window
EnlighterJS 3 Syntax Highlighter
/* 函数名: 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
}

 

版本二:

Plain text
复制到剪贴板
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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%>>
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。