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.