Для нашего приложения мы создали онлайн-справку, где клиенты могут посмотреть информацию о нашем приложении. Они могут достичь этого в меню, но я также хотел сделать его доступным, нажав клавишу F1, где бы вы ни находились в нашем приложении (поскольку это в основном используется для справки в других приложениях).
Я попытался использовать функцию RegisterHotKey, но, как оказалось, это регистрирует всю систему горячих клавиш. Я хочу, чтобы он открывал нашу онлайн-справку только тогда, когда вы находитесь в нашем приложении.
Итак, я попытался настроить хук клавиатуры, но это также, кажется, применимо ко всей системе. Есть ли способ убедиться, что нажатие клавиши F1 в приложении откроет ее, но не тогда, когда вы не сфокусированы на приложении?
Код, который я пробовал:
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
procedure TZZ_Main_Form.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = HotKeyIDF1 then btOnlineHelpClick(nil);
end;
Внутри FormCreate и FormDestroy:
RegisterHotKey(Handle, HotKeyIDF1, 0, VK_F1);
UnRegisterHotKey(Handle, HotKeyIDF1);
Что касается клавиатуры, то, что я пробовал:
hkHook := SetWindowsHookEx(WH_KEYBOARD,@KeyboardProc,hInstance,GetCurrentThreadID());
function KeyboardProc(Code, wParam, lParam: Integer): Integer;
var
url: String;
ShellInfo: TShellExecuteInfo;
begin
try
case wParam of
VK_F1:
begin
url := 'ourOnlineHelpLink'
if url <> '' then
begin
FillChar( ShellInfo, SizeOf( TShellExecuteInfo ), 0 );
ShellInfo.cbSize := SizeOf( TShellExecuteInfo );
ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI or
SEE_MASK_FLAG_DDEWAIT;
ShellInfo.Wnd := HWnd_Desktop;
ShellInfo.lpVerb := 'OPEN';
ShellInfo.lpFile := PChar( url );
ShellInfo.lpParameters := nil;
ShellInfo.lpDirectory := nil;
ShellInfo.nShow := sw_ShowNormal;
ShellExecuteEx( @ShellInfo );
end;
end;
end;
finally
Result := -1;
end;
end;