ccy666 发表于 2012-2-13 16:00:37

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

本帖最后由 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 = 0 Then
        ShellExecute($var)
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等等各在什么情况下用,请大伙解释一下或提供一些详细教材,先多谢了。

afan 发表于 2012-2-13 16:22:38

$var = StringSplit(RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", ""), '"', 1)
If $var = 0 Then
        ShellExecute($var)
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 = 0 Then
        ShellExecute($var)
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

user3000 发表于 2012-2-13 16:25:03

想实现点击一个按钮启动一程序,该程序的路径未知。查找该程序的路径优先顺序是
1.从注册表的默认打开程序 ...
ccy666 发表于 2012-2-13 16:00 http://www.autoitx.com/images/common/back.gif


    建议在论坛搜索'教程', 下载一些基础教程, 或直接通读自带的帮助文件基础语法相关部分!

netegg 发表于 2012-2-13 16:41:17

难道整理一下代码就真的这么难吗

ccy666 发表于 2012-2-13 17:58:39

回复 2# afan


    A版辛苦了,测试了一会儿,方式一:提示LINE2 ERROR:错误的数组或者数组超出界限
方式二:$var2未定义,我添加了$var2= $var2 = IniRead("manager.ini", "SCITE", "START", "")
还是不能读取INI及写入INI呀。
帮我看看出错的原因,费心了,谢谢

afan 发表于 2012-2-13 18:01:34

回复afan


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


    只给你改了 If...Endif的判断,其它的并没有测试。不过 方式二确实没注意$var2的问题,抱歉

afan 发表于 2012-2-13 18:08:35

不知道 RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", "") 读到的是什么?我这没有,所以也不知道 If $var = 0 Then 的用意

ccy666 发表于 2012-2-13 18:12:28

不知道 RegRead("HKEY_CLASSES_ROOT\au3_auto_file\shell\open\command", "") 读到的是什么?我这没有,所以 ...
afan 发表于 2012-2-13 18:08 http://www.autoitx.com/images/common/back.gif


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


@="\"E:\\greensoft\\编程制作\\AUTOIT_3.3.7.15.1\\SciTe\\SciTE.exe\" \"%1\""

因为读出来后会包括后面的默认,而我只想要前面的路径。
只是如果没有加上后面的其它判断,这条件及代码是可用的。

afan 发表于 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) Then
      ShellExecute($var)
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

ccy666 发表于 2012-2-13 18:33:41

本帖最后由 ccy666 于 2012-2-13 18:36 编辑

回复 9# afan


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

另外如[^"]+这样的代码是在数组资料中学到的吗?谢谢

afan 发表于 2012-2-13 18:36:36

回复 10# ccy666


    改正则时忘记把你的2改为0了,囧
楼上已修改

ccy666 发表于 2012-2-13 18:57:53

回复ccy666


    改正则时忘记把你的2改为0了,囧
楼上已修改
afan 发表于 2012-2-13 18:36 http://www.autoitx.com/images/common/back.gif

呵呵,对您们这样的高人来说,修改代码比写代码更容易出错。
现在的代码完美运行了,我终于在LYNLR8的管理器上添加了一个打开本机SCITE的快捷按钮以方便调试,再次感谢您的帮助!

afan 发表于 2012-2-13 19:04:12

回复 12# ccy666


    不客气~ 高人都有高就,也就没时间提供帮助,所以,我只是矮人,说到“矮人”,他还有强大的Dos工具,So,我只能换成菜鸟。

lpxx 发表于 2012-2-13 21:04:51

回复ccy666


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


    {:face (356):}
原来你也很幽默。
页: [1]
查看完整版本: [已解决]If...Then...ElseIf...Else...EndIf 判断语句使用