How to start an exe in C++ and get its HWND (window handle) for sending messages
我正在尝试启动一个程序,在本例中为 OBS Studio,因此我可以以编程方式向它发送按键以开始/停止录制。但是,我需要 sendInput 方法的 HWND:
https://msdn.microsoft.com/en-us/library/ms646310.aspx
我认为这是最好的方法,我只需要将"shift f1"之类的内容发送到 OBS。我认为获得它的最佳方法是在 C 中启动 OBS,然后以某种方式获取它的 HWND。但我似乎无法弄清楚。有什么想法吗?
如果我们可以发送一个全局按键,它也可以工作。无需将窗口置于前台。
假设你有衍生进程的进程ID,你可以通过遍历桌面下的所有窗口找到它的顶层窗口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |