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

时间:2016-03-06 05:34:39

标签: c# sendkeys

我花了3天时间讨论这个话题。我发现的所有结果都使用“SetForeground”,然后使用SendMessage或一些API(keybd_event,kennedy(opensource)等)。当然,SendKeys不会将密钥发送到指定的进程,我想将密钥发送到我知道PID或HWND的指定进程。

我对它没有任何想法,是否可能? 如果没有,我宁愿用我无意的SetForeground实现。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我刚刚找到了解决方案。

我不知道标签概念。关键点是标签处理,是键处理的真正手柄。如果我使用主窗口句柄,它可以处理 WM_CLOSE WM_SETTEXT (也 SetWindowText(字符串))但不能 WM_KEYDOWN 。我想象了这个序列。

  1. 键盘笔划
  2. 句柄的关键事件(主窗口句柄)
  3. 句柄用VK _ *
  4. 给出收到的事件WM_KEYDOWN / WM_CHAR / WM_KEYUP

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

    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,我可以无需关注发送密钥。感谢。