Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 02:02   #1
HellMercenaries
Заблокирован
 
Регистрация: 21.07.2009
Сообщений: 17
По умолчанию Хук на клаву

Нашел в Нете вот такой код
Цитата:
library Hook;
uses
Windows,
SysUtils;

const KF_UP_MY = $40000000;
var CurrentHook: HHook;
KeyArray: array[0..19] of char;
KeyArrayPtr: integer;
CurFile:text;
function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:
integer): longword; stdcall;
var
i:integer;
begin
if code< 0 then
begin
result:=CallNextHookEx(CurrentHook, code,wParam,lparam);
Exit;
end;
if ( (lParam and KF_UP_MY ) = 0) and (wParam>=65) and (wParam<=90) then
begin

end;
CallNextHookEx(CurrentHook,code,wPa ram,lparam);
result:=0;
end;
procedure SetupGlobalKeyBoardHook;
begin
CurrentHook:=SetWindowsHookEx(WH_KE YBOARD, @GlobalKeyBoardHook,HInstance, 0);
KeyArrayptr:=0;
end;
procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
end;

exports
SetupGlobalKeyBoardHook, UnHook;
begin
end.
Незнаю как из DLL Функцию импортировать.

И ещё какой код клавиши "PrtScrn" ?(она токо и нужна)
HellMercenaries вне форума Ответить с цитированием
Старый 23.07.2009, 06:37   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Если нужна только prtScr, то рекомендую:
Зарегистрируй горячую например в onCreate формы
Код:
RegisterHotKey(handle,  0, 0, VK_SNAPSHOT)
И создай вот такой обработчик:

Код:
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    ....
  public
    ...
    procedure wmhotkey(var msg : TWMHotKey); message WM_HOTKEY;
  end;
....
procedure TForm1.wmhotkey(var msg: TWMHotKey);
begin
  Beep;//Этот код выполнится при нажатии PrtScr
end;
VK_SNAPSHOT - это и есть код нудной тебе клавиши
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 23.07.2009, 19:22   #3
HellMercenaries
Заблокирован
 
Регистрация: 21.07.2009
Сообщений: 17
По умолчанию

Спс ) Хороший код. А какие параметры задаются Ноликами ? RegisterHotKey(handle, 0, 0, VK_SNAPSHOT)

Последний раз редактировалось HellMercenaries; 23.07.2009 в 19:42.
HellMercenaries вне форума Ответить с цитированием
Старый 23.07.2009, 21:23   #4
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

второй параметр - это что то вроде id регистрируемой комбинации клавиш. А третий это флаги клавиш-модификаторов.
Лучше на примере:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(handle,  0, 0, VK_SNAPSHOT);
  RegisterHotKey(handle,  1, MOD_ALT, VK_SNAPSHOT);
  RegisterHotKey(handle,  2, MOD_CONTROL, VK_SNAPSHOT);
  RegisterHotKey(handle,  3, MOD_SHIFT or MOD_WIN, VK_SNAPSHOT);
end;

procedure TForm1.wmhotkey(var msg: TWMHotKey);
begin
  case msg.HotKey of
    0 : ShowMessage('SNAPSHOT');
    1 : ShowMessage('ALT + SNAPSHOT');
    2 : ShowMessage('CTRL + SNAPSHOT');
    3 : ShowMessage('SHIFT + WIN + SNAPSHOT');
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  //По правилам хорошего тона еще нужно сделать вот так
  UnregisterHotKey(handle, 0);
  UnregisterHotKey(handle, 1);
  UnregisterHotKey(handle, 2);
  UnregisterHotKey(handle, 3);
end;
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 23.07.2009 в 21:38.
0nni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хук на комбинацию W0LF Win Api 9 26.07.2009 10:33
Глобальный хук на клаву rem37 Win Api 7 03.05.2009 01:25
Хук на систему Terran Win Api 7 27.03.2009 21:19
Ловушка на клаву(нужно немного улутшить ее) xshStasX Win Api 2 11.08.2008 15:50
хук rpy3uH Win Api 0 30.10.2006 20:47