hzxymkb 发表于 2010-7-9 14:11:05

求助使用setupAPI操作硬件的问题?

如何使用setupAPI如何直接获取某一类型硬件的ID,比如显卡,和使用setupAPI如何能自动卸载除USB之外的所有幽灵硬件?

afan 发表于 2010-7-9 15:12:49

顶出P版~

pusofalse 发表于 2010-7-9 16:29:31

1、无视你的第一个问题。
2、枚举HKLM\SYSTEM\ControlSet002\Enum的所有子键,将子键名称连起来就是设备范例ID,用CM_Locate_DevNode在设备树中定位此设备,如果不能成功,说明这个是幽灵硬件,用_SetupDiCreateDeviceDevs创建设备句柄,_SetupDiRemoveDevice删除(注意第3个参数要设为True)。

仙乃日 发表于 2010-7-10 09:41:30

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的信息有可能是不准确的。

仙乃日 发表于 2010-7-10 09:53:12

获取某一类型的硬件ID,以前是直接枚举HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\下的值。可是在PE下这些注册表项不全或者完全缺失。如果硬件没安装驱动时CLass下的值也是空的。因而在PE下转向使用devcon.exe hwids 来获取未安装的某一类型的硬件ID。是想直接使用P版的setupAPI来实现,无奈现在还读不懂P大的代码。

仙乃日 发表于 2010-7-10 10:04:29

例如使用devcon.exe hwids PCI\CC_0100 PCI\CC_0101 PCI\CC_0103 PCI\CC_0104 PCI\CC_0106 PCI\CC_0180 >>hwids.txt 来获取硬盘控制器的ID。

3mile 发表于 2010-7-10 10:08:26

未必[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\ 下还没有?
P大的解决方案没有问题。

hzxymkb 发表于 2010-7-10 10:16:19

看来论坛高手还真不少!{:face (411):}
顶起来!等P版再次出来!

3mile 发表于 2010-7-10 14:11:02

#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

仙乃日 发表于 2010-7-10 20:37:24

回复 9# 3mile


    比较感兴趣的是HwidDB的创建??
页: [1]
查看完整版本: 求助使用setupAPI操作硬件的问题?