用VB写dll,遇到的问题
时间:2011-10-13
来源:互联网
搞一个窗口未获得焦点也能自动填写文本的辅助程序,碰到了模拟组合键无效的难题,比如Ctrl+A是全选文本,但一失去焦点就毫无反应,
在网上找到一个VB模拟按键的方法,想做成dll调用,如下:
向未激活的窗口发送组合键,想用三个参数,第一个是窗口句柄hWnd,第二个是修饰键如Ctrl,第三个是普通按键如A。
带参数调用这个dll的相应命令即发送不同的组合键。
我不会VB,想简单拼凑一个应急,可无法编译,子程序或函数未定义。
Sub ZuHe1(hWnd As Integer)
keybd_event VK_CONTROL, &H1D, 0, 0 ' 模拟按下SHIFT键,&H2A是VK_SHIFT的扫描码
PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H1E0001 ' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_CONTROL, &H1D, KEYEVENTF_KEYUP, 0 ' 模拟抬起 SHIFT 键
End Sub
Sub ZuHe2(hWnd As Integer)
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H3E0001 Or &H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F4
End Sub
请高手帮忙补充成完整代码,先把手头的任务完成.
在网上找到一个VB模拟按键的方法,想做成dll调用,如下:
向未激活的窗口发送组合键,想用三个参数,第一个是窗口句柄hWnd,第二个是修饰键如Ctrl,第三个是普通按键如A。
带参数调用这个dll的相应命令即发送不同的组合键。
我不会VB,想简单拼凑一个应急,可无法编译,子程序或函数未定义。
Sub ZuHe1(hWnd As Integer)
keybd_event VK_CONTROL, &H1D, 0, 0 ' 模拟按下SHIFT键,&H2A是VK_SHIFT的扫描码
PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H1E0001 ' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_CONTROL, &H1D, KEYEVENTF_KEYUP, 0 ' 模拟抬起 SHIFT 键
End Sub
Sub ZuHe2(hWnd As Integer)
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H3E0001 Or &H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F4
End Sub
请高手帮忙补充成完整代码,先把手头的任务完成.
作者: falcon4585 发布时间: 2011-10-13
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const VK_CONTROL = &H11
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const KEYEVENTF_KEYUP = &H2
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Sub ZuHe1(Hwnd As Long)
keybd_event VK_CONTROL, &H1D, 0, 0 ' 模拟按下Ctrl键,&H2A是VK_SHIFT的扫描码
PostMessage Hwnd, WM_KEYDOWN, VK_A, &H1E0001 ' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage Hwnd, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_CONTROL, &H1D, KEYEVENTF_KEYUP, 0 ' 模拟抬起 Ctrl 键
End Sub
Sub ZuHe2(hWndMsg As Integer)
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H3E0001 Or &H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F4
End Sub
改了,能编译,但没用。怎么传递参数进来呢?
Private Const VK_CONTROL = &H11
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const KEYEVENTF_KEYUP = &H2
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Sub ZuHe1(Hwnd As Long)
keybd_event VK_CONTROL, &H1D, 0, 0 ' 模拟按下Ctrl键,&H2A是VK_SHIFT的扫描码
PostMessage Hwnd, WM_KEYDOWN, VK_A, &H1E0001 ' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage Hwnd, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_CONTROL, &H1D, KEYEVENTF_KEYUP, 0 ' 模拟抬起 Ctrl 键
End Sub
Sub ZuHe2(hWndMsg As Integer)
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H3E0001 Or &H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F4
End Sub
改了,能编译,但没用。怎么传递参数进来呢?
作者: falcon4585 发布时间: 2011-10-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28