内部if判断退出最外的while循环
本帖最后由 bill.chen 于 2016-10-10 18:20 编辑向各位请教一个问题,我写了一个检查杀毒软件进程的代码,想实现在弹出消息框点确定时,能退出这个最外面的while循环,代码如下,请各位指点一下
;==========判断杀毒软件进程是否正常运行
global $r
while 1
ifprocessexists("clamscan.exe") Then
MsgBox($MB_SYSTEMMODAL, "","杀毒软件正在运行")
Else
$pingtime=ping("mail.test.com")
if $pingtime>0 Then
;========发邮件模块==================
Local $msg = ObjCreate ("JMail.Message")
If IsObj($msg) Then
$msg.Charset = "gb2312"
$msg.Silent = true
$msg.Priority = 3
$msg.MailServerUserName = "bill.chen@test.com" ; SMTP验证用户名
$msg.MailServerPassword = "123456" ; SMTP验证密码
$msg.From = "bill.chen@test.com" ; 发件人地址
$msg.FromName=@ComputerName & @UserName ;当前计算机名加用户名
;$msg.FromName = @UserName ; 发件人名称
$msg.AddRecipient("bill.chen@test.com", "1234567") ; 收件人信息
$msg.Subject = "请注意这台PC杀毒软件异常,请注意检查" ; 邮件标题
$msg.Body = "这是测试邮件" & @CRLF ; 邮件内容第1行
$msg.AppendText("这是附加的信息") ; 邮件内容第n行
If $msg.Send("mail.test.com") Then
;run(@ComSpec & " /c " &' netsh interface set interface "本地连接" disabled', "", @SW_HIDE)
;run(@ComSpec & " /c " &' netsh interface set interface "无线网络连接" disabled', "", @SW_HIDE)
MsgBox(48, "网络通的情况", "由于没能未检测到杀到软件运行,已将网络断开,请及时与管理员联系")
;local $r
if $r=1 Then
ExitLoop
endif
Else
MsgBox(0, "", "发送失败")
EndIf
Else
MsgBox(0, "", "ObjCreate Jmail.Message失败")
EndIf
else
;run(@ComSpec & " /c " &' netsh interface set interface "本地连接" disabled', "", @SW_HIDE)
; run(@ComSpec & " /c " &' netsh interface set interface "无线网络连接" disabled', "", @SW_HIDE)
MsgBox(48, "网络不通的情况", "由于没能未检测到杀到软件运行,已将网络断开,请及时与管理员联系")
;local $s
if $r=1 Then
Exit
endif
EndIf
EndIf
sleep(6000)
WEnd
根据杀毒软件进程,弹出相对应的消息框,点一次确定就可以退出这个while循环,不然一直在弹出这个消息框,想了好久也没有实现,请各位指点一下。
同时这个程序 还有一个问题在,域里普通用户运行的话,会提示ObjCreate Jmail.Message失败,这个有什么处理办法不? 楼主自己的逻辑 有问题,难道检测到 杀毒软件在运行 之后 就不再检测了么?
while 1
ifprocessexists("qq.exe")=0 Then
msgbox(0,'','杀软未运行则发送邮件等操作',10)
;......
exitloop
EndIf
sleep(2000)
WEnd 回复 2# lin6051
新手初学的,这个while循环,是一直在执行这个循环体的。 ExitLoop 可以加参数 1是当前, 2是上一层,类推 如果多层循环,用“exitloop N”,N代表循环层数 什么软件,干啥用的 ExitLoop N层
页:
[1]