最近用VB做外挂,模拟鼠标实现自动化操作。发现驱动级模拟,一直存在问题。今天终于解决了,记录下.
---------------------------------------------------------------------------------
系统环境:win7 64位,VB 32位
winIO环境: 3.0环境
下载地址:www.internals.com
---------------------------------------------------------------------------------
WinIO是一款免费、开源的系统组件,你可以在www.internals.com上面免费下载它的
源码。在最新版本3.0中,增加了对64位 Windows操作系统的支持。我就是利用它的功能,
实现了驱动级模拟按键。在我使用的WinIO 3.0中,里面有四个bin 文件,分别是
WinIO32.dll、WinIO64.dll、WinIO32.sys、WinIO64.sys。sys文件是实现核心功能的驱动,
dll文件是封装驱动功能的接口。由于我的系统是64 位系统,使用了VB做界面编程,所以
仅需要 WinIO32.dll和 WinIO64.sys。dll
- VB调试的时候,要把 WinIO32.dll和 WinIO64.sys 文件拷贝到VB安装目录下
- 生成exe文件后,WinIO32.dll和 WinIO64.sys 跟exe文件保持在同目录下即可
- 关于数字签名:
WinIO64.sys没有正式的数字签名,只有测试签名。要使它能成功加载,
必须打开测试模式(cmd里切换到 system32目录再输入 bcdedit /set testsigning on),
然后根据以下步骤信任WinIO64.sys的测试签名:
1.打开 WinIO64.sys的属性框,翻到“数字签名”选项卡,点击“详细信息”
2.在新出来的对话框中点击“查看证书”
3.在又新出来的对话框中点击“安装证书”
4.点击“下一步”,然后选择“将所有的证书放入下列存储”
5.点击浏览,选择“受信任的根证书发布机构”
受信任的根证书发布界面
6.点击“下一步”,然后点击“完成”
7.在弹出的“安全性警告”对话框中选择“是”,才能导入成功
实现方式:
调用:
Private Sub Command6_Click()
If InitializeWinIo = False Then
'用InitializeWinIo函数加载驱动程序,如果成功会返回true,否则返回false
MsgBox "驱动程序加载失败!"
Else
Dim hwnd As Long
hwnd = Shell("Notepad.exe", vbNormalFocus)
Sleep 1000
'模拟按下 alt+F 键
MyKeyDownEx VK_MENU
Sleep 200
MyKeyDown VK_F
MyKeyUp VK_F '模拟按下并释放A键
MyKeyUpEx VK_MENU
Sleep 500
'模拟按下 ctl+O 键
MyKeyDownEx VK_Control
Sleep 200
MyKeyDown VK_O
MyKeyUp VK_O '模拟按下并释放A键
MyKeyUpEx VK_Control
ShutdownWinIo '程序结束时记得用ShutdownWinIo函数卸载驱动程序
End If
End Sub
模块:
Option Explicit
Declare Function MapPhysToLin Lib "WinIo32.dll" (ByVal P