找回密码
 加入
搜索
查看: 4241|回复: 11

如何暂停程序的运行?

[复制链接]
发表于 2009-6-22 12:30:28 | 显示全部楼层 |阅读模式
本帖最后由 acbs 于 2009-6-23 21:17 编辑

我想用au3的代码控制一个exe程序的运行,也是au3转的,我想请教一下大家,如何暂停这个exe的运行呢?
比如我想暂停的程序名称为abc.exe,暂停一段时间,比如五分钟,然后再开始执行,但是直接运行abc.exe的时间需要半个小时。
请大家指点一下。
 楼主| 发表于 2009-6-22 14:20:22 | 显示全部楼层
这个很难吗?没有哪位老兄可以指点一下?
发表于 2009-6-22 14:22:26 | 显示全部楼层
au3控制的是脚本,外部程序暂停,就不知道。
不知道变速可不可以满足你的要求。
 楼主| 发表于 2009-6-22 14:40:42 | 显示全部楼层
不是外部程序的运行,就是au3转的可执行文件,右下角图标里有个暂停,手工可以,不知道用代码如何控制。
发表于 2009-6-22 15:54:50 | 显示全部楼层
论坛有挂起进程的udf
试试看行不?
发表于 2009-6-23 06:39:41 | 显示全部楼层
我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧?
发表于 2009-6-23 11:10:41 | 显示全部楼层
我汗你,你直接写个循环调用的脚本,做个图形界面。
检测进程,有就杀掉,没有就运行它,
然后sleep,多久自己设置........接着结束进程
简单了吧?
cjmbbbbb 发表于 2009-6-23 06:39

他好像说的是暂停,杀掉进程可以吗?
 楼主| 发表于 2009-6-23 15:11:04 | 显示全部楼层
论坛有挂起进程的udf
试试看行不?
lynfr8 发表于 2009-6-22 15:54

刚学,请8兄明示。
发表于 2009-6-23 17:19:49 | 显示全部楼层
http://www.autoitx.com/forum.php ... &extra=page%3D3
进程挂起和继续(api)

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

个人也没有实践过,你先试试
或者问问netegg
他应该研究过
发表于 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[0])
    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[0])
    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这个进程将会发生什么?呵呵

评分

参与人数 1金钱 +5 收起 理由
acbs + 5 谢谢8兄

查看全部评分

 楼主| 发表于 2009-6-23 21:16:56 | 显示全部楼层
谢谢8兄,太深奥了,好好学习一下.
发表于 2009-9-3 03:37:14 | 显示全部楼层
不错,以后研究下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-28 20:18 , Processed in 0.074847 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表