Обнаружение Ctrl + V с помощью RegisterHotKey, но не его перехват

Мне нужно определить, когда пользователь нажимает Ctrl + V (независимо от фокуса окна - мое приложение скорее всего быть свернутым), но я не должен останавливать фактическую операцию вставки.

Я пробовал несколько вещей: (Я успешно привязываюсь к нажатию клавиш с помощью RegisterHotKey)

У меня:

protected override void WndProc(ref Message m)
{
  if (m.Msg == 0x312)
    hotKey();
  base.WndProc(ref m);
}

и я пробовал следующее:

void hotKey()
{
  SendKeys.SendWait("^v"); //just puts 'v' instead of clipboard contents
}

и

void hotKey()
{
  SendKeys.SendWait(ClipBoard.GetText());
  /* This works, but since Ctrl is still down, it triggers
   * all the shortcut keys for the app, e.g. if the keyboard
   * contains 's' then instead of putting 's' in the app, it
   * calls Ctrl+S which makes the app think the user wants
   * to save.
   */
}

В настоящее время единственное рабочее решение, которое у меня есть, - это привязать к чему-то другому, например, Ctrl + B , а затем вызвать SendKeys.SendWait ("^ v "); однако это не идеально.

Идеальным решением было бы, если бы мое окно вообще не перехватило нажатие клавиши, а просто реагировало.

9
задан Uwe Keim 15 December 2017 в 13:17
поделиться