У меня есть главное приложение win32, которое порождает дочерний процесс.
На данный момент я использую CreateWindowEx для создания HWND в главном приложении с последующим порождением дочернего процесса. Затем дочерний процесс ищет HWND, используя FindWindow. Я хотел бы обработать сообщения Window (например, WM_SIZE, WM_SETFOCUS и т. Д.) Для этого HWND в дочернем процессе, поэтому я попытался установить атрибут GWLP_WNDPROC в дочернем процессе, но я получаю ошибку отказа в доступе, которая является разумной.
Вместо этого я думал о создании HWND непосредственно в дочернем процессе, но при щелчке по окну основное приложение теряет фокус, что неприемлемо для моего варианта использования.
У кого-нибудь есть предложения о том, что нужно сделать, чтобы сосредоточиться на основном приложении, в то время как дочерний процесс обрабатывает сообщения?
использование SetWindowsHookEx
с одним из перехватчиков сообщений Windows (например, WH_CALLWNDPROC)
перехватывать сообщения, идущие в другие окна, затем фильтровать по HWND рассматриваемого окна.
В вашем дочернем процессе вы можете вызвать ShowWindow с помощью WS_NOACTIVATE. При вызове функции CreateProcess вы можете указать STARTUPINFO следующим образом:
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNOACTIVATE;
Вы даже можете явно вернуть фокус в своем дочернем приложении в главное окно.
Я полагаю, вы хотите иметь дизайн, подобный тому, что делает хром. Если вы внимательно посмотрите на их дизайн документов:
http://www.chromium.org/developers/design-documents/inter-process-communication
вы увидите, что они реализуют IPC между процессами, но у них нет единой функции обработки сообщений в основном процессе.
Последний совет — не связанный с вопросом — читайте задания под окнами — этот механизм позволяет более тщательно контролировать дочерние процессы.