Я хочу изменить обработчик сообщений для старого старого приложения, которое мы используем, но у вас больше нет источника. В dll, что у нас есть источник, я хочу перехватить оконные сообщения, а затем передать их в приложение. Это возможно? Я пробовал что-то вроде:Как зарегистрировать другой обработчик сообщения win32
WNDPROC lpfnWndProc = NULL;
void GetHandler()
{
HINSTANCE hInstance = GetModuleHandle(NULL);
HWND hWnd = GetActiveWindow();
WCHAR lpClassName[1024];
GetClassName(hWnd,lpClassName,1024);
WNDCLASSEX wc;
GetClassInfoEx(hInstance, lpClassName, &wc);
lpfnWndProc = wc.lpfnWndProc;
wc.lpfnWndProc = NewMessageProc;
RegisterClassEx(&wc);
}
Однако GetActiveWindow не удается и просто возвращает NULL. Есть ли более простой способ сделать это. Infact Я был бы счастлив, если бы мог просто добавить другого обработчика сообщений.
Важный вопрос: ваша DLL загружена в адресное пространство старого приложения? Если answser НЕТ, вы должны начать с адресации (с помощью DLL-инъекции, возможно, через Hooking). Если answser да, можете ли вы сделать свой DLL-код в том же потоке, что и окно, которое вы хотите подкласса ?. Если ДА, используйте SetWindowSubclass, если NOT, используйте перехват сообщения для перехода в хороший поток, а затем в SubClass. – manuell
@manuell Вы не можете выполнить код .dll ** без ** загрузки его в адресное пространство приложения. Ваш вопрос - как указано - не имеет смысла. – IInspectable
@IInspectable Я просто спрашивал, была ли DLL загружена в том же процессе, что и тот, который размещает окно для подкласса. В чем проблема? – manuell