acbs 发表于 2009-6-22 12:30:28

如何暂停程序的运行?

本帖最后由 acbs 于 2009-6-23 21:17 编辑

我想用au3的代码控制一个exe程序的运行,也是au3转的,我想请教一下大家,如何暂停这个exe的运行呢?
比如我想暂停的程序名称为abc.exe,暂停一段时间,比如五分钟,然后再开始执行,但是直接运行abc.exe的时间需要半个小时。
请大家指点一下。

acbs 发表于 2009-6-22 14:20:22

这个很难吗?没有哪位老兄可以指点一下?

crkey12345 发表于 2009-6-22 14:22:26

au3控制的是脚本,外部程序暂停,就不知道。
不知道变速可不可以满足你的要求。

acbs 发表于 2009-6-22 14:40:42

不是外部程序的运行,就是au3转的可执行文件,右下角图标里有个暂停,手工可以,不知道用代码如何控制。

lynfr8 发表于 2009-6-22 15:54:50

论坛有挂起进程的udf
试试看行不?

cjmbbbbb 发表于 2009-6-23 06:39:41

我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧?

crkey12345 发表于 2009-6-23 11:10:41

我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧?
cjmbbbbb 发表于 2009-6-23 06:39 http://www.autoitx.com/images/common/back.gif
他好像说的是暂停,杀掉进程可以吗?

acbs 发表于 2009-6-23 15:11:04

论坛有挂起进程的udf
试试看行不?
lynfr8 发表于 2009-6-22 15:54 http://www.autoitx.com/images/common/back.gif
刚学,请8兄明示。

lynfr8 发表于 2009-6-23 17:19:49

http://www.autoitx.com/forum.php?mod=viewthread&tid=7374&extra=page%3D3
进程挂起和继续(api)

挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态..
可以通过工具来实现进程的挂起
但要注意你挂起的进程是否多线程(进程和线程的区别自己百度搜搜)
如果你的进程只有一个线程,那么也可以说进程被挂起了
多线程程序,我看书上意思是,其他的线程还在继续跑

个人也没有实践过,你先试试
或者问问netegg
他应该研究过

lynfr8 发表于 2009-6-23 17:37:02

还是拿记事本举个例吧
这样你好理解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这个进程将会发生什么?呵呵

acbs 发表于 2009-6-23 21:16:56

谢谢8兄,太深奥了,好好学习一下.

四海皆狂龙 发表于 2009-9-3 03:37:14

不错,以后研究下
页: [1]
查看完整版本: 如何暂停程序的运行?