Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.11.2010, 11:02
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию Key Hook

Доброе время суток всем!!!! Создал хук клавы....все работает, решил приспособить его в комбинации клавиш....вот проца обработки нажатия кнопки клавиатуры из DLL:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function KeyMsgProc(Code: integer; wParam: word;
                     lParam: LongInt): LongInt; stdcall;
   var kn: array[0..50] of Char;
  begin
   GetKeyNameText(lParam, kn, SizeOf(kn));
   CurrKey:= StrPas(kn);
 
   if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) and
      (Pos(CurrKey, ShortC) = 0) then
    begin
     ShortC:= ShortC + CurrKey + '+';
     KeyUpped:= false;
//     MessageBox(0, PChar('---' + ShortC + '---'), PChar(''), MB_OK);
    end
   else
    if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = KF_UP) and
        not KeyUpped then
     begin
      if ShortC[Length(ShortC)] = '+' then Delete(ShortC, Length(ShortC), 1);
      MessageBox(0, PChar('---' + ShortC + '---'), PChar(''), MB_OK);
      KeyUpped:= true;
 
      CurrKey:= '';
      ShortC:= '';
     end;
   Result:= CallNextHookEx(KHook, Code, wParam, lParam);
  end;

Так вот проблема в том что при нажатии, к примеру, "Alt + 0" он почему-то 2 раза выводит сообщение "---Alt + 0---", хотя по идее должна 1 раз выводить........почему тада 2 раза?
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #2  
Старый 11.11.2010, 14:20
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

1 раз приходит сообщение об нажатии клавиш, 2 раз - об "отпускании"...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 11.11.2010, 14:52
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Код:
1
2
if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) and
      (Pos(CurrKey, ShortC) = 0) then
Вот это условие перехватывает именно нажатую кнопку.....и там показа сообщения нет!!!! Тем более я заметил что если нажать комбинацию из n-кнопок, то при нажатии сообщения не появляются, но при отпускании сообщение появляется n раз, т.е. при каждом отпускании кнопки, а должно вроде тока один раз.
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025