Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Как перехватить нажатие с клавиатуры ....   Найти похожие ветки 

 
Suport1   (2004-02-01 13:53) [0]

- очень просто перехватить - KeyDown
- просто перехватить HOOK
- А как перехватить так, что бы нажатие сначала полчила моя программа, бработала его, и если это не та клавиша, то отправила по первоначальному адресу ,,,


 
}{enon ©   (2004-02-01 14:07) [1]

Поставить глобальный hook и "забыть" передать сообщение следующей ловушке.


 
Suport1   (2004-02-01 14:13) [2]

А это как - плиз по подробнее...
Как забыть???


 
Palladin ©   (2004-02-01 14:21) [3]

"забыть" - значит не передать следующему хуку...


 
Suport1   (2004-02-01 14:21) [4]

И еще как сделать Хук глобальным, а то я в Апях - как в трех соснах ...


 
Suport1   (2004-02-01 14:25) [5]

Palladin А як же ш это сделать ???? плиз напиши ...


 
Palladin ©   (2004-02-01 14:29) [6]

ну что вам еще статьи теперь искать?
http://www.delphimaster.ru/articles/hooks/index.html


 
Suport1   (2004-02-01 14:31) [7]

Удалено модератором


 
Suport1   (2004-02-01 15:43) [8]

Господа, спасибо - интересный и хороший материал, но я в нем не нашел строк, вещающих о том как не передать сообщение следующему хуку, я постраюсь еще раз поискать и перечитать статью, но буду благодарен, за своевременную помощь


 
Suport1   (2004-02-01 16:23) [9]

Если я все правильно понял, то передачей сообщения следующему хуку занимается CallNextHookEx, так вот в библиотеке SendKey я закоментировал CallNextHookEx - для проверки ... - сообщение передается дальше ...
Или я не так что-то понял


 
Suport1   (2004-02-01 18:42) [10]

А не все так просто ... Это в 9х можно было просто убрать CallNextHookEx и жить спокойно, а еще в 2000 они изменили принцип работы, который по наследству ХР и достался ..., там не надо использовать CallNextHookEx ибо система сама это делает ...
То есть сама передает сообщение дальше по потоку, а как же ей подрезать крылушки ???
Мне обязательно нужно, чтобы сначала только моя прога получила сообщение, а потом уже она решила надо или нет пускать его дальше ....


 
Suport1   (2004-02-01 23:49) [11]

Вся предыстория ...
Есть у меня клава - мультимедийная ..., но вот только обработка мультимедийных клавиш китайцы написали по своему и если установить родную программу, то основная часть клавы не работает нормально ...

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

Долго я учался с хуками и к чему пришел ... - если результат хуканья не навен 0, то сообщение не передается другим хукам !!, в этом то и загвоздка, что именно хукам ...
А винда ХР как-то сама поняла, и 3 клавиши работают - запускают бровзер, почтовый клиент, включают Mute в колонках ...
А я хочу в своей программе, чтобы вместо бровзера можно было другую программу запустить, а винда как-то отлавливает это нажатие и я не знаю что же сделать ...


 
TUser ©   (2004-02-02 10:03) [12]

Я честно говоря, не знал про [10] - просто писал CallNextHookEx, ибо сказано было мне так во всяких книжках, статьях, факах и примерах. Но если оно действительно в 2000 не нужно, тогда, я бы сначала попробовал изменять wParam перед вызовом след. ловушки. Пусть думает, что нажато что-то совсем другое.


 
Suport1   (2004-02-02 10:47) [13]

Воо - точно , спасибо ... а то в ночь мысли не лезли


 
Suport1   (2004-02-02 11:08) [14]

А код библиотеки не влезает ... если надо могу послать на мыло ...

Не пойму как Win ловит нажатия ..., ничего не помогает...
Полазил по конфе нашел вот что...
Такая же проблема и люди предлагали сделать так
"MSG^.message:=WM_NULL;" может это хакерский приемчик, но он не прокатывает, если вы знаете как его правильноиспользовать - спасибо


 
Suport1   (2004-02-02 11:31) [15]

Самое интересное, что на мою клаву Noname нет драйвера и ХР определяет ее как microsoft Natural Keyboard ...


 
Digitman ©   (2004-02-02 11:43) [16]


> Suport1


хуки тебе здесь вообще не помогут
обработка событий клавиатуры идет на уровне драйвера режима ядра

и события клавиатуры - не тоже самое, что и "сообщение системы о событиях клавиатуры"


 
Suport1   (2004-02-02 12:06) [17]

Ну а почему же тогда Logitech , тоже использует глобальный хук для обработки своих мультимедийных клавиш....


 
Digitman ©   (2004-02-02 12:27) [18]


> Suport1   (02.02.04 12:06) [17]


с чего ты взял ? приведи аргументы ...


 
Digitman ©   (2004-02-02 12:28) [19]


> Suport1


глоб.хук предназначен для внедрения только в GUI-приложения


 
Suport1   (2004-02-02 12:30) [20]

Ну в папке с программой лежит DLL"ка с именемчто-то типа LogitechKeyHook или LogitechHook ////


 
Suport1   (2004-02-02 12:34) [21]

А может воспользоваться низкоуровневым хуком ....
Тока в ХР там не WH_Keyboard_LL , а LL на что-то надо заменить ...

Что ваще может дать низкоуровневый хук ???


 
Suport1   (2004-02-02 12:43) [22]

MSG *pMsg = (MSG*)lParam;
if ( pMsg->message == ????? )
{
    // удаляем
    pMsg->message = WM_NULL; // есть такое.      // нифига не делает
}

Вот какое решение Сиьшники подсказали ...
Как тока это в Дельфу перевести


 
Suport1   (2004-02-02 13:27) [23]

- щас кой че выяснил - значит Logitech работает с хуком клавы ..., если я ставлю свою ловушку, то в моей проге коды нажатых клавиш не отображаются, а если закрываю прогу Logitech , то все ОК ...


 
Suport1   (2004-02-02 14:00) [24]

Типа мастера разбрелись пить чай что ли ??? Иль не знають ???


 
AKul ©   (2004-02-02 14:30) [25]


> Suport1   (02.02.04 13:27) [23]
> то в моей проге коды нажатых клавиш не отображаются, а если
> закрываю прогу Logitech, то все ОК ...

Ну так наверное ж  Hook  программы Logitech вызывается раньше Hook"а в твоей программе.
Вот Logitech в своем Hook"е все "лишнее" и обрезает.
Если Logitech точно использует Hook, и он точно такой же, как у тебя в программе, то запускай свою программу до загрузки  Logitech.


 
Suport1   (2004-02-02 14:40) [26]

Наоборот позже, ведь обработка очереди с конца ...


 
Suport1   (2004-02-02 14:42) [27]

Вот и фиг ... - и так и так ничего ...
Т.к. Logitech использует глобальный низкоуровневый ....


 
AKul ©   (2004-02-02 15:59) [28]


> 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 20:48) [29]

А че все знатоки разбежались ???

Люди подскажите как работать с низкоуровневым хуком клавиатуры, а то отказывается ...



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.045 c
1-1080175040
LoMaster
2004-03-25 03:37
2004.04.11
программа, удаляющая сама себя


1-1082399221
Kemik
2004-04-19 22:27
2004.04.11
Создание нового компонента.


1-1082562444
ламеррр
2004-04-21 19:47
2004.04.11
как отменить with


9-1065042709
Balepa
2003-10-02 01:11
2004.04.11
Установка DelphiX (Delphi 7)


6-1079344815
Max_Ivanych
2004-03-15 13:00
2004.04.11
SMTP-клиент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский