Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с KeyboardHook, или как обмануть PuntoSwitcher 
:(
    Опции темы
wesadex
Дата 11.11.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Пишу простейшую прогу - Калькулятор - но вылезла одна "веселая" заморочка: на компах, где будет он использоваться стоит PuntoSwitcher (автопереключатель раскладки клавы) и на кн. Break у него как раз забиндено переключение по дефолту, а я в свою очередь хочу использовать эту клавишу для сброса - удобнее так, да и нет других подходящих для этого клавиш рядом с цифровой клавиатурой... В результате получается дикое порно - при нажатии на Break результат на табло увеличивается по длине вдвое (множится), причем через раз... смысла описывать точно, что происходит нету, просто это глюк в прикладушке моей... и с ним надо бороться! Обчитался drkb на тему Hooks, но понял если честно слабо... попробовал локальный хук на клаву вешать - результат превзошел ожидание - пришлось тачку ребутить Reset'ом... Прошу помощи как мыслями на тему, так и по возможности кодом! smile
Оговорюсь сразу - изменение HotKey'ев в PS недопустимо - бухгалтерши тады повесятся! smile
Настройка исключений в PS на мою прикладушку тоже не решает проблемы... smile

Это сообщение отредактировал(а) wesadex - 11.11.2005, 12:26
PM MAIL   Вверх
Romikgy
Дата 11.11.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Мож воспользоватся GetKeyboardState, и вручную обрабатывать требуемую клавишу?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 11.11.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



во-первых: почему бы не навесить сброс на Delete ( это IMHO логичнее )
во-вторых: почему бы не найти причину глюка?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
wesadex
Дата 11.11.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 21.6.2005

Репутация: нет
Всего: нет



Romikgy, получилось, спасибо... вот решение:
Код

procedure TmainForm.LCDKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState); // LCD: TEdit;
var K:Char;
    State: TKeyboardState;
begin
   if not GetKeyboardState(State) then ShowMessage('Zhopa!') else
               begin
               if State[19]>127 then
                       begin
                       K:=#27; // Требуемые действа при нажатии на Break (VK_PAUSE)
                       LCDKeyPress(Sender, K); // они же 
                       end;
               end;
end;


2 _hunter:
На Delete неудобнее, чем на Break (см. клаву). Причину глюка же искать не надо - она уже известна - так работает PuntoSwitcher. То есть на Брейке висит отмена сделанных им изменений и когда ты вводил допустим только цифири (на калькуляторе так и есть), он частенько возвращает то, что у него в буфере еще раз, хотя изменений не было! smile

Всем спасибо за ответы! smile

Так, замечательно, Брейк я поймал, теперь осталось не дать PS его получить... smile

Это сообщение отредактировал(а) wesadex - 11.11.2005, 14:23
PM MAIL   Вверх
Romikgy
Дата 14.11.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Дык обнуляй после своей ф-ции буфер клавы, по памяти вроде так
Key:=#0;


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.