Как зафиксировать нажатие любой кнопки?

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Всем привет! Порыл ща на форуме похожие темы, все не то что надо. Нужна функция которая крикнет что по клаве стукнули ) Т.е мне не нужно регистрировать нажатие какой-то клавиши, и не важно какая именно клавиша была нажата, мне нужно зафиксировать факт нажатия любой кнопки на клаве....

GetAsyncKeyState
keybd_event

Эти функции, как я понял, ожидают нажатие заведомо указанной кнопки.... а это не то что мне нужно...

Заранее благодарен ))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

onkeydown - событие случается при нажатии кнопки..
[syntax=Delphi] [/syntax]
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Duncon писал(а):onkeydown - событие случается при нажатии кнопки..
Это я вкурсе )))) Это событие у какого либо объекта моей программы, а вот в системе как? Т.е прога у меня работает в фоновом режиме...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Орлик. Секроеты Delphi.
Прочитай там о ловушках, может быть поможет.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Так бы и написал. Хук в систему вешать нужно..
[syntax=Delphi] [/syntax]
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Duncon писал(а):Так бы и написал. Хук в систему вешать нужно..
SetWindowsHookEx
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

То что хук, понятно и без темы. Но я сам не знаю, как его делать, знаю только, где искать инфу о том, как его делать. Вот я и дал тебе такую ссылку. Знал бы сам, отвтил бы конкретнее.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Спасибо! Вот только ни разу не пользовался этой функцией - почитал хелп и не до конца соображу какие параметры она просит.

SetWindowsHookEx(WH_KEYBOARD,...,...,...);

Функцию нужно повесит на таймер? И проверять равен ли результат 0?

If SetWindowsHookEx(WH_KEYBOARD,...,...,...)<>0 then
SHowMessage('Клава сработала');

Что-то в этом духе?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

Таймер здесь вообще не причём. Функцию надо пихнуть в дллку. А подробнее читай у тех, кто знает лучше меня.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Dr_Grizzly, если коротко, то при вызове SetWindowsHookEx одним из параметров указывается адрес твоей callback-процедуры. Когда событие слуается, Windows вызывает эту процедуру. Т.е. самому проверять ничего не надо - "за вами придут" :)

Есть тонкость, что, как отметил atavin-ta, эту функцию данном слуае обязательно надо вынести в DLL.
Ответить