![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перехватить нажатие с клавиатуры .... [D6, WinXP]
Suport1 © (2004-02-01 13:53:00)- очень просто перехватить - KeyDown
- просто перехватить HOOK
- А как перехватить так, что бы нажатие сначала полчила моя программа, бработала его, и если это не та клавиша, то отправила по первоначальному адресу ,,,
Suport1 (2004-02-02 20:48:00) [1]А че все знатоки разбежались ???
Люди подскажите как работать с низкоуровневым хуком клавиатуры, а то отказывается ...
AKul (2004-02-02 15:59:00) [2]
> Suport1 (02.02.04 14:42) [27]
> Т.к. Logitech использует глобальный низкоуровневый ....
Глобальный низкоуровневыйHook из уровня приложений???
Посмотри, какой Hook она ставит в DLL'ке LogitechHook.
Посмотри, что еще, кроме этой DLL она подгружает (может в этом дело? Трудно рассуждать, если нет возможности все это "пощупать").
Может воспользоваться тем, что она подгружает?
Например, если это действительно Hook, и он находится в LogitechHook, то загружать эту DLL в свой процесс, вызвать процедуру установки Hook'а (из DLL) с HANDLE'ом своей программы и получать сообщенияо нажатии спецклавиш от этого Hook'а в свою программу, формат которых придется узнавать. А может и не так, смотря какой алгоритм там реализован.
Если твой Hook срабатывает при выгруженной Logitech, то стоит ли ее вообще использовать (может что-то свое написать?).
В конце-концов, может дизассемблер поможет?
Suport1 (2004-02-02 14:42:00) [3]Вот и фиг ... - и так и так ничего ...
Т.к. Logitech использует глобальный низкоуровневый ....
Suport1 (2004-02-02 14:40:00) [4]Наоборот позже, ведь обработка очереди с конца ...
AKul (2004-02-02 14:30:00) [5]
> Suport1 (02.02.04 13:27) [23]
> то в моей проге коды нажатых клавиш не отображаются, а если
> закрываю прогу Logitech, то все ОК ...
Ну так наверное ж Hook программы Logitech вызывается раньшеHook'а в твоей программе.
Вот Logitech в своем Hook'е все "лишнее" и обрезает.
Если Logitech точноиспользует Hook, и он точно такой же, как у тебя в программе, то запускай свою программу до загрузки Logitech.
Suport1 (2004-02-02 14:00:00) [6]Типа мастера разбрелись пить чай что ли ??? Иль не знають ???
Suport1 (2004-02-02 13:27:00) [7]- щас кой че выяснил - значит Logitech работает с хуком клавы ..., если я ставлю свою ловушку, то в моей проге коды нажатых клавиш не отображаются, а если закрываю прогу Logitech , то все ОК ...
Suport1 (2004-02-02 12:43:00) [8]MSG *pMsg = (MSG*)lParam;
if ( pMsg->message == ????? )
{
// удаляем
pMsg->message = WM_NULL; // есть такое. // нифига не делает
}
Вот какое решение Сиьшники подсказали ...
Как тока это в Дельфу перевести
Suport1 (2004-02-02 12:34:00) [9]А может воспользоваться низкоуровневым хуком ....
Тока в ХР там не WH_Keyboard_LL , а LL на что-то надо заменить ...
Что ваще может дать низкоуровневый хук ???
Suport1 (2004-02-02 12:30:00) [10]Ну в папке с программой лежит DLL'ка с именемчто-то типа LogitechKeyHook или LogitechHook ////
Digitman (2004-02-02 12:28:00) [11]
> Suport1
глоб.хук предназначен для внедрения только в GUI-приложения
Digitman (2004-02-02 12:27:00) [12]
> Suport1 (02.02.04 12:06) [17]
с чего ты взял ? приведи аргументы ...
Suport1 (2004-02-02 12:06:00) [13]Ну а почему же тогда Logitech , тоже использует глобальный хук для обработки своих мультимедийных клавиш....
Digitman (2004-02-02 11:43:00) [14]
> Suport1
хуки тебе здесь вообще не помогут
обработка событий клавиатуры идет на уровне драйвера режима ядра
и события клавиатуры - не тоже самое, что и "сообщение системы о событиях клавиатуры"
Suport1 (2004-02-02 11:31:00) [15]Самое интересное, что на мою клаву Noname нет драйвера и ХР определяет ее как microsoft Natural Keyboard ...
Suport1 (2004-02-02 11:08:00) [16]А код библиотеки не влезает ... если надо могу послать на мыло ...
Не пойму как Win ловит нажатия ..., ничего не помогает...
Полазил по конфе нашел вот что...
Такая же проблема и люди предлагали сделать так
"MSG^.message:=WM_NULL;" может это хакерский приемчик, но он не прокатывает, если вы знаете как его правильноиспользовать - спасибо
Suport1 (2004-02-02 10:47:00) [17]Воо - точно , спасибо ... а то в ночь мысли не лезли
TUser (2004-02-02 10:03:00) [18]Я честно говоря, не знал про [10] - просто писал CallNextHookEx, ибо сказано было мне так во всяких книжках, статьях, факах и примерах. Но если оно действительно в 2000 не нужно, тогда, я бы сначала попробовал изменять wParam перед вызовом след. ловушки. Пусть думает, что нажато что-то совсем другое.
Suport1 (2004-02-01 23:49:00) [19]Вся предыстория ...
Есть у меня клава - мультимедийная ..., но вот только обработка мультимедийных клавиш китайцы написали по своему и если установить родную программу, то основная часть клавы не работает нормально ...
Вот я и решил написать программульку, которая будет ловить нужный мне код клавиши и в зависимости от установок совершать действие ...
Долго я учался с хуками и к чему пришел ... - если результат хуканья не навен 0, то сообщение не передается другим хукам !!, в этом то и загвоздка, что именно хукам ...
А винда ХР как-то сама поняла, и 3 клавиши работают - запускают бровзер, почтовый клиент, включают Mute в колонках ...
А я хочу в своей программе, чтобы вместо бровзера можно было другую программу запустить, а винда как-то отлавливает это нажатие и я не знаю что же сделать ...
Suport1 (2004-02-01 18:42:00) [20]А не все так просто ... Это в 9х можно было просто убрать CallNextHookEx и жить спокойно, а еще в 2000 они изменили принцип работы, который по наследству ХР и достался ..., там не надо использовать CallNextHookEx ибо система сама это делает ...
То есть сама передает сообщение дальше по потоку, а как же ей подрезать крылушки ???
Мне обязательно нужно, чтобы сначала только моя прога получила сообщение, а потом уже она решила надо или нет пускать его дальше ....