Использование горячей клавиши, даже если окно скрыто в трее.Возможно ли это в Delphi?
Вопрос
Мне нужно скрыть форму в системном трее, но в то же время я хочу использовать горячую клавишу, такую как "ctrl + 3", чтобы получить текст из TEdit в моей скрытой форме, вставляемой в Firefox SendText (edit1.Text);// таким способом".Я знаю, как вставлять текст, но я ничего не знаю о горячих клавишах/ Есть предложения?Спасибо.Код текста, вставляемый ниже
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;
Решение
Чтобы зарегистрировать общесистемную горячую клавишу, вы должны использовать RegisterHotKey
и UnRegisterHotKey
функции.
Проверьте этот образец
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;
Просто будьте внимательны к выбранной вами комбинации клавиш, потому что она может быть использована внутри другого приложения.например, комбинация Ctrl Число используется Firefox для переключения вкладок.
Не связан с StackOverflow