Если у вас есть HWND
для окна, которое обрабатывает сообщение, вы можете перехватывать его сообщения, выборочно не доставляя определенные сообщения в процедуру «реального» окна.
Например:
/* Get the current window proc for this hwnd. */
WNDPROC OldWindowProc = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_WNDPROC);
/* Set the window proc to your own override. */
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (ULONG_PTR)MyWindowProc);
Тогда внутри MyWindowProc
вы бы перехватили WM_KEYDOWN
. Для всех других сообщений (и для WM_KEYDOWN
s, которые вы хотите передать элементу управления), вы должны вызывать OldWindowProc
(процедура окна, к которой у вас нет источника) через CallWindowProc
.
Обновление: Не понял, что это EXE, который вы не можете изменить напрямую. Возможно, вам придется объединить эту технику с инъекцией DLL, упомянутой Маттео Может быть, вы можете внедрить свою DLL, получить HWND
через FindWindow
, а затем изменить процедуру окна, как я описал.