#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[0] 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[0] If StringInStr($aLines[$i], "USB") Then $sUSBInfo &= $aLines[$i] & @CRLF EndIf Next Return $sUSBInfo EndFunc |