RT:
例如,我要向XXXX窗口发送一个“1”的按键指令。如何实现?
     当这个窗口不管打开或最小化时,这个指令都是有效的。

解决方案 »

  1.   

    Call keybd_event(49, 0, 0, 0)   '模拟按下"1"键怎么把这个弄到指定窗口呢?这就是我问的重点。
      

  2.   


    Option ExplicitPrivate Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101Private Sub Command1_Click()
      PostMessage Text1.hwnd, WM_KEYDOWN, vbKey1, 0  '将Text1.Hwnd 改为 你要发送信息窗口的句柄.
    End Sub
      

  3.   


    Option ExplicitPrivate 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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101Private Sub Command1_Click()
      Dim cHwnd As Long
      cHwnd = FindWindow(vbNullString, "fdsfds")  '将 "fdsfds" 改为你要发送信息去的窗口的名称. 
      
      If cHwnd <> 0 Then
        PostMessage cHwnd, WM_KEYDOWN, vbKey1, 0
      End If
    End Sub
      

  4.   

    Private Sub Form_Load()
    hwd = FindWindow(vbNullString, "QQ华夏")
    If hwd = 0 Then
       MsgBox "您还没启动英雄岛游戏 ~_~ ", vbOKOnly, "提示!"
       Unload Form1
    End If
    GetWindowThreadProcessId hwd, pid   '获取进程标识符
    '将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后
    '即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)
    If hProcess = 0 Then
       MsgBox "很遗憾!未能成功载入进程 ^_^ ", vbOKOnly, "提示!"
       Unload Form1
    End IfCloseHandle hProcess
    End SubPrivate Sub Timer2_Timer()
    PostMessage hProcess.hwnd, WM_KEYDOWN, vbKey1, 0Call keybd_event(49, 0, 0, 0)
     '模拟按下"1"键
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    '这里是 鼠标左键按下 和松开两个事件的组合即一次单击End Sub
    可老错,说什么无效限定值
      

  5.   

    对窗口发送1 就是:PostMessage hwd, WM_KEYDOWN, vbKey1, 0 
      

  6.   

    噢,明白了,那为什么鼠标的就不行了? 
    PostMessage hwd, MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0  '这里是 鼠标左键按下 和松开两个事件的组合即一次单击 
      

  7.   

    WM_LBUTTONDOWN 
    WM_LBUTTONUP才对吧...你那个MOUSEEVENT 实际上是一种模拟动作---- 和你手工操作差不多... 消息要用WM_LBUTTONDOWN 
    WM_LBUTTONUP你自己摸索去吧... 
      

  8.   

    Private Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101
    Private Const WM_LBUTTONDOWN = &H201
    Private Const WM_LBUTTONUP = &H202
    Private Sub Timer2_Timer()
    PostMessage hwd, WM_KEYDOWN, vbKey1, 0
    PostMessage hwd, WM_LBUTTONDOWN, 0, 0
    PostMessage hwd, WM_LBUTTONUP, 0, 0
    End Sub老大们看下,为何不执行鼠标的动作呀
      

  9.   

      PostMessage  Hwnd,  WM_LBUTTONDOWN,  MK_LBUTTON, y*2^16+x    '设置鼠标位置                                'MAKELONG(X,Y)-把两个16位的数变成32位的数位运算Y左移16位 +X        接分押宝很失望 输光了
      

  10.   

    PostMessage hwd, WM_KEYDOWN, vbKey1, 0 
    PostMessage  Hwnd,  WM_LBUTTONDOWN,  MK_LBUTTON, y*2^16+x
    PostMessage  Hwnd,  WM_LBUTTONUP,  MK_LBUTTON, y*2^16+x