Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с перехватом клавиатуры в чужом процессе

318
22 сентября 2010 года
nof
193 / / 03.04.2006
Ребят, появилась неожиданная проблема.. Пытаюсь написать дллку, которая бы внедрившись в процесс, перехватывала бы WM_KEYDOWN (т.е. нажатия на клавишы клавиатуры). Для примера я взял программу calc.exe (калькулятор).
Написал вот такую простейшую DLL:

Код:
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;
}


Далее через RemoteDLL подгружаю эту дллку к калькулятору:



В окне калькулятора жму на любые кнопки клавы и ничего не происходит.. вернее происходит - все нажатия обрабатывает сам калькулятор. Ну то есть при нажатиях, например, на цифры, он вводятся в поле ввода, и так далее.
Смотрю через olly, дллка успешно приаттачена:



Собственно вопрос, что я делаю не так? Почему нажатия не перехватываются?
3.7K
22 сентября 2010 года
0nni
326 / / 24.06.2008
[COLOR="Gray"]А ты DllProc обрабатываешь?[/COLOR]
Ой, не увидел.
А попробуй просто подменить подменить оконную процедуру калькулятора.

Еще посмотри что возвращает GetLastError()
14
23 сентября 2010 года
Phodopus
3.3K / / 19.06.2008
Зачем аттачить DLL-ку через RemoteDLL это первое, и второе - далеко не все функции WinAPI дозволено выполнять в DllMain(). Также, ни в одном из вариантов не указывается ThreadId... Короче, слишком много несогласованностей.
318
23 сентября 2010 года
nof
193 / / 03.04.2006
Проблему так и не нашёл, реализовал задуманное через перехват обработчика сообщений главного окна.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог