|
本帖最后由 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 |
|