sunkiss 发表于 2025-2-9 15:28:29

WM_DEVICECHANGE能检测USB网卡插入和删除吗?

今天从论坛看到了用WM_DEVICECHANGE可以检测U盘的插入和删除,但是我测试USB网卡只能检测到USB发生变化(通过$WM_DEVICECHANGE),但是我不会进一步获取到新插入的USB的网卡信息,求助一下大家,我就想检测USB网卡插入,然后获取新插入网卡的信息。

rally 发表于 2025-2-12 20:58:10

#include <Constants.au3> #include <MsgBoxConstants.au3> #include <Array.au3>; 定义全局变量 Global $sLastUSBDevice = ""; 主循环,持续检测USB设备插入 While 1   ; 获取当前连接的USB设备   Local $aUSBDevices = GetUSBDevices()      ; 检查是否有新的USB设备插入   For $sDevice In $aUSBDevices         If StringInStr($sDevice, "USB") And Not StringInStr($sLastUSBDevice, $sDevice) Then             ; 检测到新的USB网卡             $sLastUSBDevice = $sDevice             MsgBox($MB_SYSTEMMODAL, "检测到USB网卡", "新插入的USB网卡: " & $sDevice)            ; 获取USB网卡信息             Local $sUSBInfo = GetUSBAdapterInfo()             MsgBox($MB_SYSTEMMODAL, "USB网卡信息", $sUSBInfo)         EndIf   Next      ; 每隔2秒检测一次   Sleep(2000) WEnd; 函数:获取当前连接的USB设备 Func GetUSBDevices()   Local $aDevices   Local $oWMI = ObjGet("winmgmts:\\.\root\cimv2")   Local $oColItems = $oWMI.ExecQuery("SELECT * FROM Win32_PnPEntity WHERE PNPClass = 'Net'", "WQL", 0x30)      For $oItem In $oColItems         If StringInStr($oItem.Name, "USB") Then             _ArrayAdd($aDevices, $oItem.Name)         EndIf   Next      Return $aDevices EndFunc; 函数:获取USB网卡信息 Func GetUSBAdapterInfo()   Local $sOutput = ""   Local $iPID = Run("ipconfig /all", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)      ; 读取命令输出   While 1         $sOutput &= StdoutRead($iPID)         If @error Then ExitLoop   WEnd      ; 关闭进程   ProcessClose($iPID)      ; 过滤出包含"USB"关键字的行   Local $aLines = StringSplit($sOutput, @CRLF, $STR_ENTIRESPLIT)   Local $sUSBInfo = ""      For $i = 1 To $aLines         If StringInStr($aLines[$i], "USB") Then             $sUSBInfo &= $aLines[$i] & @CRLF         EndIf   Next      Return $sUSBInfo EndFunc
页: [1]
查看完整版本: WM_DEVICECHANGE能检测USB网卡插入和删除吗?