+ -
当前位置:首页 → 问答吧 → 用VB写dll,遇到的问题

用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

请高手帮忙补充成完整代码,先把手头的任务完成.

作者: 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
改了,能编译,但没用。怎么传递参数进来呢?

作者: falcon4585   发布时间: 2011-10-13

热门下载

更多