leo005 发表于 2014-10-8 17:50:02

au3如何判断一台电脑是否双显卡。

如题,求大神赐教,感激不尽!

veket_linux 发表于 2014-10-10 23:08:35

回复 6# lxwlxwayy
注册表的以前写过.... 现在开源吧

nmgwddj 发表于 2014-10-9 21:46:10

首先百度中搜索SetupAPI,了解作用。
MSDN中查询具体函数使用方法。
论坛中搜索SetupAPI,找到P版文章中封装好的UDF。
使用SetupAPI系列函数枚举显卡设备,判断个数。

MicroBlue 发表于 2014-10-10 07:36:36


#include <SetupApi.au3>
#include <array.au3>

Local $aryInfo

Local $aryDisplay
Local $aryNetwork
Local $aryChipset
Local $aryAudio

$aryDisplay = 0
$aryNetwork = 0
$aryChipset = 0
$aryAudio = 0

FindDeviceRecur(_CM_Locate_DevNode(""))

; This is what you want.
_ArrayDisplay($aryDisplay)


Func FindDeviceRecur($hDevInst)


      $aChild = _CM_Enumerate_Children($hDevInst)
      For $i = 1 To $aChild
                $hDevInst = _CM_Locate_DevNode($aChild[$i])
                $Class = _CM_Get_DevNode_Registry_Property($hDevInst, $CM_DRP_CLASS)
                $sDescr = _CM_Get_DevNode_Registry_Property($hDevInst, 1)
                $Version = Get_Driver_Version($hDevInst)


                                _2ArrayAdd($aryInfo, $Class & "|" & $sDescr)
                If $Class = "Display" Then
                                        ;MsgBox(0,"","显卡型号:" & $sDescr & @CRLF & @CRLF & "驱动版本:" & $Version)
                                        _2ArrayAdd($aryDisplay,$sDescr & "|" & $Version)
                                EndIf

                                If $Class = "Net" Then
                                        ;MsgBox(0,""," 网卡型号:" & $sDescr & @CRLF & @CRLF & "驱动版本:" & $Version)
                                        _2ArrayAdd($aryNetwork,$sDescr & "|" & $Version)
                                EndIf

                                If $Class = "Processor" Then
                                        ;MsgBox(0,"","处理器:" & $sDescr & @CRLF & @CRLF & "驱动版本:" & $Version)
                                        _2ArrayAdd($aryChipset,$sDescr & "|" & $Version)
                                EndIf

                                If $Class = "Media" Then
                                        ;MsgBox(0,"","声卡" & $sDescr & @CRLF & @CRLF & "驱动版本:" & $Version)
                                        _2ArrayAdd($aryAudio,$sDescr & "|" & $Version)
                                EndIf

               ;此处只是为了取显卡的信息,所以加了判断,去掉可以取所有硬件驱动版本信息
                                FindDeviceRecur($hDevInst)
                Next

EndFunc


Func _2ArrayAdd(ByRef $ary, $Data)

        Local $iLength = UBound($ary) + 1
        Local $DataList = StringSplit($Data, "|")

        If IsArray($DataList) Then
                ReDim $ary[$iLength]
                $ary[$iLength - 1] = $DataList
                $ary[$iLength - 1] = $DataList
        EndIf

        Return $ary
EndFunc

Func Get_Driver_Version($hDevInst)

      $ClassGUID = _CM_Get_DevNode_Registry_Property($hDevInst, 10)

      If $ClassGUID = "" Then Return "Unknown"
      If @OSArch = "X86" Then
                $Reg = "HKLM\SYSTEM\ControlSet001\Control\Class\"
      Else
                $Reg = "HKLM64\SYSTEM\ControlSet001\Control\Class\"
      EndIf

      $Version = RegRead($Reg & $ClassGUID, "DriverVersion")

      If $Version = "" Then
                Return "Unknown"
      Else
                Return $Version
      EndIf
EndFunc

lxwlxwayy 发表于 2014-10-10 19:32:15

学习下{:face (427):}

lxwlxwayy 发表于 2014-10-10 19:33:27

注册表吗{:face (394):}

lxwlxwayy 发表于 2014-10-10 19:33:51

注册表吗{:face (394):}

veket_linux 发表于 2014-10-10 23:26:58


来个可查ven代码对应厂商名称beta版(不含源码,献给装机人士)

yinbinly 发表于 2014-10-11 21:25:16

回复 8# veket_linux


    如果添加devid的搜索就更好了

austere 发表于 2014-10-12 17:05:02

回复 8# veket_linux

veket_linux 发表于 2014-10-12 17:20:58

你的本子设备太多了 本来就是beta给台机 用限制 10个设备

zhaoyun 发表于 2014-10-13 09:07:48

学习。。。。。。。。。。。

三维码 发表于 2014-10-13 14:33:24

感谢开源,此帖应该已经完结了吧

leo005 发表于 2014-10-14 14:19:41

这几天有点忙,一直没有来看帖子,感谢各位大大倾囊相授,感激不尽。待我测试,如需帮助还望各位不厌其烦不吝赐教!
页: [1]
查看完整版本: au3如何判断一台电脑是否双显卡。