找回密码
 加入
搜索
查看: 2935|回复: 5

[AU3基础] 关于只运行一个实例的困惑(已解决)

[复制链接]
发表于 2010-5-5 01:44:04 | 显示全部楼层 |阅读模式
本帖最后由 wujianfu 于 2010-5-5 13:17 编辑

有几个问题很困惑,想请教一下大家:
1.$version = "windowprocess"  
  If WinExists($version)  Then Exit
   AutoItWinSetTitle($version)
  问题:这个AutoItWinSetTitle($version)设置的标题与GUI窗体创建时的窗口标题有什么区别?这种方法对于隐藏的程序和有GUI界面的程序都有用吗?如果有其他程序的标题与
  AutoItWinSetTitle ($version)设置的标题相同怎么办?

2.$n=ProcessList ( "Test.exe" )
   If $n[0][0]>1 Then Exit
   问题:如果将同一程序复制几份,并改为不同文件名再运行的话,进程名不一样了,这种方法岂不是失效了?

3.#Include <Misc.au3>
   _Singleton($sOccurenceName [, $iFlag = 0])
  这个$sOccurenceName是什么啊?要换成什么才能判断啊?我试了几个字符串似乎都可以,如"test","love"等。

4.有没有其他更好的方法使程序只运行一个实例?能保证100%判断正确?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-5-5 04:40:21 | 显示全部楼层
本帖最后由 lainline 于 2010-5-5 10:52 编辑

AutoIt 窗口总是处于隐藏状态的.修改其标题的目的是为了让其它程序(或者其它 AutoIt 脚本程序)能与 AutoIt 交互.

标题设定长些就不会有冲突了
这个是隐藏窗体的标题和进程名


再看看代码_Singleton 利用了    CreateMutex 函数
发表于 2010-5-5 04:43:42 | 显示全部楼层
可以使用自身效验码作为标题
这样程序版本有变化也不会冲突
发表于 2010-5-5 06:52:17 | 显示全部楼层
以上3种方法,没有哪一种是安全的。前两种方法,如楼主所说,改窗口标题或者重命名文件之后,就会出现问题了。对于_Singleton函数,一遇到DuplicateHandle就完了。
绝对正确?自己想个函数吧,只自己知道原理就行。
 楼主| 发表于 2010-5-5 13:16:08 | 显示全部楼层
非常感谢各位,个人觉得使用AutoItWinSetTitle($version)将程序的MD5值作为标题
进行比较判断似乎是最好的。
发表于 2010-5-5 13:25:54 | 显示全部楼层
要看具体应用了
如果运行一个实例是软件正常运行的必要条件,那么就算将程序的MD5值作为标题也可能出错,因为程序就算细微的修改(加个空行之类的),MD5值都会不同,而程序功能却是一样的,那就等于是运行多个实例了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-19 01:13 , Processed in 0.078035 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表