有没有办法在没有焦点的情况下将密钥发送到其他应用程序?
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。我想象的顺序。
- 键盘行程
- 按键事件到句柄(主window句柄)
- 句柄给接收到的事件 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,我可以在没有焦点的情况下发送密钥。谢谢
我在这个话题上花了 3 天时间。我找到的所有结果都使用 "SetForeground",然后使用 SendMessage 或某些 API(keybd_event、kennedy(开源)等)。当然,SendKeys不会向指定进程发送密钥,我想向我知道PID或HWND的指定进程发送密钥。
我不知道,这可能吗? 如果不是,我宁愿用我无意中的 SetForeground 来实现。
有什么想法吗?
我刚刚找到解决方案。
我不知道选项卡的概念。关键点是制表符句柄,真正的键处理句柄。如果我使用 main window 句柄,它可以处理 WM_CLOSE WM_SETTEXT (还有 SetWindowText(string)) 但不是 WM_KEYDOWN。我想象的顺序。
- 键盘行程
- 按键事件到句柄(主window句柄)
- 句柄给接收到的事件 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,我可以在没有焦点的情况下发送密钥。谢谢