找回密码
 加入
搜索
查看: 10291|回复: 13

[AU3基础] [已解决]If...Then...ElseIf...Else...EndIf 判断语句使用

  [复制链接]
发表于 2012-2-13 16:00:37 | 显示全部楼层 |阅读模式
本帖最后由 ccy666 于 2012-2-13 18:58 编辑

想实现点击一个按钮启动一程序,该程序的路径未知。查找该程序的路径优先顺序是
1.从注册表的默认打开程序中查找是否有该默认打开程序存在,如果有就运行该程序
2.如果步骤1未找到,则从INI配置文件中读取,并运行该程序。
3.以上两步骤均未找到,则打开电脑目录指定到该程序运行之并把路径写入INI配置文件。
初步代码如下(其中有几个问题存在,请看注释):
$var = StringSplit(RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", ""), '"', 1)
IF $var[2] = 0 Then 
        ShellExecute($var[2])
ElseIf $var = 0 Then     ;此处ElseIf后的判断如何写?
        $var2 = IniRead("manager.ini","SCITE","START","")
        ShellExecute($var2)
Else
        Local $message = "打开SCITE..."
    Local $var3 = FileOpenDialog($message, "", "应用程序 (*.exe)", 1 )
If @error Then
    MsgBox(4096,"","放弃打开SCITE!")
Else
        IniWrite("manager.ini","SCITE","START",$var3)    ;此处这样代码为何无法写入INI?
    ShellExecute($var3)
EndIf
ENDIF
烦请哪位老大帮忙指导一下,另外IF......THEN....ELSEIF......ENDIF判断语句中,IF后面有些看到用<> 0 ,  =1 ,  =-1 ,  @error = -1 , @error = 1等等各在什么情况下用,请大伙解释一下或提供一些详细教材,先多谢了。
发表于 2012-2-13 16:22:38 | 显示全部楼层
$var = StringSplit(RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", ""), '"', 1)
If $var[2] = 0 Then
        ShellExecute($var[2])
Else        ;下面的都需要先操作一部分代码,所以不适合用 ElseIf。当然这里要用也行,方式2
        $var2 = IniRead("manager.ini", "SCITE", "START", "")
        If FileExists($var2) Then
                ShellExecute($var2)
        Else
                Local $message = "打开SCITE..."
                Local $var3 = FileOpenDialog($message, "", "应用程序 (*.exe)", 1)
                If @error Then
                        MsgBox(4096, "", "放弃打开SCITE!")
                Else
                        IniWrite(@ScriptDir & "\manager.ini", "SCITE", "START", $var3)
                        ;Ini函数在处理相对路径时会加上@WorkingDir,所以最好不要使用相对路径
                        ShellExecute($var3)
                EndIf
        EndIf
EndIf

;===================方式2

$var = StringSplit(RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", ""), '"', 1)
If $var[2] = 0 Then
        ShellExecute($var[2])
ElseIf FileExists(IniRead("manager.ini", "SCITE", "START", "")) Then
        ShellExecute($var2)
Else
        Local $message = "打开SCITE..."
        Local $var3 = FileOpenDialog($message, "", "应用程序 (*.exe)", 1)
        If Not @error Then
                IniWrite(@ScriptDir & "\manager.ini", "SCITE", "START", $var3)
                ShellExecute($var3)
        EndIf
EndIf
发表于 2012-2-13 16:25:03 | 显示全部楼层
想实现点击一个按钮启动一程序,该程序的路径未知。查找该程序的路径优先顺序是
1.从注册表的默认打开程序 ...
ccy666 发表于 2012-2-13 16:00



    建议在论坛搜索'教程', 下载一些基础教程, 或直接通读自带的帮助文件基础语法相关部分!
发表于 2012-2-13 16:41:17 | 显示全部楼层
难道整理一下代码就真的这么难吗
 楼主| 发表于 2012-2-13 17:58:39 | 显示全部楼层
回复 2# afan


    A版辛苦了,测试了一会儿,方式一:提示LINE2 ERROR:错误的数组或者数组超出界限
方式二:$var2未定义,我添加了$var2= $var2 = IniRead("manager.ini", "SCITE", "START", "")
还是不能读取INI及写入INI呀。
帮我看看出错的原因,费心了,谢谢
发表于 2012-2-13 18:01:34 | 显示全部楼层
回复  afan


    A版辛苦了,测试了一会儿,方式一:提示LINE2 ERROR:错误的数组或者数组超出界限
方 ...
ccy666 发表于 2012-2-13 17:58



    只给你改了 If...Endif  的判断,其它的并没有测试。不过 方式二确实没注意$var2的问题,抱歉
发表于 2012-2-13 18:08:35 | 显示全部楼层
不知道 RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", "") 读到的是什么?我这没有,所以也不知道 If $var[2] = 0 Then 的用意
 楼主| 发表于 2012-2-13 18:12:28 | 显示全部楼层
不知道 RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", "") 读到的是什么?我这没有,所以 ...
afan 发表于 2012-2-13 18:08



   高,问题就在这代码上,我想读的是注册表中的默认打开程序的路径如:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command]
@="\"E:\\greensoft\\编程制作\\AUTOIT_3.3.7.15.1\\SciTe\\SciTE.exe\" \"%1\""

因为读出来后会包括后面的默认,而我只想要前面的路径。
只是如果没有加上后面的其它判断,这条件及代码是可用的。
发表于 2012-2-13 18:14:52 | 显示全部楼层
本帖最后由 afan 于 2012-2-13 18:35 编辑

回复 8# ccy666
$var = StringRegExp(RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", ""), '[^"]+', 1)
If Not @Error And FileExists($var[0]) Then
        ShellExecute($var[0])
Else        ;下面的都需要先操作一部分代码,所以不适合用 ElseIf。
        $var2 = IniRead(@ScriptDir & "\manager.ini", "SCITE", "START", "")
        If FileExists($var2) Then
                ShellExecute($var2)
        Else
                Local $message = "打开SCITE..."
                Local $var3 = FileOpenDialog($message, "", "应用程序 (*.exe)", 1)
                If @error Then
                        MsgBox(4096, "", "放弃打开SCITE!")
                Else
                        IniWrite(@ScriptDir & "\manager.ini", "SCITE", "START", $var3)
                        ;Ini函数在处理相对路径时会加上@WorkingDir,所以最好不要使用相对路径
                        ShellExecute($var3)
                EndIf
        EndIf
EndIf
 楼主| 发表于 2012-2-13 18:33:41 | 显示全部楼层
本帖最后由 ccy666 于 2012-2-13 18:36 编辑

回复 9# afan


    A版,测试了一下,在条件一注册表中未存在该程序路径时,此代码正常读取INI中路径位置并打开程序,但当条件一即注册表中存在该程序路径时,也是提示错误的数组或者数组超出界限。
这一点跟2楼的代码运行结果正好相反,2楼代码是当条件一注册表路径存在时不报错。不存在时报错。

另外如[^"]+这样的代码是在数组资料中学到的吗?谢谢
发表于 2012-2-13 18:36:36 | 显示全部楼层
回复 10# ccy666


    改正则时忘记把你的2改为0了,囧
楼上已修改
 楼主| 发表于 2012-2-13 18:57:53 | 显示全部楼层
回复  ccy666


    改正则时忘记把你的2改为0了,囧
楼上已修改
afan 发表于 2012-2-13 18:36


呵呵,对您们这样的高人来说,修改代码比写代码更容易出错。
现在的代码完美运行了,我终于在LYNLR8的管理器上添加了一个打开本机SCITE的快捷按钮以方便调试,再次感谢您的帮助!
发表于 2012-2-13 19:04:12 | 显示全部楼层
回复 12# ccy666


    不客气~ 高人都有高就,也就没时间提供帮助,所以,我只是矮人,说到“矮人”,他还有强大的Dos工具,So,我只能换成菜鸟。
发表于 2012-2-13 21:04:51 | 显示全部楼层
回复  ccy666


    不客气~ 高人都有高就,也就没时间提供帮助,所以,我只是矮人,说到“矮人”,他还 ...
afan 发表于 2012-2-13 19:04



   
原来你也很幽默。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 09:27 , Processed in 0.083646 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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