有没有办法在没有焦点的情况下将密钥发送到其他应用程序?

Is there any way to send key(s) to other application without focus?

我在这个话题上花了 3 天时间。我找到的所有结果都使用 "SetForeground",然后使用 SendMessage 或某些 API(keybd_event、kennedy(开源)等)。当然,SendKeys不会向指定进程发送密钥,我想向我知道PID或HWND的指定进程发送密钥。

我不知道,这可能吗? 如果不是,我宁愿用我无意中的 SetForeground 来实现。

有什么想法吗?

我刚刚找到解决方案。

我不知道选项卡的概念。关键点是制表符句柄,真正的键处理句柄。如果我使用 main window 句柄,它可以处理 WM_CLOSE WM_SETTEXT (还有 SetWindowText(string)) 但不是 WM_KEYDOWN。我想象的顺序。

  1. 键盘行程
  2. 按键事件到句柄(主window句柄)
  3. 句柄给接收到的事件 WM_KEYDOWN / WM_CHAR / WM_KEYUP with VK_*

所以我必须先找到标签句柄。

int getTabHandle() {
    int hwnd = 0;
    hwnd = FindWindowEx(hwnd , 0, "iexplore.exe", null);
    hwnd = FindWindowEx(hwnd , 0, "IEFrame", null);
    hwnd = FindWindowEx(hwnd , 0, "Frame Tab", null);
    hwnd = FindWindowEx(hwnd , 0, "TabWindowClass", null);
    hwnd = FindWindowEx(hwnd , 0, "Shell DocObject View", null);
    hwnd = FindWindowEx(hwnd , 0, "Internet Explorer_Server", null);
    return hwnd;
}

有了这个hwnd,我可以在没有焦点的情况下发送密钥。谢谢