3

我有一个生成子进程的 win32 主应用程序。

目前我使用 CreateWindowEx 在主应用程序中创建一个 HWND,然后生成一个子进程。然后子进程使用 FindWindow 查找 HWND。我想在子进程中处理此 HWND 的 Window 消息(例如 WM_SIZE、WM_SETFOCUS 等),因此我尝试在子进程中设置 GWLP_WNDPROC 属性,但出现访问被拒绝错误,这是合理的。

我考虑直接在子进程中创建一个 HWND,但是当单击窗口时,主应用程序失去焦点,这对我的用例来说是不可接受的。

有没有人建议如何在让子进程处理消息的同时将注意力集中在主应用程序上?

4

2 回答 2

1

在您的子进程中,您可以使用 WS_NOACTIVATE 调用 ShowWindow。调用 CreateProcess 函数时,您可以指定 STARTUPINFO,如下所示:

si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNOACTIVATE;

您甚至可以将子应用程序中的焦点显式返回给主窗口。

我想你想要有与铬类似的设计。如果您仔细查看他们的设计文档:

http://www.chromium.org/developers/design-documents/inter-process-communication

您会看到它们确实在进程之间实现了 IPC,但它们在主进程中没有单一的消息处理功能。

作为最后一个提示 - 与问题无关,在 windows 下阅读作业 - 这种机制允许对子进程进行更密切的控制。

于 2012-11-07T16:17:03.267 回答
1

SetWindowsHookEx与其中一个窗口消息挂钩一起使用(例如WH_CALLWNDPROC),拦截发送到其他窗口的消息,然后按相关窗口的 HWND 进行过滤。

于 2012-11-07T15:40:58.197 回答