/*函数名: Single
设置互斥体,阻止脚本重复运行
功能与#SingleInstance差不多,只是这玩样可以自定义
另:
经测试发现#SingleInstance只识别脚本文件名,改名可重复运行,
在有热键的脚本里要使用 #SingleInstance,off 关闭此功能.
参数:
给这个脚本设置一个独一无二的识别字符串(指纹?)
返回值: 1 为重复,0为第一次
例子:
Single("7EF47F0D-4D37-542E-5787-90FDD196D04B")
Single("123")
*/
Single(flag) { ;,返回1为重复,返回0为第一个运行
DllCall("CreateMutex", "Ptr",0, "int",0, "str", "Ahk_Single_" flag)
return A_LastError=0xB7 ? true : false
}
;=========================
;使用案例,脚本改名都没用,照样只能运行一个.
#SingleInstance,Off ;关闭自带互斥功能
if (Single("456")) { ;独一无二的字符串用于识别脚本,或者称为指纹?
MsgBox,16,提示,程序已启动!`n请勿重复运行
ExitApp
}
主要代码从官网搜罗来的,包装了一下,写了个介绍
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
感谢分享
@星雨朝霞 非常感谢您的分享,这个功能我找了很久了,以前的代码都不太完美,今天终于找到了比较好的防止重复运行脚本的源代码了,已经把此代码收藏到我的源代码文件夹中了。 有时候有了代码却没有实例依然不会使用,无法运行,所以我认为收集、分类、整理、收纳完整的源代码压缩包是比较重要的。 例如:我有HidiSQL的源代码,但是就是无法在中编译成功,就是无法用Delphi连接Synology群晖NAS网络附属存储服务器中的 MariaDB 数据库中的表。(可能是插件、控件、运行库、环境安装设置有错误) 下面的代码也是用于阻止脚本重复运行的,但是明显没有本文中的脚本好 loop,5 { DetectHiddenWindows,On Sleep,5 IfWinExist,QQ595076941_FastCopy-ver4-2-0 ExitApp } Gui, Show, Hide,QQ595076941_FastCopy-ver4-2-0
Embarcadero.Delphi.11.2.v28.0.46141.0937.Lite.v17.2
AutoHotkey脚本已经非常完美了,美中不足的是编译后的exe文件会被一部分杀毒软件误判误杀,Delphi好像就没有这个问题,虽然不是什么严重的问题,但是,在与他人分享脚本时总是感觉不太舒服,有时候会被误认为是放毒,不知道有没有什么好的解决方法。
用Delphi或者C++实现AutoHotkey的功能比较麻烦。
AutoHotkey是用C++写的,而且是开源的,你可以上官网下载源码查看.
已经查看过AutoHotkey的源代码了,但是,没有用,还是会在某些杀毒软件下报毒,依然会被误会放毒
有可能是脚本的行为本身比较危险或者激进,所以一直会被杀毒软件特别关注
感谢学习了