2009-06-10 3 views
3

Я ищу функциональность, похожую на рабочий стол Google. Когда вы нажмете Ctrl дважды быстро, появляется небольшое окно поиска.Как подключиться к двойному нажатию клавиши Ctrl?

Я попытался с помощью довольно тяжелые клавиатурами класса крюка, который я нашел где-то, но продолжал давать meunpredictable результатов (т.е. первый раз, когда он будет работать, то я бы нажать Ctrl один раз, и это поднимет ключ нажатие события несколько раз?).

В любом случае, это просто не похоже, что это должно быть сложно, поэтому я чувствую, что должен делать что-то неправильно. Мое приложение (приложение WPF) будет работать с видимостью основного окна, скрытым и не находящимся в панели задач. Когда я выполняю команду Ctrl - Ctrl, я хочу поймать его и показать окно.

Другой вопрос - в настоящее время я делаю это, зарегистрировав горячую клавишу, но это не дает мне полную функциональность, которую я хочу (двойное нажатие Ctrl). Когда окно отображается, я не нашел 100% -ный способ проверки, когда он больше не имеет фокуса (я хочу снова скрыть его, когда это произойдет). Я попытался ответить на Деактивированный, LostFocus и т. Д., И они работают большую часть времени. Но иногда кажется, что окно отображается без фактического активации или получения фокуса. Любые идеи по этому поводу?

Спасибо!
Adam

ответ

3

Возможно, вы захотите использовать SetWindowsHookEx, чтобы подключиться к событиям клавиатуры на низком уровне.

Вот sample code in C++, и вот pinvoke.net's entry, что должно помочь портировать это на C#.

Код C#, который можно использовать непосредственно, вы можете попробовать CodeProject sample. Из моей памяти он работал в большинстве случаев с несколькими ошибками. В какой-то момент я помог портировать это на Jad Engine, где мы реализовали класс (UserActivityHook), который выполнил это, и исправил несколько ошибок в этом процессе. Это может быть очень хорошее место для начала ...

+0

В этом ответе не рассматривается вопрос о двойном касании вопроса * вообще *. – Synetech

2

Что касается второго вопроса, если форма не активирована, когда отображается, вы должны позвонить Form.Activate после ее отображения. Для простой отладки поставьте инструкции трассировки в GotFocus, LostFocus, Enter, Exit и Activate, Деактивируйте события и посмотрите, не соответствует ли это вашим потребностям.

Смежные вопросы