2013-04-02 3 views
2

내 C#/WPF/.NET 4.5 응용 프로그램에서 KeyEventHandler를 통해 키 프레스를 캡처하고 나중에 Windows Input Simulator을 사용하여 해당 키를 에뮬레이션합니다 (제스처, 음성 등의 명령을 매핑). 키보드).Key를 VirtualKeyCode로 변환

문제는 내가 KeyEventHandlerRoutedEventArgs하지만 나중에 내가 VirtualKeyCodeSimulateKeyPress()에 전달해야로부터 Key 열거의 멤버를 얻을 수있다.

Key에서 VirtualKeyCode까지 어떻게 이동합니까?

// Trigger reader 
private void Editor_CommandButton_Click(object sender, RoutedEventArgs e) { 
    PressKeyModal.Visibility = System.Windows.Visibility.Visible; 
    AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent); 
} 
// Read key press from keyboard 
private void Editor_HandleKeyDownEvent(object sender, KeyEventArgs e) { 
    // Here is the culprit 
    VirtualKeyCode CodeOfKeyToEmulate = ConvertSomehow(e.Key); 
    // /culprit 
    PressKeyModal.Visibility = System.Windows.Visibility.Hidden; 
    RemoveHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent); 
} 

// Later, emulate the key press 
private void EmulateKeyPress(VirtualKeyCode codeOfKeyToEmulate({ 
    InputSimulator.SimulateKeyPress(codeOfKeyToEmulate); 
} 
+1

어떤 .NET 버전을 사용하고 있습니까? – keyboardP

+0

.NET 4.5 (그에 따라 편집 된 질문) – mbaytas

답변

6

나는 KeyInterop.VirtualKeyFromKey 방법이 내가 찾고있는 것으로 보입니다. 따라서 위의 코드의 번잡 한 부분이된다 :

// Read key press from keyboard 
private void Editor_HandleKeyDownEvent(object sender, KeyEventArgs e) { 
    // The rehabilitated culprit 
    VirtualKeyCode CodeOfKeyToEmulate = (VirtualKeyCode)KeyInterop.VirtualKeyFromKey(e.Key); 
    // /rehabilitated culprit 
    PressKeyModal.Visibility = System.Windows.Visibility.Hidden; 
    RemoveHandler(Keyboard.KeyDownEvent, (KeyEventHandler)Editor_HandleKeyDownEvent); 
} 

KeyInterop.VirtualKeyFromKey 방법은 VirtualKeyCode하지만 VirtualKeyCode으로 캐스팅 할 수있는 int32을하지 반환 그것은 주목할 가치가있다.

+0

@keyboardP에게 감사드립니다. 그는 원래 내가 원했던 것이 아닌 [KeyInterop.KeyFromVirtualKey] (http://msdn.microsoft.com/en-us/library/system.windows.input.keyinterop.keyfromvirtualkey.aspx) 메서드를 제안했지만, 그러나 그는 올바른 방향으로 나를 조종했다 ([KeyInterop] (http://msdn.microsoft.com/en-us/library/system.windows.input.keyinterop.aspx) 클래스). – mbaytas

+0

MSDN 페이지에서 잘못된 링크를 복사했으나 기쁘게 정렬되었습니다. 며칠 후 답변을 수락하는 것을 잊지 마십시오. – keyboardP

+0

@keyboardP 만약에 아직도 있다면 두 번째 대답을 수락했을 것입니다. =) 도움을 많이 주셔서 감사합니다. – mbaytas

관련 문제