找回密码
 加入
搜索
查看: 2289|回复: 0

[AU3基础] IDE控制器

[复制链接]
发表于 2010-12-13 20:48:27 | 显示全部楼层 |阅读模式
本帖最后由 xargw 于 2010-12-13 20:49 编辑

最近看到一个代码改IDE控制器为标准的:
我想加两个msgbox一个是提示无需修改,一个是提示修成功,我应该回在哪个位置,谢谢,我加了两个地方却一点反映都没有:
Dim $Class,$Dev,$KeyValue,$i,$j,$Line,$LineNum,$LineNum2,$Line2,$Len,$Str1,$Str2,$FileHandle,$FileHandle2
;主键,该主键下有若干子键
$Class="HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\"
;几个计数用的整数
$i=1
$j=1
;文件行号
$LineNum=1
$LineNum2=1
;Windows文件夹下或者Windows\System32文件夹下是否有devcon.exe,若没有则退出程序
If Not (FileExists(@WindowsDir&"\devcon.exe") Or FileExists(@WindowsDir&"\system32\devcon.exe")) Then Exit
;Windows\Inf文件夹下是否有mshdc.inf,若有则将mshdc.inf备份为mshdc.inf.bak,否则退出程序
If FileExists(@WindowsDir&"\inf\mshdc.inf") Then
        FileMove(@WindowsDir&"\inf\mshdc.inf",@WindowsDir&"\inf\mshdc.inf.bak",1)
Else
        Exit
EndIf
;初始条件满足,准备开始更改IDE控制器
While(1)
        ;读取主键下的子键,
        $Dev=RegEnumKey($Class,$i)
        ;若所有子键读取完毕,则退出程序
        If @error=-1 Then
                ExitLoop
        EndIf
        ;读取该子键下MatchingDeviceId的键值,该键值对应着当前IDE控制器,并把此IDE控制器的名称存入$KeyValue中
        $KeyValue=RegRead($Class&$Dev,"MatchingDeviceId")
        ;如果该键值为pci\cc_0101,即IDE控制器已为标准双通道PCI IDE控制器,则无需执行修改,反之则准备开始修改
        If $KeyValue<>"pci\cc_0101" Then       
                While(1)
                        ;以读取模式打开Windows\Inf\mshdc.inf.bak文件
                        $FileHandle=FileOpen(@WindowsDir&"\inf\mshdc.inf.bak",0)
                        ;读取第$LineNum行,并保存到$Line
                        $Line=FileReadLine(@WindowsDir&"\inf\mshdc.inf.bak",$LineNum)
                        ;文件若读取完毕则关闭文件并退出循环,文件若未读取完毕则只关闭文件
                        If @error=-1 Then
                FileClose($FileHandle)                               
                                ExitLoop
                        Else
                            FileClose($FileHandle)
                                MsgBox(0,"提示","无需修改")       
                        EndIf
                        ;$KeyValue中IDE控制器的名称的长度
            $Len=StringLen($KeyValue)
                        ;读取$Line中第2到$Len个字符,并保存在$Str1中
                        $Str1=StringMid($Line,2,$Len)       
                        ;MsgBox(1,"test",$Str1&"   "&$KeyValue)
                        ;$Line这行中包含$KeyValue中IDE控制器的名称,并在正确的位置上,则开始修改$Line这行的内容
                        if $Str1=$KeyValue Then
                                ;记录$Line这行中=所在的位置
                                While(1        )
                                        If StringMid($Line,$j,1)="=" Then
                                                ;MsgBox(1,"test",StringMid($Line,$j,1))
                                                ExitLoop       
                                        Else
                                                ;MsgBox(1,"test",StringMid($Line,$j,1))
                                                $j=$j+1
                                        EndIf
                                WEnd
                                ;Msgbox(1,"test","While done !")
                                ;修改这行为$KeyValue中IDE控制器的名称 加 = PCI\CC_0101 的组合
                                $Str2=StringMid($Line,1,$j)
                                $Str2=$Str2&"pciide_Inst,,PCI\CC_0101"
                                ;MsgBox(1,"test",$Str2)
                                ;以读取模式打开Windows\Inf\mshdc.inf.bak文件
                                $FileHandle=FileOpen(@WindowsDir&"\inf\mshdc.inf.bak",0)
                                ;以写入模式打开Windows\Inf\mshdc.inf文件
                                $FileHandle2=FileOpen(@WindowsDir&"\inf\mshdc.inf",2)
                                ;读取Windows\inf\mshdc.inf.bak,创建Windows\inf\mshdc.inf,用刚修改的那一行替换原有的那一行
                                While(1)
                                        $Line2=FileReadLine(@WindowsDir&"\inf\mshdc.inf.bak",$LineNum2)
                                        ;MsgBox(1,"test",$LineNum&" "&$LineNum2&" "&$Line2)
                                        If @error=-1 Then ExitLoop
                                        If $LineNum2=$LineNum Then
                                                FileWriteLine(@WindowsDir&"\inf\mshdc.inf",$Str2)
                                        Else
                                                FileWriteLine(@WindowsDir&"\inf\mshdc.inf",$Line2)
                                        EndIf
                                        $LineNum2=$LineNum2+1
                                WEnd
                                ;关闭文件
                                FileClose($FileHandle)
                                FileClose($FileHandle2)
                                ;MsgBox(1,"test","mshdc.inf is creat successful")
                                ;使用devcon来更新当前IDE控制器,由于当前IDE控制器的驱动以被更改了指向,指向标准双通道PCI IDE控制器的驱动,
                                ;所以在更新当前IDE控制器驱动时,会寻找标准双通道PCI IDE控制器的驱动来替代当前的IDE控制器驱动
                                ;MsgBox(1,"test","cmd /c devcon update "&@WindowsDir&"\inf\mshdc.inf "&""""&$KeyValue&"""")
                                Runwait("cmd /c devcon update "&@WindowsDir&"\inf\mshdc.inf "&""""&$KeyValue&"""","",@SW_HIDE)
                                ;变更驱动完毕,退出本次本IDE控制器的驱动变更,继续查找并更改剩余的IDE控制器
                                $LineNum=1
                                ExitLoop
                        EndIf
                        $LineNum=$LineNum+1
                WEnd
        EndIf
        $i=$i+1
WEnd
;所有IDE控制器修改完毕,替换开始备份的原始的mshdc.inf.bak到当前的mshdc.inf
;Windows\Inf文件夹下是否有mshdc.inf.bak,则替换回去,没有则不替换
If FileExists(@WindowsDir&"\inf\mshdc.inf.bak") Then
        FileMove(@WindowsDir&"\inf\mshdc.inf.bak",@WindowsDir&"\inf\mshdc.inf",1)
        MsgBox(0, "提示", "更改成功")         
Else
        Exit
EndIf
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-17 17:32 , Processed in 0.073723 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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