Я хочу перехватить горячую клавишу (в частности, CTRL V
), которая будет взаимодействовать с моим приложением определенным образом. Я могу глобально зарегистрировать горячую клавишу, используя метод RegisterHotKey
. Когда я нажимаю CTRL V
, я хочу, чтобы сфокусированное окно/управление также получало сообщение WM_PASTE
. Я пробовал отправить его через SendMessage
, но он, похоже, не работал. Я в конечном итоге закончил регистрацию HotKey, отправив ^v
в текущее окно, а затем повторно зарегистрировав горячую клавишу.Отправка вставки сообщения в фокусное управление активного окна
private static void Hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
_hook.KeyPressed -= Hook_KeyPressed;
_hook.Dispose();
SendKeys.Send("^v");
_hook = new KeyboardHook();
_hook.RegisterHotKey(global::ClipMaster.ModifierKeys.Control, Keys.V);
_hook.KeyPressed += Hook_KeyPressed;
}
Это делает трюк, но он блокирует мышь (и окно) примерно на полсекунды. Я также боюсь, что это не сработает в некоторых приложениях, хотя я не знаю, какой пример я мог бы дать.
Это другой подход, чем я использовал для крючков, но он где-то задыхается, я, вероятно, найду способ исправить это. –