【已解决】求个自动点击WIN7设备管理器里“扫描检测硬件改动”的程序
本帖最后由 xxwl2008 于 2017-9-20 23:48 编辑封装的WIN7系统,部署中调用万能驱动,有时候USB3的二级设备USB3 HUB扫描不到,导致进入系统后USB设备都不能用,键盘鼠标也不能用。
补救方法就是进入WIN10PE导入USB HUB驱动,再进入桌面后,设备管理器里点“扫描检测硬件改动”的按钮就能安装USB3 HUB的驱动,键盘鼠标就能正常用了,但是如果主板没PS2口,就没法找PS2口的键盘鼠标去点这个按钮。所以我想到制作一个程序,自动调用设备管理器,自动点击“扫描检测硬件改动”的按钮,然后我在PE里放到系统的启动文件夹,这样就能解决问题了。
以上可能会封装系统的才能看懂,但是并不重要,我只是想实现下面的功能:
自动运行 devmgmt.msc 命令打开设备管理器,自动点击下面任意设备或空白处,菜单栏上就会出现“扫描检测硬件改动”按钮,或者右击下面设备空白处,也有“扫描检测硬件改动”的选项,自动点一下这个“扫描检测硬件改动”就行了,最后删除程序本身。
谢谢大家,我对AU3不懂所以过来求代码,封装系统问题不懂的可以问我。
可借用命令行试试
devcon.exerescan 回复 2# zghwelcome
devcon rescan 命令我试过了,直接用这个命令不行,需要先删除USB3设备才能扫描到装上驱动。
devcon我没找到删除未知设备的命令,这样就得收集USB3设备的ID,比如删除英特尔的 devcon remove @IUSB3\* ,如果只有INTEL和AMD两家USB3还好,就怕还有其他厂家的, 而且针对32位和64位,还得用不同的devcon程序。
感觉devcon命令很麻烦,还不如点击设备管理器里的“扫描检测硬件改动”选项简单,所以过来求代码了 借鉴了 狂师 的坐标点击
只写了vbs的脚本,粗略地实现了 模拟键盘和鼠标操作 触发“扫描检测硬件改动”
可以参照着转为AU3脚本,相差不大的 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
回复 4# user030
谢谢你朋友,我试了一下报错,查了一下原来需要装EXCEL,我封装的系统里没集成EXCEL,不过还是谢谢你。 回复 6# xxwl2008
随便写了一个,没做详细测试,,仅供参考ShellExecute("devmgmt.msc")
WinWaitActive("设备管理器")
Local $hgui = WinGetHandle("设备管理器")
If Not @error Then ConsoleWrite($hgui)
Sleep(1000)
$hpos = WinGetPos($hgui)
MouseClick("left",$hpos + $hpos / 2,$hpos + $hpos /2,1,0)
Sleep(1000)
Send("!a")
Sleep(500)
Send("a") 回复 7# yamakawa
感谢,测试正常使用! 回复 8# xxwl2008
搞定了的话,麻烦修改标题 添加【已解决】字样 666666mark
页:
[1]