找回密码
 加入
搜索
查看: 2336|回复: 4

[AU3基础] 看下那出毛病了 怎么运行不出来

[复制链接]
发表于 2010-4-25 09:10:45 | 显示全部楼层 |阅读模式
$var = DriveGetDrive("CDROM")
dim $exe,$reg,$bat
$s1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1")
$s2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2")
$s3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3")
$s4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4")
        If Not @error Then
                For $i = 1 To $var[0]
                                DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
                               
           if $s1 = 0 then
                                RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1","REG_SZ","1")
            EndIf

            if $s2 = 0 then
                RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2","REG_SZ","1")
                        EndIf
                       
                        if $s3 = 0 then
                RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3","REG_SZ","1")
            EndIf
                       
            if $s4 = 0 then
                RunWait("C:\常用软件\SOFTINST.EXE")
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4","REG_SZ","1")
            EndIf
                Next
EndIf
发表于 2010-4-25 10:26:50 | 显示全部楼层
看不懂,帮你顶。。。
发表于 2010-4-25 11:18:38 | 显示全部楼层
我给你的代码做下注释。 你自己看看错在哪。
$var = DriveGetDrive("CDROM")  ;调用库函数获取光驱的个数和盘符。返回类型为数组$var,其中$var[0]代表光驱个数。
                               ;$var[1]到$var[n]是光驱的盘符。 
dim $exe,$reg,$bat  ;定义这3个变量是干什么的? 本代码中没用到过。
$s1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1")  ;从注册表中读出HKEY_LOCAL_MACHINE\SOFTWARE\Temp下的s1的值。
$s2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2")  ;以下同,省略不写了。
$s3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3")
$s4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4")
;这里有个疑问,如果该注册表中没有HKEY_LOCAL_MACHINE\SOFTWARE\Temp键,返回值是个空值。这个判断无效。
;建议读注册表之前先判断注册表中有没有HKEY_LOCAL_MACHINE\SOFTWARE\Temp键,没有的话直接执行IF中的那段代码。
;~ 成功: 返回指定值项的数据. @EXTENDED 设置类型为 $REG_... 值的类型,这些类型定义于 "Constants.au3" 包含文件. 
;~ 失败: 返回空字符串 "",并把 @error 设为以下值之一: 
;~       1 如果不能打开被请求的键 
;~       2 如果不能打开被请求的主键 
;~       3 如果不能远程连接到注册表 
;~      -1 如果不能打开被请求的值 
;~      -2 如果值的类型是不支持的 
;~ 帮助中的说明如上,很显然,如果不存在该注册表项目,@error的值是2,
;~ 你的NOT @error 并不是1,所以,第一个判断就失效,程序直接退出了
;~ 如果存在该主键而不存在子健,那么@error的值是1,NOT @error的值是0,IF判断也不会继续执行。
;~ 所以,你的程序在执行之初不管运行了与否,都首先判断注册表中有没有Temp键和其下的4个子健。
;~ 如果没有则直接执行下面的相应代码。如果有才进行判断。
;~ 判断方法是:
;~ 1.直接RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1")这4句,然后从@error返回值来判断。
;~ 2.RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", 1)……RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", 4),
;~   还是根据@error返回值来判断。
;~ 可以将下面的FOR循环中的所有代码定义成一个子函数,需要调用的时候直接调用函数名就可以少写许多代码。

If Not @error Then  ;如果注册表读取成功才执行下面的代码,否则不执行。
        For $i = 1 To $var[0]   ;定义变量$i用来获取光驱盘符。
                DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
                
                if $s1 = 0 then  ;读取出的$s1为0才执行。
                        RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                    Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1","REG_SZ","1")
                EndIf
                if $s2 = 0 Then  ;读取出的$s2为0才执行。
                        RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2","REG_SZ","1")
                EndIf
                if $s3 = 0 then   ;读取出的$s3为0才执行。
                        RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3","REG_SZ","1")
                EndIf
                if $s4 = 0 Then  ;读取出的$s4为0才执行。
                        RunWait("C:\常用软件\SOFTINST.EXE")
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4","REG_SZ","1")
                EndIf 
        Next
EndIf 

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-4-25 11:21:38 | 显示全部楼层
另外,送上一句话,程序的关键判断语句之前可以加上MsgBox(0,Not @error,@error)这样的语句来回显判断参数,以确保程序的流程是按你的思路在执行。
 楼主| 发表于 2010-4-25 11:50:35 | 显示全部楼层
你帮我加下吧   

我的问题发在上面了


[AU3基础] 谁能把这段代码加个判断语句1
谁能把这段代码加个判断语句
记录付费主题, 价格:金钱 10 块 $var = DriveGetDrive("CDROM")
        If Not @error Then
                For $i = 1 To $var[0]
                                            DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
                        RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                        RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                                            RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                        RunWait("C:\常用软件\SOFTINST.EXE")
                Next
EndIf

这段代码 。exe和.bat都运行2遍    怎么加判断语句 在那加判断语句 才不运行2遍
命令要简单明了的
一看就明白的  加上注解 谢谢了
收藏 分享



已好的代码如下
dim $exe,$reg,$bat

if $exe <> "" Then
        Run($exe)
ElseIf $reg <> "" Then
        Run(@ComSpec & ' /c regedit /s "'&$reg&'"',"", @SW_HIDE)
ElseIf        $bat <> "" Then
        Run($bat,"",@SW_HIDE)
Else
        Exit
EndIf
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 10:18 , Processed in 0.145375 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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