Главная » Как создать глобальную горячую клавишу
Для этого используется механизм сообщений и функция registerhotkey.

function registerhotkey(hwnd: hwnd; id: integer; fsmodifiers, vk: uint): bool;
hwnd
Описатель окна, которое будет получать сообщение wm_hotkey о нажатии «горячей клавиши»
id
Идентификатор "горячей клавиши" - целое число, по которому Ваша программа будет узнавать, какая именно клавиша была нажата. Для приложения это число должно быть из интервала от $0000 до $bfff. Для библиотек (dll) от $c000 до $ffff
fsmodifiers
Определяет, какие клавиши регистра должны быть нажаты в момент нажатия клавиши, оределенной в vk, чтобы было послано сообщение wm_hotkey. Это должна быть одна из следующих констант или их комбинация:
mod_alt
mod_control
mod_shift
mod_win
vk
Константа, определяющая "горячую клавишу". Это должна быть одна из vk_xxx констант. Список некоторых vk_xxx констант здесь

Вот пример программы, которая ловит нажатие на win+n.

program main;

uses windows, messages;

const
hotkey1 = 1001;//константа для идентификации горячей клавиши
var
wc : twndclassex;
mainwnd : thandle;
mesg : tmsg;

function windowproc(wnd:hwnd; msg : integer; wparam:wparam; lparam:lparam):lresult; stdcall;
var ncode, ctrlid : word;
begin
case msg of
wm_hotkey : begin
//обработчик события нажатия на зарегистрированную горячую клавишу
if wparam=hotkey1 then messagebox(wnd, 'Вы нажали на win+n', '', mb_ok);
end;

wm_destroy : begin
unregisterhotkey(mainwnd, hotkey1);//уничтожение созданной ранее горячей клавиши
postquitmessage(0);
result:=0;
end;

else result:=defwindowproc(wnd,msg,wparam,lparam);
end;

end;//of windowproc

begin

wc.cbsize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnwndproc:=@windowproc;
wc.cbclsextra:=0;
wc.cbwndextra:=dlgwindowextra;
wc.hinstance:=hinstance;
wc.hicon:=loadicon(0,idi_application);
wc.hcursor:=loadcursor(0,idc_arrow);
wc.hbrbackground:=color_btnface+1;
wc.lpszmenuname:=nil;
wc.lpszclassname:='hotkeycatcher_class';

registerclassex(wc);

mainwnd:= createwindow('hotkeycatcher_class', '',
ws_overlappedwindow, cw_usedefault, cw_usedefault, cw_usedefault, cw_usedefault,
0, 0,hinstance,nil);

//$4e – шестнадцатеричный код клавиши с символом n
if not registerhotkey(mainwnd,hotkey1,mod_win, $4e) then
messagebox(mainwnd, 'Не удалось зарегистрировать горячую клавишу', '', mb_ok);

showwindow(mainwnd,sw_show);

while getmessage(mesg,0,0,0) do begin
if mainwnd<>0 then
if isdialogmessage(mainwnd,mesg) then continue;
translatemessage(mesg);
dispatchmessage(mesg);
end;
end. Категория: Web технологии | Просмотров: 62