lin0308 发表于 2010-1-9 22:11:46

如何让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:18:22

本帖最后由 jycel 于 2010-1-9 22:19 编辑

用AdlibRegister调用检测进程是否存在,不存在就启动!二个程序互相监视很简单啊!

顽固不化 发表于 2010-1-9 22:21:25

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-9 22:35:35

呵呵,很简单的进程保护~

afan 发表于 2010-1-9 22:58:12

本帖最后由 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:10:24

本帖最后由 jycel 于 2010-1-9 23:11 编辑

个人觉得还是AdlibRegister调用检测好点,用while wend死循环
而且最好还加个判断好点,要不自己想关的时候都关不了!呵呵!

lin0308 发表于 2010-1-9 23:31:20

回复 6# jycel


    可否提供个例子,谢谢,

afan 发表于 2010-1-9 23:37:53

这里的死循环是代替工作代码的例子…… 够测试用的~ 你可以加在自己的代码中
特意做了界面就是保证可以正常关闭的……

LZ还需要更详细的例子?那得从开天辟地说起……

jycel 发表于 2010-1-9 23:40:52

本帖最后由 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

afan 发表于 2010-1-9 23:53:53

回复
jycel 发表于 2010-1-9 23:40 http://www.autoitx.com/images/common/back.gif


    你在给楼主演示真正的死循环吧,哈哈~~ 但愿楼主能吃得消…… :face (33):

hzxymkb 发表于 2010-1-10 00:09:26

回复 1# lin0308
5#这高手已经很说的很清楚了!你自己慢慢理解一下吧!

lin0308 发表于 2010-1-10 10:54:32

回复 9# jycel


其实是否可以在1中设置只能用热键退出,在退出前像注册表写入一个值,2判断这个注册表是否存在,不存在启动1,存在退出,1每次启动都删除这个值,是否可以这样。

jycel 发表于 2010-1-10 11:37:30

本帖最后由 jycel 于 2010-1-10 11:39 编辑

回复 10# afan
呵呵!我没表达完!这只是调用检测自定义函数而已
在被监视的主程序如果说要真正退出!那么就应该牵涉到一个监测判断,可以在退出时向指定文件或者注册表写一个值,监测程序在启动被监视程序之前判断这个值,如果说是不再监视那么就不启动!
同时在主程序启动的时候,我个人觉得应该在主程序中写入这样一行
把自身启动目录写入注册表,监视程序通过这个注册表值来判断启动位置,如果说把被监视的程序放到其它地方呢?好多地方得自己去写,我们只是提供个思路!我也不觉得我那就是死循环!

钱小昭 发表于 2011-11-16 14:04:01

回复 3# 顽固不化
如果1.exe调出2.exe,只要在任务管理器中对1.exe进行End Process Tree就能把两个程序都关闭的。

llwan_love 发表于 2011-12-25 20:43:19

楼主没想做好事。。。。
页: [1] 2
查看完整版本: 如何让2个AU3互相监控,