Использование горячей клавиши, даже если окно скрыто в трее. Возможно ли это в Дельфах?
Мне нужно скрыть форму в системном трее, но в то же время я хочу использовать горячую клавишу, такую как "ctrl+3", чтобы получить текст из tEdit на моей скрытой форме, вставляемой в Firefox SendText(edit1.Текст); / / в таком методе". Я знаю, как вставить текст, но я ничего не знаю о горячих клавишах / любые предложения? Спасибо. Код вставки текста ниже
procedure SendText(const Value: WideString);
var
I: Integer;
S: WideString;
TI: TInput;
KI: TKeybdInput;
const
KEYEVENTF_UNICODE = $0004;
begin
S := WideUpperCase(Value);
TI.Itype := INPUT_KEYBOARD;
for I := 1 to Length(S) do
begin
KI.wVk := 0;
KI.dwFlags := KEYEVENTF_UNICODE;
KI.wScan := Ord(S[I]);
TI.ki := KI;
SendInput(1, TI, SizeOf(TI));
end;
end;
1 ответ:
Для регистрации общесистемной горячей клавиши необходимо использовать
RegisterHotKey
и ещеUnRegisterHotKey
функции.Проверьте этот образец
Просто будьте осторожны с комбинацией клавиш, которую вы выбираете, потому что она может быть использована внутри другого приложения. например, комбинация Ctrl число используется Firefox для переключения вкладок.type TForm125 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private HotKey1 : Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public end; var Form125: TForm125; implementation {$R *.dfm} procedure TForm125.FormCreate(Sender: TObject); begin HotKey1 := GlobalAddAtom('MyAppHotkey1');//create a unique value for identify the hotkey if not RegisterHotKey(Handle, HotKey1, MOD_CONTROL, VK_F1) then //register the hotkey CTRL + F1 ShowMessage('Sorry can not register the hotkey'); end; procedure TForm125.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Handle, HotKey1);//unregister the hotkey GlobalDeleteAtom(HotKey1);//remove the atom end; procedure TForm125.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = HotKey1 then ShowMessage('Hello'); // do your stuff end;