2009-04-20 7 views
6

Ho scritto un piccolo programma che visualizza suoni e immagini sullo schermo quando si preme qualsiasi tasto. Lo avvio sempre quando uno dei miei bambini piccoli gira sulle mie ginocchia e inizia a colpire le chiavi, ovviamente, a caso.Cattura la chiave di windows in C# (wpf)

Funziona benissimo tranne che per 2 tasti, uno dei quali è l'interruttore ON/OFF, l'altro è la chiave di Windows. (credo che sia l'equivalente CTRL-ESC). Posso intercettarlo mentre viene premuto, ma solo dopo che è stato mostrato il menu Start.

L'evento che uso è l'UIElement.KeyDown e tutto quello che potevo si avvicinò con finora è: (la e essendo KeyEventArgs)

  if (e.Key == Key.LWin) e.Handled = true; 

ma rispetto alla finestra di avvio è già mostrando ho paura.

Ho già 1 risposta, ma mi piacerebbe molto sapere se c'è qualche supporto per wpf?

Sospetto che la programmazione dell'interruttore on/off principale potrebbe non essere possibile? In caso contrario, qualsiasi aiuto ci sarebbe benvenuto anche ..

risposta

17

Avrete bisogno di un keyboard hook. Sfortunatamente, questo deve essere fatto con P/Invoke; non può essere fatto con il codice gestito.

Check out Baby Smash! di Scott Hanselman. E 'ospitato su plex di codici a http://www.codeplex.com/babysmash Github a https://github.com/shanselman/babysmash

In alternativa, controlla ShapeShow su CodeProject, che è simile.

+0

Questa è sicuramente una risposta, tx. Ma richiede interop, nessun supporto wpf nativo di cui sei a conoscenza? – Peter

+0

Sì. Bisogno di interoperabilità Aggiornato la risposta di AB per spiegarlo e aggiunto il link a ShapeShow. –

+0

Ok, se siete sicuri, grazie per aver risposto! (Nel frattempo ho installato Babysmash nel frattempo) – Peter

3

Vedi http://msdn.microsoft.com/en-us/library/system.windows.input.key(v=VS.90).aspx

In fondo si vedrà un semplice esempio, penso che quello che stai cercando è qualcosa in queste righe:

finestre lasciate chiave: System.Windows.Input.Key .LWin

tasto destro finestre: System.Windows.Input.Key.RWin

esempio:

private void OnKeyDownHandler(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.LWin) { 
     textBlock1.Text = "You Entered: " + textBox1.Text; 
    } 
} 
Problemi correlati