请教个关于函数processclose()错误码的问题~麻烦路过的老师解惑
今天翻墙出外面看新闻,期间浏览器出了点问题,疯狂弹出几十个窗口,系统资源几乎被耗尽,于是突然想写个批量关闭同名进程的想法,使用了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 = 不能验证进程是否存在 现在暂时是从processclose()的返回值为0来结束循环 本帖最后由 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试试。 回复 3# xiehuahere
谢谢你的回复,不过我估计问题应该不是在这里
因为,我中间的msgbox()只是由于@error没有按帮助文档中的设置时才加进去来查看的,我原来的是
do
processclose()
until @error>0
页:
[1]