Установка lpfnWndProc HWND из другого процесса

У меня есть главное приложение win32, которое порождает дочерний процесс.

На данный момент я использую CreateWindowEx для создания HWND в главном приложении с последующим порождением дочернего процесса. Затем дочерний процесс ищет HWND, используя FindWindow. Я хотел бы обработать сообщения Window (например, WM_SIZE, WM_SETFOCUS и т. Д.) Для этого HWND в дочернем процессе, поэтому я попытался установить атрибут GWLP_WNDPROC в дочернем процессе, но я получаю ошибку отказа в доступе, которая является разумной.

Вместо этого я думал о создании HWND непосредственно в дочернем процессе, но при щелчке по окну основное приложение теряет фокус, что неприемлемо для моего варианта использования.

У кого-нибудь есть предложения о том, что нужно сделать, чтобы сосредоточиться на основном приложении, в то время как дочерний процесс обрабатывает сообщения?

3

Решение

использование SetWindowsHookEx с одним из перехватчиков сообщений Windows (например, WH_CALLWNDPROC) перехватывать сообщения, идущие в другие окна, затем фильтровать по HWND рассматриваемого окна.

1

Другие решения

В вашем дочернем процессе вы можете вызвать ShowWindow с помощью WS_NOACTIVATE. При вызове функции CreateProcess вы можете указать STARTUPINFO следующим образом:

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

Вы даже можете явно вернуть фокус в своем дочернем приложении в главное окно.

Я полагаю, вы хотите иметь дизайн, подобный тому, что делает хром. Если вы внимательно посмотрите на их дизайн документов:

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

вы увидите, что они реализуют IPC между процессами, но у них нет единой функции обработки сообщений в основном процессе.

Последний совет — не связанный с вопросом — читайте задания под окнами — этот механизм позволяет более тщательно контролировать дочерние процессы.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector