代码之家  ›  专栏  ›  技术社区  ›  Ryan Kearney

PostMessage用于跨应用程序消息

  •  1
  • Ryan Kearney  · 技术社区  · 17 年前

    我想问的是,我有一个有效的hWnd,我如何使用PostMessage而不是SendMessage发送消息?

    这就是我想做的。

    HWND Target = FindWindow(0, "Window Title Goes Here");
    LPARAM lParam = (1 | (57<<16)); // OEM Code and Repeat for WM_KEYDOWN
    WPARAM wParam = VK_SPACE;
    PostMessage(HWND_BROADCAST, WM_KEYDOWN, wParam, lParam); // Works
    PostMessage(Target, WM_KEYDOWN, wParam, lParam); // Doesn't Work
    SendMessage(Target, WM_KEYDOWN, wParam, lParam); // Works, but I need Post
    
    3 回复  |  直到 17 年前
        1
  •  1
  •   Kirill V. Lyadvinsky    17 年前

    这 PostMessage WM_USER RegisterWindowMessage

        2
  •  0
  •   shf301    17 年前

    发送的消息和发布的消息采用完全不同的路由。Target正在接收您发布的消息,它只是过滤或将其发送到另一个窗口。它可以随心所欲地使用它。当你发送消息时,它直接进入窗口过程而不进行过滤,所以这很可能是导致该问题的原因。

    有一个Win32 API函数被设计为发送输入, 发送输入() ,就像用户按键一样将消息放置在输入队列中。但是,这不允许您指定窗口,它会将输入发送到活动窗口。要使用它,您必须激活并将焦点切换到Target,这意味着用户会看到该窗口移动到顶部(就像您对其进行Alt Tabbed一样)。沿着同样的路线,VBScript有一个 功能相同,但更易于使用。

    发送消息回调()

        3
  •  0
  •   SebSeb    12 年前

    *对于lpram,请点击此处 http://msdn.microsoft.com/en-us/library/ms646280%28v=vs.85%29.aspx

    试试这个:

    void SendString(HWND h, char *text)
    {
       int len = strlen(text);
       for(int i = 0; i < len; i++)
       PostMessage(h, WM_CHAR, text[i], 0);
    }
    
    
    
    HWND Target = FindWindow(0, "Window Title Goes Here");
    LPARAM lParam = //The hexadecimal value matching with the parameters you want* example 0x29A1. 
    WPARAM wParam = VK_SPACE;
    PostMessage(HWND_BROADCAST, WM_KEYDOWN, wParam, lParam); 
    PostMessage(Target, WM_KEYDOWN, wParam, lParam); 
    SendString(Target, (char*)"themessageyouwant\n");