PDA

View Full Version : [C#] "sopprimere" l'esecuzione di un tasto


Fedd
26-02-2009, 09:25
Innanzitutto saluto tutto il forum dato che mi sono appena registrato... :)
Ora il mio dilemma..
tramite gli eventi Keydown e keypress riesco ad intercettare quando viene premuto un tasto e "sopprimere" la sua esecuzione nella mia form...
vi faccio un esempio...ho una textbox..dove ovviamente premendo le lettere della tastiera queste verranno scritte sulla textbox...tranne quelle che io nn voglio...ad esempio nella mia textbox nn voglio che appaia la lettera Q...e sono riuscito a far si che nn venga scritta nella textbox...e fin qui è tutto ok e semplice....
Tutto questo però è relativo solo alla mia form.....e adesso infatti vi spiego cosa voglio effettivamente fare io....
voglio fare che alla pressione del tasto muto presente in alcune tastiere...io lo intercetto e impedisco che si imposti il muto sull'audio di windows.....in pratica voglio oltre ad intercettare e impedire cio k avviene alla pressione di un tasto nella mia form..impedire anche cio k avviene al di fuori...in questo caso in windows stesso..........
questo è il mio codice che però blocca l'esecuzione esclusivamente sulla mia form...... :

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
textBox1.Text = "";
textBox1.Text += Environment.NewLine + "keycode = " + e.KeyCode.ToString()
+ Environment.NewLine + "keyvalue = " + e.KeyValue.ToString() +
Environment.NewLine + "keydata = " + e.KeyData.ToString();
if (e.KeyCode == Keys.VolumeMute)
textBox1.Text += Environment.NewLine + "Tasto ucciso";
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.VolumeMute)
e.Handled = true;
}

come si deve agire? :confused:

LordEver
27-02-2009, 13:46
Ciao,
i keyevent del c# non sono in grado di intercettare gli eventi al di fuori della form. Quindi niente codice managed..
L'unico approcio che mi sento di consigliarti è quello di intercettare gli hook di sistema che ti servono tramite l'uso delle librerie native.

Senza fornirti frammenti di codice poco esemplificativi, dai uno sguardo qui: http://www.codeproject.com/KB/system/CSLLKeyboard.aspx.

Se hai dubbi fammi sapere. Ciao!

Fedd
27-02-2009, 20:53
Ciao,
i keyevent del c# non sono in grado di intercettare gli eventi al di fuori della form. Quindi niente codice managed..
L'unico approcio che mi sento di consigliarti è quello di intercettare gli hook di sistema che ti servono tramite l'uso delle librerie native.

Senza fornirti frammenti di codice poco esemplificativi, dai uno sguardo qui: http://www.codeproject.com/KB/system/CSLLKeyboard.aspx.

Se hai dubbi fammi sapere. Ciao!

ok grazie mille ..do un occhiata..in caso scrivo qui