如何在C ++中启动exe并获取用于发送消息的HWND(窗口句柄)

时间:2018-03-09 01:35:51

标签: c++ windows

我正在尝试启动一个程序,在这种情况下是OBS Studio,因此我可以通过编程方式发送键盘以启动/停止录制。但是,我需要sendInput方法的HWND: https://msdn.microsoft.com/en-us/library/ms646310.aspx

我认为这是最好的方法,我只需要将“shift + f1”发送给OBS。我认为获得它的最好方法是在C ++中启动OBS然后以某种方式获得它的HWND。但我似乎无法弄清楚这一点。有什么想法吗?

如果我们可以发送全局按键,它也会工作。无需将窗口置于前台。

1 个答案:

答案 0 :(得分:0)

假设您拥有衍生进程的进程ID,您可以通过遍历桌面下的所有窗口找到其顶级窗口:

DWORD dwProcessId, dwPid = 0;
HWND hWnd;

dwProcessId = ... // Spawn process and get its process ID

for (hWnd = ::FindWindowEx(NULL, NULL, NULL, NULL);
     hWnd != NULL;
     hWnd = ::FindWindowEx(NULL, hWnd , NULL, NULL)) {
    ::GetWindowThreadProcessId(hWnd, &dwPid);
    if (dwPid == dwProcessId) break;
}

_ASSERTE (hWnd != NULL);  // Or better do some error checking
// hWnd found, do whatever you need