| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Помогите разобраться с KeyboardHook |
| Автор: wesadex 11.11.2005, 11:46 |
| Пишу простейшую прогу - Калькулятор - но вылезла одна "веселая" заморочка: на компах, где будет он использоваться стоит PuntoSwitcher (автопереключатель раскладки клавы) и на кн. Break у него как раз забиндено переключение по дефолту, а я в свою очередь хочу использовать эту клавишу для сброса - удобнее так, да и нет других подходящих для этого клавиш рядом с цифровой клавиатурой... В результате получается дикое порно - при нажатии на Break результат на табло увеличивается по длине вдвое (множится), причем через раз... смысла описывать точно, что происходит нету, просто это глюк в прикладушке моей... и с ним надо бороться! Обчитался drkb на тему Hooks, но понял если честно слабо... попробовал локальный хук на клаву вешать - результат превзошел ожидание - пришлось тачку ребутить Reset'ом... Прошу помощи как мыслями на тему, так и по возможности кодом! Оговорюсь сразу - изменение HotKey'ев в PS недопустимо - бухгалтерши тады повесятся! Настройка исключений в PS на мою прикладушку тоже не решает проблемы... |
| Автор: Romikgy 11.11.2005, 12:56 |
| Мож воспользоватся GetKeyboardState, и вручную обрабатывать требуемую клавишу? |
| Автор: _hunter 11.11.2005, 13:38 |
| во-первых: почему бы не навесить сброс на Delete ( это IMHO логичнее ) во-вторых: почему бы не найти причину глюка? |
| Автор: wesadex 11.11.2005, 14:15 | ||
Romikgy, получилось, спасибо... вот решение:
2 _hunter: На Delete неудобнее, чем на Break (см. клаву). Причину глюка же искать не надо - она уже известна - так работает PuntoSwitcher. То есть на Брейке висит отмена сделанных им изменений и когда ты вводил допустим только цифири (на калькуляторе так и есть), он частенько возвращает то, что у него в буфере еще раз, хотя изменений не было! Всем спасибо за ответы! Так, замечательно, Брейк я поймал, теперь осталось не дать PS его получить... |
| Автор: Romikgy 14.11.2005, 10:50 |
| Дык обнуляй после своей ф-ции буфер клавы, по памяти вроде так Key:=#0; |