如何暂停程序的运行?
本帖最后由 acbs 于 2009-6-23 21:17 编辑我想用au3的代码控制一个exe程序的运行,也是au3转的,我想请教一下大家,如何暂停这个exe的运行呢?
比如我想暂停的程序名称为abc.exe,暂停一段时间,比如五分钟,然后再开始执行,但是直接运行abc.exe的时间需要半个小时。
请大家指点一下。 这个很难吗?没有哪位老兄可以指点一下? au3控制的是脚本,外部程序暂停,就不知道。
不知道变速可不可以满足你的要求。 不是外部程序的运行,就是au3转的可执行文件,右下角图标里有个暂停,手工可以,不知道用代码如何控制。 论坛有挂起进程的udf
试试看行不? 我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧? 我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧?
cjmbbbbb 发表于 2009-6-23 06:39 http://www.autoitx.com/images/common/back.gif
他好像说的是暂停,杀掉进程可以吗? 论坛有挂起进程的udf
试试看行不?
lynfr8 发表于 2009-6-22 15:54 http://www.autoitx.com/images/common/back.gif
刚学,请8兄明示。 http://www.autoitx.com/forum.php?mod=viewthread&tid=7374&extra=page%3D3
进程挂起和继续(api)
挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态..
可以通过工具来实现进程的挂起
但要注意你挂起的进程是否多线程(进程和线程的区别自己百度搜搜)
如果你的进程只有一个线程,那么也可以说进程被挂起了
多线程程序,我看书上意思是,其他的线程还在继续跑
个人也没有实践过,你先试试
或者问问netegg
他应该研究过 还是拿记事本举个例吧
这样你好理解Run("Notepad.exe")
Sleep(3000)
$process='Notepad.exe'
_ProcessSuspend($process)
MsgBox('','','已经挂起'&$process&@CRLF&'记事本5秒之内无法操作!')
Sleep(5000)
_ProcessResume($process)
MsgBox('','','已经恢复'&$process&@CRLF&'记事本又可以操作了!')
Func _ProcessSuspend($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle)
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
Endif
Else
SetError(2)
Return 0
Endif
EndFunc
Func _ProcessResume($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle)
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
Endif
Else
SetError(2)
Return 0
Endif
EndFunc你想一下,如果挂起winlogon这个进程将会发生什么?呵呵 谢谢8兄,太深奥了,好好学习一下. 不错,以后研究下
页:
[1]