求助使用setupAPI操作硬件的问题?
如何使用setupAPI如何直接获取某一类型硬件的ID,比如显卡,和使用setupAPI如何能自动卸载除USB之外的所有幽灵硬件? 顶出P版~ 1、无视你的第一个问题。2、枚举HKLM\SYSTEM\ControlSet002\Enum的所有子键,将子键名称连起来就是设备范例ID,用CM_Locate_DevNode在设备树中定位此设备,如果不能成功,说明这个是幽灵硬件,用_SetupDiCreateDeviceDevs创建设备句柄,_SetupDiRemoveDevice删除(注意第3个参数要设为True)。 1、无视你的第一个问题。
2、枚举HKLM\SYSTEM\ControlSet002\Enum的所有子键,将子键名称连起来就是设备范 ...
pusofalse 发表于 2010-7-9 16:29 http://www.autoitx.com/images/common/back.gif
应该是枚举HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet或者根据HKEY_LOCAL_MACHINE\SYSTEM\Select的值来确定控制集号吧。ControlSet002的信息有可能是不准确的。 获取某一类型的硬件ID,以前是直接枚举HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\下的值。可是在PE下这些注册表项不全或者完全缺失。如果硬件没安装驱动时CLass下的值也是空的。因而在PE下转向使用devcon.exe hwids 来获取未安装的某一类型的硬件ID。是想直接使用P版的setupAPI来实现,无奈现在还读不懂P大的代码。 例如使用devcon.exe hwids PCI\CC_0100 PCI\CC_0101 PCI\CC_0103 PCI\CC_0104 PCI\CC_0106 PCI\CC_0180 >>hwids.txt 来获取硬盘控制器的ID。 未必[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\ 下还没有?
P大的解决方案没有问题。 看来论坛高手还真不少!{:face (411):}
顶起来!等P版再次出来! #include <Access.au3>
#include <Array.au3>
#include <file.au3>
Local $regreturn,$aRecord
reg()
_ArrayDisplay($regreturn)
For $n=1 To UBound($regreturn)-1
id($regreturn[$n])
_ArrayDisplay($aRecord, "每个值")
Next
;id("PCI\VEN_1002&dev_5940")
Func id($Find)
Dim $yo
$adSource = @ScriptDir & "\HwidDB.mdb"
$adTable = "easydrv"
$adCol = "hwid"
;$Find = "PCI\VEN_11AB&DEV_4320"
$adFull = 1
$yo = _accessQueryLike($adSource, $adTable, $adCol, $Find, $adFull)
;_ArrayDisplay($yo, "返回值")
If IsArray($yo) Then
For $i=1 To $yo
$aRecord = StringSplit($yo[$i], Chr(28))
;_ArrayDisplay($aRecord, "每个值")
Return $aRecord
Next
EndIf
EndFunc
Func reg()
Dim $key="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI",$regreturn
For $i = 1 to 100
$var = RegEnumKey($key, $i)
if @error <> 0 Then ExitLoop
For $n=1 To 100
$subvarname=$key&"\"&$var
$subvar=RegEnumKey($subvarname,$n)
If @error <> 0 Then ExitLoop
$aaa=RegRead($subvarname&"\"&$subvar&"\","class")
;If $aaa = "system" Or $aaa = "display" Or $aaa = "net"Or $aaa="hdc"Or $aaa="media" Or $aaa="usb" Then
$hdid=RegRead($subvarname&"\"&$subvar&"\","HardwareID")
$bb=StringSplit($hdid,@CRLF)
;_ArrayDisplay($bb)
If UBound($bb)>5 Then
$cc=StringSplit($bb,"&")
;_ArrayDisplay($cc)
$regre=$cc&"&"&$cc
Else
$cc=StringSplit($bb,"&")
;_ArrayDisplay($cc)
$regre=$cc&"&"&$cc&"&"&$cc
EndIf
_ArrayAdd($regreturn,$regre)
Next
next
Return $regreturn
EndFunc 回复 9# 3mile
比较感兴趣的是HwidDB的创建??
页:
[1]