LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
switch(ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
hInstance = (HINSTANCE)hModule;
SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,NULL);
//SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hInstance,NULL);
// SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle(NULL),NULL);
// Пробывал тремя разными способами.. ни один не прокатил.
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam) {
MessageBox(0, "called", 0, 0);
return 0;
}
Проблема с перехватом клавиатуры в чужом процессе
Написал вот такую простейшую DLL:
Код:
Далее через RemoteDLL подгружаю эту дллку к калькулятору:
В окне калькулятора жму на любые кнопки клавы и ничего не происходит.. вернее происходит - все нажатия обрабатывает сам калькулятор. Ну то есть при нажатиях, например, на цифры, он вводятся в поле ввода, и так далее.
Смотрю через olly, дллка успешно приаттачена:
Собственно вопрос, что я делаю не так? Почему нажатия не перехватываются?
Ой, не увидел.
А попробуй просто подменить подменить оконную процедуру калькулятора.
Еще посмотри что возвращает GetLastError()
Зачем аттачить DLL-ку через RemoteDLL это первое, и второе - далеко не все функции WinAPI дозволено выполнять в DllMain(). Также, ни в одном из вариантов не указывается ThreadId... Короче, слишком много несогласованностей.
Проблему так и не нашёл, реализовал задуманное через перехват обработчика сообщений главного окна.