bill.chen 发表于 2016-10-10 12:16:09

内部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失败,这个有什么处理办法不?

lin6051 发表于 2016-10-10 13:26:50

楼主自己的逻辑 有问题,难道检测到 杀毒软件在运行 之后 就不再检测了么?

while 1
ifprocessexists("qq.exe")=0 Then
msgbox(0,'','杀软未运行则发送邮件等操作',10)
;......
exitloop
EndIf
sleep(2000)
WEnd

bill.chen 发表于 2016-10-10 18:19:11

回复 2# lin6051


    新手初学的,这个while循环,是一直在执行这个循环体的。

tofor 发表于 2016-10-12 15:06:35

ExitLoop 可以加参数 1是当前, 2是上一层,类推

cihron 发表于 2016-10-13 01:55:45

如果多层循环,用“exitloop N”,N代表循环层数

jingzhinvr 发表于 2016-10-19 14:41:08

什么软件,干啥用的

kingdsq 发表于 2016-10-26 21:40:38

ExitLoop N层
页: [1]
查看完整版本: 内部if判断退出最外的while循环