none
Capture all Keyboard input, regardless of what control has focus RRS feed

  • 질문

  • I have a barcode scanner, which acts like a keyboard. The scanner can be set with a prefix on the string it sends as keyboard input. I would like to capture all keyboard input in the application, regardless of the control that currently has keyboard focus. This will allow me to check for the prefix and do something 
    if necessary. I have tried using the page and window textinput events, but that only works when nothing has keyboard focus. Once a control gets 
    keyboard focus, the textinput event on the page doesn't fire. My only solution at the moment is to check for the prefix in every control on the page
    with a textinput event.

    Does anyone have a better idea?
    • 편집됨 cander 2009년 7월 30일 목요일 오전 10:51
    2009년 7월 30일 목요일 오전 10:40

답변

  • In the startup of your application, you can register this:
    EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyDownEvent, yourdelegate);

    Geert van Horrik - CatenaLogic
    Visit my blog: http://blog.catenalogic.com
    • 답변으로 표시됨 cander 2009년 7월 30일 목요일 오후 12:25
    2009년 7월 30일 목요일 오후 12:01
  • Here is the code, in case anyone is interested:

    EventManager.RegisterClassHandler(typeof(Window),
         Keyboard.KeyUpEvent,new KeyEventHandler(keyUp), true);
    
    
    private void keyUp(object sender, KeyEventArgs e)
    {
          if(e.Key == Key.OemComma)
                 MessageBox.Show("YAY!!!");
    }
    

    • 답변으로 표시됨 cander 2009년 7월 30일 목요일 오후 12:31
    2009년 7월 30일 목요일 오후 12:30

모든 응답

  • In the startup of your application, you can register this:
    EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyDownEvent, yourdelegate);

    Geert van Horrik - CatenaLogic
    Visit my blog: http://blog.catenalogic.com
    • 답변으로 표시됨 cander 2009년 7월 30일 목요일 오후 12:25
    2009년 7월 30일 목요일 오후 12:01
  • Thanks. That works perfectly.
    2009년 7월 30일 목요일 오후 12:26
  • Here is the code, in case anyone is interested:

    EventManager.RegisterClassHandler(typeof(Window),
         Keyboard.KeyUpEvent,new KeyEventHandler(keyUp), true);
    
    
    private void keyUp(object sender, KeyEventArgs e)
    {
          if(e.Key == Key.OemComma)
                 MessageBox.Show("YAY!!!");
    }
    

    • 답변으로 표시됨 cander 2009년 7월 30일 목요일 오후 12:31
    2009년 7월 30일 목요일 오후 12:30