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

Ваш аккаунт

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

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

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

Проблема с SetWindowsHookEx

4.4K
03 декабря 2006 года
erzik
47 / / 08.04.2006
Здравствуйте. Написал тут код и не могу понять, в чем проблема.

Код:
HANDLE hWnd;
hWnd = GetForegroundWindow();
char szTitle[41] = {0};
GetWindowText(hWnd,szTitle,40);
//Memo1->Lines->Add((int)GetCurrentThreadId());  
//Memo1->Lines->Add((int)GetWindowThreadProcessId(hWnd,NULL));
if(LastId!=(int)GetWindowThreadProcessId(hWnd,NULL)){
        //Memo1->Lines->Add(">>>change");    
        LastId = (int)GetWindowThreadProcessId(hWnd,NULL);
        UnhookWindowsHookEx(hook);
        hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)GetSymbol, NULL, LastId);
}


Функция GetSymbol находится в программе (не в ДЛЛ). Вообще программа должна при смене активного окна снимать старый хук и устанавливать его на новое окно, но на деле все подругому. Если убрать комментарии, то можно увидеть, что программа просматривает номер ID активного окна и меняет(!) хук, но работает он только с окном программы несмотря на установку на другое окно.
Почему? Можно ли это как-то исправить или кроме ДЛЛ вариантов нет. (задумывался кейлогер на все окна, но без ДЛЛ)
Если что, сижу под WinXP.
334
03 декабря 2006 года
HexEdit
809 / / 27.07.2006
Попробуй:
 
Код:
hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)GetSymbol, GetmoduleHandle(NULL), LastId);
4.4K
03 декабря 2006 года
erzik
47 / / 08.04.2006
Цитата:

hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)GetSymbol, GetmoduleHandle(NULL), LastId);



Теперь при нажатии клавиши в другой программе (пробовал с блокнотом) эта программа закрывается :)
(В обработке нажатия клавиши стоит ShowMessage((int)wParam); )

3.7K
04 декабря 2006 года
_lobster_
115 / / 10.04.2005
Цитата: erzik

Можно ли это как-то исправить или кроме ДЛЛ вариантов нет.

Больше вариантов нет, т.к. при установке хука винда внедряет длл
в адресное пространсвто того процесса, которому приндалежит окно. Т.е. обработчик должен находится не в твоей программе.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог