2016-11-20 2 views
0

Я довольно новичок в C#, и я пытаюсь создать небольшое приложение в системном трее, которое вставляет что-то в активное окно (отправляет команду CTRL + V) на основе короткий текст и горячие клавиши, которые написаны в окне.Слушайте следующие 5 нажатий клавиш после нажатия горячей клавиши

Ex. Если вы введете | hl в Блокноте, приложение вставляет Hello в активное окно.

До сих пор я получил приложение к stat в системе, попробовав использовать NotifyIcon на основе найденного примера here и смог настроить крючок клавиатуры для прослушивания событий с нажатием клавиши.

Что мне сейчас нужно это:

if(e.KeyCode.ToString() == "OemPipe") //if hotkey is pressed 
{ 
    //listen for the next 5 KeyCode 
    if(//next 5 KeyCode are A, B, C, D and E) 
    { 
     //do stuff 
    } 
    else 
    { 
     //ignore and listen for hotkey again 
    } 
} 

Я стучал головой о стену, пытаясь найти, как это делается в течение нескольких дней, но я даже не могу найти что-то Заставь меня начать.

Любые идеи будут очень благодарны, и если у вас будет образец кода, который будет еще лучше.

+0

Являются ли это веб-формы или MVC или Windows Forms или WPF, или Silverlight или что-то еще? –

+0

Опубликовать полный код событий с нажатием клавиши – Aruna

+0

Должно быть, это приложение Windows Forms. – user2099654

ответ

1

Я попробую протянуть руку.

Я предполагаю, что вы получаете в Keycode на KeyEventArgs объекта, если вы прокручиваете его свойства можно заметить два интересных из них:

KeyEventArgs.Modifiers 
KeyEventArgs.Shift 

С тех вы будете знать, если клавиша была нажата время удерживая CTRL, ALT или SHIFT, тогда в вашем коде вы можете добавить в массив, какие клавиши были последовательно нажаты, удерживая эти горячие клавиши и предпринимать какие-либо действия, если вы найдете нужную комбинацию или просто очистите массив, если следующий ключ не появится с любым модификатором.

Somehing как:

private void button1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 

    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) 
    { 
     AddtoShiftArray(e.keyCode); 
     clearAllOtherBuffers(); //ignore and listen for hotkey again 

     if(seeIFWithWhatIHaveHereICanDoStuff()){ 
      doMyStuff(); 
      clearShiftBuffer(); 
     } 
    } 
    //Same for ctrl 
    //Same for alt 

} 

надеюсь, что это помогает! : D

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