搞一个窗口未获得焦点也能自动填写文本的辅助程序,碰到了模拟组合键无效的难题,比如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 SubSub 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请高手帮忙补充成完整代码,先把手头的任务完成.

解决方案 »

  1.   

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

  2.   

    问题解决了,VK_A和VK_F4要重新赋值才有效,不知道什么原因。