21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

перехват клавиш (хуки)

30.01.2011, 13:41. Показов 1479. Ответов 0
Метки нет (Все метки)

Читаю книжку Румянцева "Азбука программирования". Он привёл пример как сделать хук WH_CALLWNDPROC, я попробовал его переделать под перехват клавиш, только у меня возникают ошибки во время выпроления.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{/*если (nCode==HC_ACTION) то процедура хука должна обрабатывать сообщение
 в противном случае мы должны передать сообщение на обработку следующему хуку в цепочке
 при помощи вызова функции CallNextHookEx() и вернуть значение, возвращаемое этой функцией
 
 если второй аргумент не равен нулю, то сообщение послано текущим процессом
 
 наибольшие интерес представляет третий аргумент, которой является структурой typedef struct tagCWPSTRUCT,
 в которой есть поля
 LPARAM lParam;
 WPARAM wParam;
 UINT message;
 HWND hwnd;
 
 первое поле lPAram перехватываемого сообщения, второе поле- wParam перехватываемого сообщения
 третье поле - номер сообщения
 четвёртое - хэндл окна, которому послано сообщение
 */
    char cBuffer[0x80];
    DWORD dwNumberOfBytesWritten;
 
    if (nCode < 0)
        return CallNextHookEx(hHook, nCode, wParam, lParam);
    else
        if(nCode == HC_ACTION)//если первый аргумент принимает значение HC_ACTION, то процедура хука должна обрабатывать сообщение
        {
            //записываем в файл информацию о сообщении
            sprintf(cBuffer, "nCode - %08x", nCode);
            WriteFile(hFile, cBuffer, 17, &dwNumberOfBytesWritten, NULL);
            sprintf(cBuffer, "wParam - %08x\n", wParam);
            WriteFile(hFile, cBuffer, 19, &dwNumberOfBytesWritten, NULL);
            sprintf(cBuffer, "PCWPSTRUCT->wParam - %08x\n", ((PCWPSTRUCT)lParam)->lParam);
            WriteFile(hFile, cBuffer, 31, &dwNumberOfBytesWritten, NULL);
            sprintf(cBuffer, "PCWPSTRUCT->wParam - %08x\n", ((PCWPSTRUCT)lParam)->wParam);
            WriteFile(hFile, cBuffer, 31, &dwNumberOfBytesWritten, NULL);
            sprintf(cBuffer, "PCWPSTRUCT->message - %08x\n", ((PCWPSTRUCT)lParam)->message);
            WriteFile(hFile, cBuffer, 32, &dwNumberOfBytesWritten, NULL);
            sprintf(cBuffer, "PCWPSTRUCT->hWnd - %08x\n", ((PCWPSTRUCT)lParam)->hwnd);
            WriteFile(hFile, cBuffer, 29, &dwNumberOfBytesWritten, NULL);
            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }
 
 
}
ошибка возникает вот на этом месте:
sprintf(cBuffer, "PCWPSTRUCT->wParam - %08x\n", ((PCWPSTRUCT)lParam)->lParam);
Честно говоря, я особо не понял приведение типа последнего аргумента как это происходит. Как может быть преобразован тип LPARAM к типу структуры.
Подскажите кто что знает плиз
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2011, 13:41
Ответы с готовыми решениями:

Реализовать перехват событий клавиатуры (хуки)
Здравствуйте Уважаемые форумчане.Несколько дней бьюсь с проблемой,и решил попросить Вас помочь с ее...

Перехват нажатия клавиш
Почему при нажатии на любую клавишу, выдаёт 2 MessageDox'a? Как я понимаю значит функция...

Перехват нажатия клавиш в Edit Control WinApi
Добрый вечер! Помогите пожалуйста решить проблему! У меня есть диалоговое окно на нем Edit...

Перехват нажатий клавиш только с определенных программ
Мне нужно сделать перехват клавиш только с определенных программ. В голове вертятся два способа,...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2011, 13:41

Перехват нажатие клавиш и ввод текста в любой редактор
Мне нужна программка которая при вводе определенного сочетания клавиш, вводила бы дату в любое...

Перехват нажатия клавиш сторонней программы и отсылка сочетания ей
В фотошопе нельзя установить выполнение скрипта на сочетание клавиши, а скрипт повесить очень...

Хуки
Добрый день! Не могу найти нормальной инфы про хуки. Совершенно ничего, только громоздкие примеры...

Хуки
Доброго времени суток. Господа, объясните мне темному и недалекому как использовать хуки. Вроде бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru