Возникла такая потребность как запретить глобально нажимать клавишу F2. Т.е. есть несколь приложений под Windows и в них нажатие F2 открывает скрытые функции настройки. А мне надо, чтобы когда пользователь нажимал эту кнопку, то в винде вообще ничего не проиходило, либо появлялось моё сообщения, а функции связанные с работой этой кнопки в программах, да и вообще нигде не выполнялись. Можно ли сделать это или нет?
PS: Я понимаю конечно можно выковырять эту клавишу из клавиатуры, но всё же хотелось более культурно поступить.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
function KbdLLHookProc(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
var
Input:TInput;
begin
with PKbDllHookStruct(lParam)^ do
if (Code in [HC_ACTION])and(vkCode=VK_CAPITAL) then begin
if flags and LLKHF_ALTDOWN=0 then begin
FillChar(Input,SizeOf(Input),0);
Input.Itype:=INPUT_KEYBOARD;
Input.ki.wVk:=VK_TAB;
Input.ki.wScan:=$F;
Input.ki.dwFlags:=KEYEVENTF_KEYUP*Ord(flags and LLKHF_UP<>0)or KEYEVENTF_EXTENDEDKEY*Ord(flags and LLKHF_EXTENDED<>0);
SendInput(1,Input,SizeOf(Input));
end;
Result:=1;
Exit;
end;
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam)
end;
var
Msg:TMsg;
begin
if OpenMutex(MUTEX_ALL_ACCESS,False,ProgID)<>0 then begin
MessageBox(0,'Already run.',nil,MB_OK);
Exit;
end;
CreateMutex(nil,False,ProgID);
SetPriorityClass(GetCurrentProcess,REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
HookHandle:=SetWindowsHookEx(WH_KEYBOARD_LL,@KbdLLHookProc,hInstance,0);
if HookHandle<>0 then begin
while GetMessage(Msg,0,0,0) do begin
end;
UnhookWindowsHookEx(HookHandle);
end;
end.
Есть такой волшебный ключик HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\Scancode Map, с его помощью можно переназначать практически любые клавиши, в том числе блокировать их. Можно воспользоваться готовой программой типа "KeyTweak" или создать таблицу вручную.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.