找回密码
 加入
搜索
楼主: smooth

[AU3基础] [已解决]使用AdlibRegister来检测U盘插入、窗口出现等出现闪动

[复制链接]
 楼主| 发表于 2022-1-26 21:29:19 | 显示全部楼层
chzj589 发表于 2022-1-26 21:26
哦,明白了,你要检测的是U-KEY。
那是专用U盘。这样检测可能没辙。

可以,我楼上的代码就可以检测。
发表于 2022-1-26 21:46:23 | 显示全部楼层
本帖最后由 afan 于 2022-1-26 21:48 编辑

#NoTrayIcon
#RequireAdmin
#PRE_UseX64=n
#include <SetupApi.au3>
Opt("GUIOnEventMode", 1);开启事件模式
Opt("GUICloseOnESC", 0);关闭“按ESC”退出脚本的功能
If WinExists("浦发网银付款回单自动截图") Then
        Exit
Else
        Global $hGui = GUICreate("浦发网银付款回单自动截图", 400, 370)
EndIf
GUICtrlCreateLabel("U-KEY状态:", 52, 290, 72, 12)
Global $uLabel = GUICtrlCreateLabel("", 124, 290, 72, 12)
GUICtrlCreateLabel("网银状态:", 20, 340, 60, 12)
Global $vLabel = GUICtrlCreateLabel("", 80, 340, 72, 12)
GUISetState()
GUISetOnEvent(-3, "_Exit")
AdlibRegister("Timer")
;~ AdlibRegister('_DetectHardID', 50)

While 1
        Sleep(10)
WEnd

Func _DetectHardID();检测U-KEY设备实例ID
        Local $hDevs, $tDevInfo, $aMouse[1][2] = [[0]]
        $hDevs = _SetupDiGetClassDevs($DIGCF_PRESENT, "CDROM");DiskDrive
        While _SetupDiEnumDeviceInfo($hDevs, $aMouse[0][0], $tDevInfo)
                $aMouse[0][0] += 1
                $sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_DEVICEDESC)
                $sName = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_FRIENDLYNAME)
                If $sName <> "" Then $sDescr = $sName
                ReDim $aMouse[$aMouse[0][0] + 1][2]
                $aMouse[$aMouse[0][0]][0] = $sDescr ; 磁盘描述信息
                $aMouse[$aMouse[0][0]][1] = _SetupDiGetDeviceInstanceId($hDevs, $tDevInfo) ; 设备范例ID
        WEnd
        ; 枚举网卡只需把"DiskDrive"改为"Net",鼠标则对应Mouse,光驱则为CDROM,显卡对应Display。
        _SetupDiDestroyDeviceInfoList($hDevs)
        Local $dFindDevs = ""
        For $i = 1 To $aMouse[0][0]
                If StringInStr($aMouse[$i][1], "USBSTOR\CDROM&VEN_TENDYRON&PROD_U-DISK&REV_1.10\") Then;
                        $dFindDevs = $aMouse[$i][1]
                        ExitLoop
                EndIf
        Next
        Return $dFindDevs;把变量值返回给函数_DetectHardID()
EndFunc   ;==>_DetectHardID

Func Timer()
        Local Static $sDevs0 = -100, $sLbData0
        Local $sLbData
        Local $sDevs = _DetectHardID()
        If $sDevs <> $sDevs0 Then
                If $sDevs <> '' Then
                        GUICtrlSetData($uLabel, "已插入")
                Else
                        GUICtrlSetData($uLabel, "未插入")
                EndIf
                $sDevs0 = $sDevs
        EndIf
        If WinExists("浦发银行网银客户端") Then
                $sLbData = "客户端版"
        ElseIf WinExists("上海浦东发展银行公司网上银行 - Internet Explorer") Then
                $sLbData = "网页版(IE)"
        ElseIf WinExists("上海浦东发展银行公司网上银行 - 用户配置 1 - Microsoft​ Edge") Then
                $sLbData = "网页版(Edge)"
        Else
                $sLbData = "未登录"
        EndIf
        If $sLbData0 <> $sLbData Then
                $sLbData0 = $sLbData
                GUICtrlSetData($vLabel, $sLbData0)
        EndIf
EndFunc   ;==>Timer

Func _Exit()
        Exit
EndFunc   ;==>_Exit

 楼主| 发表于 2022-1-26 21:59:04 | 显示全部楼层

厉害,我要花上不少时间才能看懂你改的原理。
另外,你提醒了我,我把回调函数的参数修改一下,也可以。
$U_KEY_state = DllCallbackRegister("Monitor", "int", "hwnd;uint;uint;dword");注册一个回调函数,用来监视U-KEY插入和拔出状态。
$U_KEY_stateDLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 250, "ptr", DllCallbackGetPtr($U_KEY_state));第9个参数250,表示回调的间隔时间。
发表于 2022-1-27 10:49:05 | 显示全部楼层
smooth 发表于 2022-1-26 21:29
可以,我楼上的代码就可以检测。

学习了。不是浦发的U-KEY能检测到吗?
 楼主| 发表于 2022-1-27 13:06:11 | 显示全部楼层
chzj589 发表于 2022-1-27 10:49
学习了。不是浦发的U-KEY能检测到吗?

所有系统设备都可以检测到,包括磁盘、光驱、网卡、鼠标、显卡。
发表于 2022-1-28 17:46:17 | 显示全部楼层
smooth 发表于 2022-1-26 21:29
可以,我楼上的代码就可以检测。

不错。但还是有的U-KEEY读不出来



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2022-1-29 08:40:55 | 显示全部楼层
chzj589 发表于 2022-1-28 17:46
不错。但还是有的U-KEEY读不出来

那你手动去看一下,读不取出来的U-KEY,有没有设备实例路径?
发表于 2022-1-29 09:28:35 | 显示全部楼层
smooth 发表于 2022-1-29 08:40
那你手动去看一下,读不取出来的U-KEY,有没有设备实例路径?

看来是U-KEY量产方式,磁盘管理器也看不见
 楼主| 发表于 2022-1-29 16:23:40 | 显示全部楼层
chzj589 发表于 2022-1-29 09:28
看来是U-KEY量产方式,磁盘管理器也看不见

那就不是代码的问题了,本身它就没有。
发表于 2022-1-30 17:10:28 | 显示全部楼层
加密狗是否可以?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 18:27 , Processed in 0.068772 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表