如何在 C 中启动 exe 并获取其 HWND(窗口句柄)以发送消息 | 珊瑚贝

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。编写一个给定 HWND 的 EnumWindowsProc 与存储的进程 ID 进行比较。使用您的回调函数调用 EnumWindows。
  • 嗯,SendInput 函数没有 HWND 参数。
  • 从操作系统的angular考虑。它如何知道哪个 HWND 是真正的应用程序(假设它首先具有 HWND),哪些是启动屏幕、EULA 对话框等?


假设你有衍生进程的进程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


来源:https://www.codenong.com/49185312/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?