找回密码
 加入
搜索
查看: 2809|回复: 9

[系统综合] 【已解决】求个自动点击WIN7设备管理器里“扫描检测硬件改动”的程序

  [复制链接]
发表于 2017-9-19 03:59:04 | 显示全部楼层 |阅读模式
本帖最后由 xxwl2008 于 2017-9-20 23:48 编辑

封装的WIN7系统,部署中调用万能驱动,有时候USB3的二级设备USB3 HUB扫描不到,导致进入系统后USB设备都不能用,键盘鼠标也不能用。
补救方法就是进入WIN10PE导入USB HUB驱动,再进入桌面后,设备管理器里点“扫描检测硬件改动”的按钮就能安装USB3 HUB的驱动,键盘鼠标就能正常用了,但是如果主板没PS2口,就没法找PS2口的键盘鼠标去点这个按钮。所以我想到制作一个程序,自动调用设备管理器,自动点击“扫描检测硬件改动”的按钮,然后我在PE里放到系统的启动文件夹,这样就能解决问题了。
以上可能会封装系统的才能看懂,但是并不重要,我只是想实现下面的功能:
自动运行 devmgmt.msc 命令打开设备管理器,自动点击下面任意设备或空白处,菜单栏上就会出现“扫描检测硬件改动”按钮,或者右击下面设备空白处,也有“扫描检测硬件改动”的选项,自动点一下这个“扫描检测硬件改动”就行了,最后删除程序本身。
谢谢大家,我对AU3不懂所以过来求代码,封装系统问题不懂的可以问我。

本帖子中包含更多资源

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

×
发表于 2017-9-19 08:42:46 | 显示全部楼层
可借用命令行试试
devcon.exe  rescan
 楼主| 发表于 2017-9-19 12:19:14 | 显示全部楼层
回复 2# zghwelcome
devcon rescan 命令我试过了,直接用这个命令不行,需要先删除USB3设备才能扫描到装上驱动。
devcon我没找到删除未知设备的命令,这样就得收集USB3设备的ID,比如删除英特尔的 devcon remove @IUSB3\* ,如果只有INTEL和AMD两家USB3还好,就怕还有其他厂家的, 而且针对32位和64位,还得用不同的devcon程序。
感觉devcon命令很麻烦,还不如点击设备管理器里的“扫描检测硬件改动”选项简单,所以过来求代码了
发表于 2017-9-20 01:25:02 | 显示全部楼层
借鉴了 狂师 的坐标点击
只写了vbs的脚本,粗略地实现了 模拟键盘和鼠标操作 触发“扫描检测硬件改动”
可以参照着转为AU3脚本,相差不大的
发表于 2017-9-20 01:26:47 | 显示全部楼层
VBS文件好像 上传不了,那我直接粘贴出来了
Dim ws,cmdStr,sStr
Set ws = WScript.CreateObject("WScript.Shell")
ws.sendkeys ""
sStr = "设备管理器"
cmdStr = "devmgmt.msc"
ws.Run cmdStr,0
WScript.sleep 1000
' msgbox sStr,vbok,2222
' WScript.sleep 1000

ws.appactivate sStr
ws.sendkeys "{enter}"

Set mouse=New SetMouse

''获得鼠标当前位置坐标
mouse.getpos x,y 

' MsgBox x & " " & y

'把鼠标移动到坐标
mouse.move 300,300

WScript.Sleep 200

' 左击
mouse.clik "dbclick" 

' "right" 右击, "middle" 中间键点击

WScript.sleep 500
ws.sendkeys "%a"
WScript.sleep 200
ws.sendkeys "a"


Class SetMouse
    private S
    private xls, wbk, module1
    private reg_key, xls_code, x, y


    Private Sub Class_Initialize()
        Set xls = CreateObject("Excel.Application") 
        Set S = CreateObject("wscript.Shell")
    'vbs 完全控制excel
        reg_key = "HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM"
        reg_key = Replace(reg_key, "$", xls.Version)
        S.RegWrite reg_key, 1, "REG_DWORD"
    'model 代码
        xls_code = _
        "Private Type POINTAPI : X As Long : Y As Long : End Type" & vbCrLf & _
        "Private Declare Function SetCursorPos Lib ""user32"" (ByVal x As Long, ByVal y As Long) As Long" & vbCrLf & _
        "Private Declare Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long" & vbCrLf & _
        "Private Declare Sub mouse_event Lib ""user32"" Alias ""mouse_event"" " _
        & "(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)" & vbCrLf & _
        "Public Function getx() As Long" & vbCrLf & _
        "Dim pt As POINTAPI : GetCursorPos pt : getx = pt.X" & vbCrLf & _
        "End Function" & vbCrLf & _
        "Public Function gety() As Long" & vbCrLf & _
        "Dim pt As POINTAPI: GetCursorPos pt : gety = pt.Y" & vbCrLf & _
        "End Function"
        Set wbk = xls.Workbooks.Add 
        Set module1 = wbk.VBProject.VBComponents.Add(1)
        module1.CodeModule.AddFromString xls_code 
    End Sub


    '关闭
    Private Sub Class_Terminate
        xls.DisplayAlerts = False
        wbk.Close
        xls.Quit
    End Sub

    '可调用过程


    Public Sub getpos( x, y) 
        x = xls.Run("getx") 
        y = xls.Run("gety") 
    End Sub


    Public Sub move(x,y)
        xls.Run "SetCursorPos", x, y
    End Sub

 

    Public Sub clik(keydown)
        Select Case UCase(keydown)
            Case "LEFT"
                xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
            Case "RIGHT"
                xls.Run "mouse_event", &H8 + &H10, 0, 0, 0, 0
            Case "MIDDLE"
                xls.Run "mouse_event", &H20 + &H40, 0, 0, 0, 0
            Case "DBCLICK"
                xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
                xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
        End Select
    End Sub


End Class
 楼主| 发表于 2017-9-20 04:14:23 | 显示全部楼层
回复 4# user030


    谢谢你朋友,我试了一下报错,查了一下原来需要装EXCEL,我封装的系统里没集成EXCEL,不过还是谢谢你。
发表于 2017-9-20 20:24:51 | 显示全部楼层
回复 6# xxwl2008

随便写了一个,没做详细测试,,仅供参考
ShellExecute("devmgmt.msc")
WinWaitActive("设备管理器")
Local $hgui = WinGetHandle("设备管理器")
If Not @error Then ConsoleWrite($hgui)
Sleep(1000)
$hpos = WinGetPos($hgui)
MouseClick("left",$hpos[0] + $hpos[2] / 2,$hpos[1] + $hpos[3] /2,1,0)
Sleep(1000)
Send("!a")
Sleep(500)
Send("a")

评分

参与人数 1金钱 +20 收起 理由
xxwl2008 + 20 十分感谢,测试可用!

查看全部评分

 楼主| 发表于 2017-9-20 21:26:55 | 显示全部楼层
回复 7# yamakawa


    感谢,测试正常使用!
发表于 2017-9-20 21:43:52 | 显示全部楼层
回复 8# xxwl2008


    搞定了的话,麻烦修改标题 添加【已解决】字样
发表于 2017-9-21 23:31:46 | 显示全部楼层
666666  mark
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 23:30 , Processed in 0.089471 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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