找回密码
 加入
搜索
查看: 2677|回复: 3

[AU3基础] 请教个关于函数processclose()错误码的问题~麻烦路过的老师解惑

[复制链接]
发表于 2012-8-27 22:46:05 | 显示全部楼层 |阅读模式
今天翻墙出外面看新闻,期间浏览器出了点问题,疯狂弹出几十个窗口,系统资源几乎被耗尽,于是突然想写个批量关闭同名进程的想法,使用了processclose()函数,发现它不会设置@error(一直都是0,和帮助文档中的描述不一致,不知道我的代码哪里出问题了~~)----------返回值是和文档说明一致的--------
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("快速全部关闭同名进程 V1.0", 276, 58, 192, 124, Default, $ws_ex_topmost)
$Input1 = GUICtrlCreateInput("", 136, 1, 129, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Label1 = GUICtrlCreateLabel("请输入要关闭的进程名:", 8, 8, 127, 17)
$Button1 = GUICtrlCreateButton("确定(enter)", 72, 32, 113, 25, 0x1)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $pro_name=GUICtrlRead($Input1)
                        If $pro_name='' Then
                                MsgBox(0, '错误!', '进程名不能为空!', 3)
                        ElseIf Not ProcessExists($pro_name) Then
                                MsgBox(0, '警告!', '您输入的进程名不存在,请检查!', 3)
                        Else
                                Do
                                        Sleep(1)
                                        MsgBox(0,0,ProcessClose($pro_name)&@CRLF&@error)
                                Until @error<>0
                                MsgBox(0, '好了!', '指定名称的进程已全部被关闭!!', 3)
                                GUICtrlSetData($Input1,'')
                        EndIf
        EndSwitch
WEnd


函数参考

--------------------------------------------------------------------------------

ProcessClose
终止某个进程.


ProcessClose ( "进程")


参数
进程 要终止的进程的名称或 PID(进程标识符).

返回值
成功: 返回 1.
失败: 返回 0 并设置 @error 到:
1 = 打开进程失败
2 = AdjustTokenPrivileges 失败
3 = 终止进程失败
4 = 不能验证进程是否存在
 楼主| 发表于 2012-8-27 22:51:39 | 显示全部楼层
现在暂时是从processclose()的返回值为0来结束循环
发表于 2012-8-27 23:04:29 | 显示全部楼层
本帖最后由 xiehuahere 于 2012-8-27 23:11 编辑

回复 1# annybaby


有没有试过这样:
Local $ret = ProcessClose($pro_name)
Local $errNo = @error
MsgBox(0, 0, $ret & @CRLF & $errNo)
我猜测,你这句的展开顺序是这样的:
1)处理 ProcessClose,得到返回值和@error值
2)进入MsgBox函数,@error被清零。
3)展开@error宏,现在就是0,msgbox函数基本不会发生错误。
  
开始执行某个函数的时候都会先将错误码清零,要获取最后一次发生的错误的错误码,用 _WinAPI_GetLastError() 替代你原句中的@error试试。
 楼主| 发表于 2012-8-27 23:18:05 | 显示全部楼层
回复 3# xiehuahere

谢谢你的回复,不过我估计问题应该不是在这里

因为,我中间的msgbox()只是由于@error没有按帮助文档中的设置时才加进去来查看的,我原来的是
do
processclose()
until @error>0
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-20 09:25 , Processed in 0.089014 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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