2013-09-19 4 views
2

У меня возник вопрос о KeyCode и отключении специальных клавиш. Я знаю, что этот вопрос задавали несколько раз, но я не нашел ответа, который я могу использовать, и который работает, поэтому я пришел сюда, чтобы спросить :)Отключить клавишу Ctrl или Alt без использования реестра C#

Я пишу программу, которая блокирует каждую комбинацию клавиш или клавиш (как Alt+F4 и т. д.). Приложение не для меня, это для клиентов, которые могут только ориентироваться в этой программе. Все это прекрасно работает, но я не могу отключить ключ Left CTRL, Right CTRL or Alt. Я получил этот код для попытки блокирования этих ключей:

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
     { 
      if (e.KeyCode == Keys.LControlKey) 
      { 
       MessageBox.Show("LCtrl", "Warnung", MessageBoxButtons.OK); 
      } 

      else if (e.KeyCode == Keys.RControlKey) 
      { 
       MessageBox.Show("RCtrl", "Warnung", MessageBoxButtons.OK); 

      } 

      else if (e.KeyCode == Keys.Alt) 
      { 
       MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK); 
      } 

      else if (e.KeyCode == Keys.Delete) 
      { 
       MessageBox.Show("Delete", "Warnung", MessageBoxButtons.OK); 
      } 
     } 

Я использую только MessageBox.Show();, что я могу видеть, если он работает. Delete ключ работает хорошо, но другой нет. Можно ли это сделать без редактирования registry и для Win7? Кто-нибудь знает, почему или может дать мне подсказку?

Приветствия

EDIT: Я блокировать все остальные ключи таким образом: Blocking shortcut keys using c#

+0

Я уже нашел эту тему, но есть просто способ для WinXP или редактирования реестра. – Roman

+0

Как вы остановите клавишу Delete (или другие)? – Steve

+0

см. Ссылку в моей правке :) – Roman

ответ

3

Отказ от ответственности: Я не очень опытен в пользовательских классах ввода, но вот мой вклад.

CTRL и ALT являются примерами клавиш-модификаторов. Иными словами, они изменяют другие (немодификаторы) ключи для создания комбинации клавиш. Ваш пользовательский интерфейс, скорее всего, сможет получить полную комбинацию клавиш. Например:

private void keyPressed(object sender, PreviewKeyDownEventArgs e) 
{ 
    e.KeyCode == Key.A; // True (pressed A) 
    e.KeyCode == Key.Control; // False (no key pressed) 
    e.Modifiers == Keys.Control; // True (user is pressing the modifier CTRL) 
    e.KeyCode == Key.A && e.Modifiers == Keys.Control; (pressed key A with modifier CTRL) 
} 

Что касается отключения ключа, вы можете просто поймать e.Modifiers:

private void ignoreCtrl(object sender, PreviewKeyDownArgs e) 
{ 
    if (e.Modifiers != Keys.Control) { /* Pass to handler */ } 
    else { /* Discard */ } 
} 

Опять же, я не испытывал в вашей конкретной структуры, но это было бы мое предположение. Я использовал следующие источники: SO

How to use multiple modifier keys in C#

Determine whether modifier key was pressed

+0

Спасибо!Я посмотрю на это :) – Roman

1

Это должно быть комментарий, потому что я не проверял, но мне нужен код, как пример, так что я пишу здесь. Вы говорите мне, если это работает или нет.

PreviewKeyDownEventArgs содержит другие свойства, которые вы можете использовать, чтобы проверить, нажата ли одна или несколько клавиш-модификаторов.
Затем вы можете установить для свойства IsInputKey значение false, чтобы предотвратить дальнейшую обработку для любого обычного ключа, нажатого вместе с ключом-модификатором.

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 

if (e.Control) 
{ 
    MessageBox.Show("Ctrl", "Warnung", MessageBoxButtons.OK); 
    e.IsInputKey = false; 
} 
else if (e.Alt) 
{ 
    MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK); 
    e.IsInputKey = false; 
} 
+0

'Alt' до сих пор не заблокирован таким образом. Но теперь 'Ctrl' заблокирован. Спасибо :) – Roman

1

Вы пробовали проверить ключи-модификаторы? Например, ниже.

Обратите внимание, что это для WPF, так как вы не указали формы выигрыша или wpf.

if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
{ 
    MessageBox.Show("Control Button Down"); 
} 
else if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) 
{ 
    MessageBox.Show("Alt Down"); 
} 

Cheers.

+0

Спасибо, я посмотрю на это :) – Roman