关于只运行一个实例的困惑(已解决)
本帖最后由 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>1 Then Exit
问题:如果将同一程序复制几份,并改为不同文件名再运行的话,进程名不一样了,这种方法岂不是失效了?
3.#Include <Misc.au3>
_Singleton($sOccurenceName [, $iFlag = 0])
这个$sOccurenceName是什么啊?要换成什么才能判断啊?我试了几个字符串似乎都可以,如"test","love"等。
4.有没有其他更好的方法使程序只运行一个实例?能保证100%判断正确? 本帖最后由 lainline 于 2010-5-5 10:52 编辑
AutoIt 窗口总是处于隐藏状态的.修改其标题的目的是为了让其它程序(或者其它 AutoIt 脚本程序)能与 AutoIt 交互.
标题设定长些就不会有冲突了
这个是隐藏窗体的标题和进程名
:face (32):
再看看代码_Singleton 利用了 CreateMutex 函数 可以使用自身效验码作为标题
这样程序版本有变化也不会冲突 以上3种方法,没有哪一种是安全的。前两种方法,如楼主所说,改窗口标题或者重命名文件之后,就会出现问题了。对于_Singleton函数,一遇到DuplicateHandle就完了。
绝对正确?自己想个函数吧,只自己知道原理就行。 非常感谢各位,个人觉得使用AutoItWinSetTitle($version)将程序的MD5值作为标题
进行比较判断似乎是最好的。 要看具体应用了
如果运行一个实例是软件正常运行的必要条件,那么就算将程序的MD5值作为标题也可能出错,因为程序就算细微的修改(加个空行之类的),MD5值都会不同,而程序功能却是一样的,那就等于是运行多个实例了。
页:
[1]