2009-06-03 11 views
5

Chciałbym, aby moja aplikacja wykryła skróty klawiaturowe, gdy nie jest ona uruchomiona, ale ponieważ nie ma w tym systemie możliwości, rozsądnym rozwiązaniem byłaby procedura w tle bez interfejsu użytkownika, który nasłuchuje naciśnięć klawiszy. Czy można monitorować naciśnięcia klawiszy, gdy aplikacja nie znajduje się na pierwszym planie w .Net?Jaki jest najprostszy sposób dodania globalnych skrótów klawiaturowych w systemie Windows?

Wygląda na to, że CodeProject article ma to, czego potrzebuję.

Odpowiedz

4

This library jest całkiem dobre

EDIT: Niedawno stworzył tę bibliotekę, która używa innego podejścia: NHotkey

3

Nie da się tego zrobić bez ingerencji.

Zawsze dodaje się globalny skrót klawiaturowy. Jeśli mimo wszystko musisz to zrobić, upewnij się, że jest to funkcja opcjonalna, a nie rezygnacja.

4

Skrót systemu Windows może mieć przypisany skrót klawiszowy - kliknij prawym przyciskiem myszy dowolny program w menu Start, wybierz polecenie Właściwości, a zobaczysz pole "Klawisz skrótu". Windows będzie szukał tego skrótu w twoim imieniu i uruchomi twój program, gdy go zobaczy. (Używam go do uruchomienia kalkulatora Ctrl+Alt+C).

Aby ustawić to programowo, użyj IShellLink.

+0

Jak mogę utworzyć link powłoki programowo? – Luke

+0

@Luke: http://www.codeproject.com/KB/mcpp/mcppshortcuts.aspx – RichieHindle

4

Wywołaniem API:

RegisterHotKey

http://msdn.microsoft.com/en-us/library/ms646309.aspx

http://www.pinvoke.net/default.aspx/user32/RegisterHotKey.html

następnie zastąpić tę metodę "WndProc" monitorowania naciśnięć klawiszy.

protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     // let the base class process the message 
     base.WndProc(ref m); 

     // if this is a WM_HOTKEY message, notify the parent object 
     const int WM_HOTKEY = 0x312; 
     if (m.Msg == WM_HOTKEY) ............... 

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx

Powiązane problemy