求助,这个条件选择结构为什么只运行两次就自动退出了?
本帖最后由 藤真 于 2012-5-4 11:44 编辑;~ 2.判断是否存在进程QQ.exe,alg.exe,explorer.exe,存在则显示名字和pid,全部不存在则显示"不存在检测的进程"(使用select或switch)
Dim $a="qq.exe"
Dim $b="alg.exe"
Dim $c="explorer.exe"
Select
Case ProcessExists($a)=0
MsgBox(64,"进程检测",$a&"进程不存在")
Case ProcessExists($a)<>0
MsgBox(64,"进程检测",$a&"进程存在,其pid为:"&ProcessExists($a))
ContinueCase
Case ProcessExists($b)=0
MsgBox(64,"进程检测",$b&"进程不存在")
Case ProcessExists($b)<>0
MsgBox(64,"进程检测",$b&"进程存在,其pid为:"&ProcessExists($b))
ContinueCase
Case ProcessExists($c)=0
MsgBox(64,"进程检测",$c&"进程不存在")
Case ProcessExists($c)<>0
MsgBox(64,"进程检测",$c&"进程存在,其pid为:"&ProcessExists($c))
ContinueCase
Case Else
MsgBox(64,"进程检测","不存在检测的进程")
ContinueCase
EndSelect
只能检测到QQ和ALG进程,然后就退出了。 回复 1# 藤真
首先, 要澄清你的错误概念, Select ... EndSelect 不是循环语句, 是判断语句!
其次, 按你的判断结果, 它们应该要独立的单独进行判断!
比如这样:Dim $a = "qq.exe"
Dim $b = "alg.exe"
Dim $c = "explorer.exe"
If ProcessExists($a) = 0 Then
MsgBox(64, "进程检测", $a & "进程不存在")
Else
MsgBox(64, "进程检测", $a & "进程存在,其pid为:" & ProcessExists($a))
EndIf
If ProcessExists($b) = 0 Then
MsgBox(64, "进程检测", $b & "进程不存在")
Else
MsgBox(64, "进程检测", $b & "进程存在,其pid为:" & ProcessExists($b))
EndIf
If ProcessExists($c) = 0 Then
MsgBox(64, "进程检测", $c & "进程不存在")
Else
MsgBox(64, "进程检测", $c & "进程存在,其pid为:" & ProcessExists($c))
EndIf 我乐了,select这个是循环语句吗?请看帮助文档。 回复 2# user3000
谢谢你的回答,我是新手呵呵。。
但是根据题目要求,这里必须要使用select或者switch语句来完成,主要是为了熟练这个语句,请问如何完成这个练习呢?
2.判断是否存在进程QQ.exe,alg.exe,explorer.exe,存在则显示名字和pid,全部不存在则显示"不存在检测的进程"(使用select或switch) 我后来想了一下,因为alg.exe这个进程不存在,所以判断结果为假,所以程序就直接退出了,不知道我想的是不是对的?哪位大牛帮我完成上面的题目,需要使用select或者是switch语句来完成。 外面加个for循环然后switch判断 回复 4# 藤真
你觉得 "每一个进程的存在与否" 跟 "另外的进程的存在与否" 之间有什么逻辑关系吗?
没有吧! 那么你为什么非得硬把它们拉在一起?
就是用 Select 语句, 也得用三个 Select 语句. 不然, 用 ContinueCase 硬把它们凑一起, 永远得不到正确的结果. 本帖最后由 shqf 于 2012-5-4 13:46 编辑
楼主没有仔细看帮助啊,select语句块中“如果表达式(第一个)为真则执行从下一行开始一直到下一个 Case 或 EndSelect 为止的所有语句.如果有多个Case表达式都成立则只执行第一个Case语句.”,注意这里只执行第一个条件成立的case语句啊,而不管下面是否还有成立的case语句,select语句就执行结束了。
首先select它不是循环语句,其次它的条件判断不同于if语句。照楼主的思路应该用if语句,象2 楼那样。一定要用select,则根据其特点,应使用嵌套:Dim $c = "qq.exe"
Dim $b = "alg.exe"
Dim $a = "explorer.exe"
Select
Case ProcessExists($a) = 0
MsgBox(64, "进程检测", $a & "进程不存在")
Case ProcessExists($a) <> 0
MsgBox(64, "进程检测", $a & "进程存在,其pid为:" & ProcessExists($a))
Select
Case ProcessExists($b) = 0
MsgBox(64, "进程检测", $b & "进程不存在")
Case ProcessExists($b) <> 0
MsgBox(64, "进程检测", $b & "进程存在,其pid为:" & ProcessExists($b))
Select
Case ProcessExists($c) = 0
MsgBox(64, "进程检测", $c & "进程不存在")
Case ProcessExists($c) <> 0
MsgBox(64, "进程检测", $c & "进程存在,其pid为:" & ProcessExists($c))
EndSelect
EndSelect
EndSelect但根据4楼的题目要求,某个进程不存在不用显示的,但全部不存在时要显示出来,代码应如下:Dim $c = "qq.exe"
Dim $b = "alg.exe"
Dim $a = "explorer.exe"
Local $flag = 0
Select
Case ProcessExists($a) <> 0
MsgBox(64, "进程检测", $a & "进程存在,其pid为:" & ProcessExists($a))
$flag=1
Select
Case ProcessExists($b) <> 0
MsgBox(64, "进程检测", $b & "进程存在,其pid为:" & ProcessExists($b))
$flag = 1
Select
Case ProcessExists($c) <> 0
MsgBox(64, "进程检测", $c & "进程存在,其pid为:" & ProcessExists($c))
$flag = 1
EndSelect
EndSelect
EndSelect
If $flag = 0 Then MsgBox(64, "进程检测","三个进程都不存在") 回复 1# 藤真
你每个case判断后的对话框后都加一个ContinueCase试试,这样一想不也是循环判断吗?,是我没细看,既然是练习,多看看帮助文档呀 本帖最后由 netegg 于 2012-5-4 14:57 编辑
回复 2# user3000
这是谁告诉你的,continuecase就是继续执行判断用的,不会判断成立就退出判断
不过楼主如果需要判断,那么最好在最后的一个case前面所有的case中都加上continuecase 回复 8# shqf
select可以嵌套使用的?这个倒是没注意过,程序是如何判断内部select里的case到底跟的是哪个select的? 本帖最后由 user3000 于 2012-5-5 16:16 编辑
此楼发言有错误,特此编辑删除掉!
已在 15楼 举例说明 ContinueCase 的用途.
17楼 蛋大 更放上来自 官方的英文讲解!
请参阅! 本帖最后由 netegg 于 2012-5-4 15:25 编辑
回复 12# user3000
又想了想,不是这个问题,select是单一变量的判断,只切换相同变量的值,切换变量是不管用的 Dim $a = "qq.exe"
Dim $b = "alg.exe"
Dim $c = "explorer.exe"
Dim $check =
Select
Case $check Or $check Or $check
For $i = 0 To 2
If $check[$i] Then MsgBox(0,"进程检测",$check[$i])
Next
Case Else
MsgBox(0,"进程检测","不存在检测的进程")
EndSelect
可以检测pid的 本帖最后由 user3000 于 2012-5-5 08:05 编辑
回复 13# netegg
我12楼测试结果还是有错误, 复制楼主代码后, 第1条Case里没加 ContinueCase
Au3 中的 Select 判断加入 ContinueCase 的作用是:
当出现 CASE 真判断, 其跟有 ContinueCase 的, 下一条的 Case 语句 无论真假 肯定, 必定, 绝对会 执行!
如果接着还有 ContinueCase 关键词, 则下下条Case 语句 无论真假也是 肯定, 必定, 绝对会 执行! 一路执行下去, 直到遇到没有 ContinueCase 的 Case 行为止!
大家测试下面代码就知道了.
Dim $a = "explorer.exe"
Dim $aa = ProcessExists($a)
MsgBox(0, '开始第1次测试', '第一个判断为真, 有5条信息!')
Select
Case $aa <> 0
MsgBox(64, '判断1-1', $a & "进程存在,其pid为:" & $aa)
ContinueCase
Case $aa = 0
MsgBox(64, '判断1-2', $a & "进程不存在")
ContinueCase
Case $aa = 1000
MsgBox(64, '判断1-3', $a & "进程存在")
ContinueCase
Case $aa = 220
MsgBox(64, '判断1-4', $a & "进程存在")
ContinueCase
Case Else
MsgBox(64, '判断1-5', "不存在检测的进程")
EndSelect
MsgBox(0, '开始第2次测试', '将刚才为真的判断移动到倒数第2的位置' & @CRLF & '结果显示2条信息!', 2)
Select
Case $aa = 0
MsgBox(64, '判断2-1', $a & "进程不存在")
ContinueCase
Case $aa = 1000
MsgBox(64, '判断2-2', $a & "进程存在")
ContinueCase
Case $aa = 220
MsgBox(64, '判断2-3', $a & "进程存在")
ContinueCase
Case $aa <> 0
MsgBox(64, '判断2-4', $a & "进程存在,其pid为:" & $aa)
ContinueCase
Case Else
MsgBox(64, '判断2-5', "不存在检测的进程")
EndSelect
MsgBox(0, '测试信息', '将刚才为真的判断移动到倒数第3的位置' & @CRLF & '结果显示3条信息!', 2)
Select
Case $aa = 0
MsgBox(64, '判断3-1', $a & "进程不存在")
ContinueCase
Case $aa = 1000
MsgBox(64, '判断3-2', $a & "进程存在")
ContinueCase
Case $aa <> 0
MsgBox(64, '判断3-3', $a & "进程存在,其pid为:" & $aa)
ContinueCase
Case $aa = 220
MsgBox(64, '判断3-4', $a & "进程存在")
ContinueCase
Case Else
MsgBox(64, '判断3-5', "不存在检测的进程")
EndSelect
页:
[1]
2