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

Delphi Sources



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

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

Доброе время суток!!!! Пишу прогу которая сидит в памяти и реагирует на нажатие сочетаний клавиш.....все вроде бы нормально....но вот перехват клавиш решил сделать через DLL, вот процедура обработки клавиш:
Код:
 function KeyMsgProc(Code: integer; wParam: word;
                     lParam: LongInt): LongInt; stdcall;
   var kn: array[0..50] of Char;
  begin
   if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = KF_UP) then
    begin
     GetKeyNameText(lParam, kn, SizeOf(kn));
     MessageBox(0, PChar('"' + IntToStr(wParam) + '" ' + StrPas(kn)), PChar(''), MB_OK);
    end;
   Result:= CallNextHookEx(KHook, Code, wParam, lParam);
  end;
Но проблема в том что он перехватывает каждую клавишу, а как мне перехватить сочетание клавиш?
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #2  
Старый 26.10.2010, 08:36
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Вот пример проги без окна, при нажатии ALT+1 - пикает ALT+А12 выход.

Код:
Program Proga;

Uses Windows, Messages;

Var
 W: TWndClassEx;
 H: HWND;
 Mesg : TMsg;

Procedure CloseProgram;
begin
 UnRegisterHotkey(H, 1);
 UnRegisterHotkey(H, 2);
 PostQuitMessage(0);
 Exit;
end;

Procedure SaveHWNDL2(p: Wparam);
begin
 if p = 1 Then Windows.Beep(8192, 50);
 if p = 2 Then CloseProgram;
end;

Function WindowProc(H:HWND; Msg: Integer; Wp:Wparam; Lp:Lparam):Lresult;
 stdcall;
Begin
Result:= 0;
 case Msg of
  WM_DESTROY: CloseProgram;
  WM_HOTKEY: SaveHWNDL2(Wp);
  Else Result:= DefWindowProc(H, Msg, Wp, Lp);
 end;
end;

begin
 W.cbSize:= SizeOf(W);
 W.lpfnWndProc:= @WindowProc;
 W.lpszClassName:= 'prog';
 RegisterClassEx(W);
 H:=CreateWindowEx(0,'prog','prog',0,0,0,0,0,0,0,0,nil);
 RegisterHotkey(H, 1, MOD_ALT, Ord('1'));
 RegisterHotkey(H, 2, MOD_ALT, VK_F12);
 Windows.Beep(8192, 50);
While GetMessage(Mesg,0,0,0) do
 begin
  TranslateMessage(Mesg);
  DispatchMessage(Mesg);
 end;

end.
Ответить с цитированием
  #3  
Старый 26.10.2010, 09:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

сочетание клавиш это последовательное наступление событий down для нескольких клавиш
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter