如何让2个AU3互相监控,
本帖最后由 lin0308 于 2010-1-10 00:36 编辑比如2个au3 ,1和2,当1被任务管理器结束时,2发现后启动1,当2被结束时,1发现后启动2,间隔1到2秒。
不管结束几次都如上,直到程序的正常结束才全部退出
谢谢各位高手我去好好研究 本帖最后由 jycel 于 2010-1-9 22:19 编辑
用AdlibRegister调用检测进程是否存在,不存在就启动!二个程序互相监视很简单啊! 1:
While 1
If Not ProcessExists("2.exe") Then Run("2.exe")
WEnd
2:
While 1
If Not ProcessExists("1.exe") Then Run("1.exe")
WEnd 呵呵,很简单的进程保护~ 本帖最后由 afan 于 2010-1-10 00:18 编辑
“主程序.exe” 代码如下,编译成exe文件:If Not ProcessExists('监视.exe') Then Run('监视.exe')
GUICreate("主程序窗口", 300, 500)
GUISetState()
Do
If Not ProcessExists('监视.exe') Then Run('监视.exe')
Sleep(10)
Until GUIGetMsg() = -3
ProcessClose('监视.exe')“监视.exe” 代码如下,同样编译成exe文件:#NoTrayIcon
While 1
If Not ProcessExists('主程序.exe') Then Run('主程序.exe')
Sleep(100)
WEnd测试时启动主程序即可,监视.exe 不要管。
窗口正常关闭则两个都退出,强行终止任何一个都会启动另一个。
作为延伸,还可以将监视文件FileInstall进编译,然后随机命名调用参数运行,监视文件也需有指定的参数才运行,等等。 本帖最后由 jycel 于 2010-1-9 23:11 编辑
个人觉得还是AdlibRegister调用检测好点,用while wend死循环
而且最好还加个判断好点,要不自己想关的时候都关不了!呵呵! 回复 6# jycel
可否提供个例子,谢谢, 这里的死循环是代替工作代码的例子…… 够测试用的~ 你可以加在自己的代码中
特意做了界面就是保证可以正常关闭的……
LZ还需要更详细的例子?那得从开天辟地说起…… 本帖最后由 jycel 于 2010-1-9 23:46 编辑
回复 7# lin0308
主程序1中加入
说明:当前为主程序1每隔1000毫秒检测一次,发现程序2进程不存在就启动
AdlibRegister("jians1",1000);这里的1000自定义多久调用(也就是检测)一次
Func jians1()
If Not ProcessExists('程序2.exe') Then Run('程序2.exe')
EndFunc
主程序2中加入
说明:当前为主程序2每隔1000毫秒检测一次,发现程序1进程不存在就启动
AdlibRegister("jians2",1000)
Func jians2()
If Not ProcessExists('程序1.exe') Then Run('程序1.exe')
EndFunc
回复
jycel 发表于 2010-1-9 23:40 http://www.autoitx.com/images/common/back.gif
你在给楼主演示真正的死循环吧,哈哈~~ 但愿楼主能吃得消…… :face (33): 回复 1# lin0308
5#这高手已经很说的很清楚了!你自己慢慢理解一下吧! 回复 9# jycel
其实是否可以在1中设置只能用热键退出,在退出前像注册表写入一个值,2判断这个注册表是否存在,不存在启动1,存在退出,1每次启动都删除这个值,是否可以这样。 本帖最后由 jycel 于 2010-1-10 11:39 编辑
回复 10# afan
呵呵!我没表达完!这只是调用检测自定义函数而已
在被监视的主程序如果说要真正退出!那么就应该牵涉到一个监测判断,可以在退出时向指定文件或者注册表写一个值,监测程序在启动被监视程序之前判断这个值,如果说是不再监视那么就不启动!
同时在主程序启动的时候,我个人觉得应该在主程序中写入这样一行
把自身启动目录写入注册表,监视程序通过这个注册表值来判断启动位置,如果说把被监视的程序放到其它地方呢?好多地方得自己去写,我们只是提供个思路!我也不觉得我那就是死循环! 回复 3# 顽固不化
如果1.exe调出2.exe,只要在任务管理器中对1.exe进行End Process Tree就能把两个程序都关闭的。 楼主没想做好事。。。。
页:
[1]
2