2010-12-01 4 views
4

다른 WPF 어셈블리를 많이 사용하는 WPF (프리즘) 응용 프로그램과 다른 창 (wpf 및 win32)을 포함하는 win32 dll도 있습니다.wpf/win32 응용 프로그램을 혼합하여 응용 프로그램 전체 단축키 정의

사용자가 기능 키 (F2-F12)를 누르면 특정 프로그램 기능을 열려고합니다. 이 같은

뭔가 :

RoutedCommand commandF4 = new RoutedCommand(); 
commandF4.InputGestures.Add(new KeyGesture(Key.F4)); 
Application.Current.MainWindow.CommandBindings.Add(new CommandBinding(commandF4, CallCommandF4)); 

문제는 다음 MainWindow를에 포커스가있는 동안이에만 작동 않습니다. 보조 WPF 창 (또는 win32 창)을 열면 키 바인딩이 더 이상 적용되지 않습니다.

F4 (또는 다른 키)에 대해 응용 프로그램 전역 단축키를 추가 할 수있는 방법이 있습니까?
또는 적어도 WPF 전체 단축키?

+0

[입력 :

은 그냥 닷넷 4.0을 사용하는 경우 다음이 대신 흐 모드의 PARAM 사용으로

Assembly.GetExecutingAssembly().GetModules()[0] 

를 사용하는 SetWindowsHookEx를 사용하는 주를 가지고 포커스는 한 번에 하나의 창에있을 수 있습니다.] (http://msdn.microsoft.com/en-us/library/ms754010.aspx#focus). 2 차 창에서 키 바인딩을 잡아 내고 [메시징] (http://www.google.com/search?q=mvvm+messaging)을 사용하여 키를 누른 MainWindow와 통신 할 수 있습니다. Win32 창은 낮은 수준의 키보드 후크와 정렬을 요구할 수 있습니다. –

답변

3

키보드에 후크를 쓰고이 후크를 연결하여 응용 프로그램의 스레드에서 키보드 메시지를 수신 할 수 있습니다.

이것은 영감을 얻으려는 좋은 예입니다. http://www.codeproject.com/KB/cs/globalhook.aspx.

Process.GetCurrentProcess().MainModule.BaseAddress 
+1

아, 그냥 질문이 한 살인 걸 알았어 :) – PompolutZ

관련 문제