设置互斥体,阻止脚本重复运行

/*函数名: 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
}

主要代码从官网搜罗来的,包装了一下,写了个介绍

给TA捐赠
共{{data.count}}人
人已捐赠
AHKV1其他

AutoHotkey右键菜单汉化/一键更新最新版本

2022-12-12 11:12:13

AHKV1案例

打开最新文件所在的文件夹

2022-12-13 8:55:13

10 条回复 A文章作者 M管理员
  1. Krystal

    感谢学习了

  2. aahk

    @星雨朝霞 非常感谢您的分享,这个功能我找了很久了,以前的代码都不太完美,今天终于找到了比较好的防止重复运行脚本的源代码了,已经把此代码收藏到我的源代码文件夹中了。 有时候有了代码却没有实例依然不会使用,无法运行,所以我认为收集、分类、整理、收纳完整的源代码压缩包是比较重要的。 例如:我有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

    • aahk

      Embarcadero.Delphi.11.2.v28.0.46141.0937.Lite.v17.2

    • aahk

      AutoHotkey脚本已经非常完美了,美中不足的是编译后的exe文件会被一部分杀毒软件误判误杀,Delphi好像就没有这个问题,虽然不是什么严重的问题,但是,在与他人分享脚本时总是感觉不太舒服,有时候会被误认为是放毒,不知道有没有什么好的解决方法。

    • aahk

      用Delphi或者C++实现AutoHotkey的功能比较麻烦。

    • 星雨朝霞

      AutoHotkey是用C++写的,而且是开源的,你可以上官网下载源码查看.

    • aahk

      已经查看过AutoHotkey的源代码了,但是,没有用,还是会在某些杀毒软件下报毒,依然会被误会放毒

    • aahk

      有可能是脚本的行为本身比较危险或者激进,所以一直会被杀毒软件特别关注

  3. 11010010
    11010010给您捐赠了¥1
  4. 11010010

    感谢分享

个人中心
今日签到
有新私信 私信列表
搜索