Переопределить Caps Lock с помощью Ctrl, используя C # - PullRequest
5 голосов
/ 28 августа 2009

Я пишу ( еще один , я знаю) переназначение клавиатуры с использованием C # и Visual Studio 2008.

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

Мое понимание (которое может быть неверным) заключается в том, что Caps Lock и Ctrl обрабатываются совершенно по-разному, поскольку Caps Lock является переключаемой клавишей, тогда как Ctrl является просто "нормальным".

Итак, я пытаюсь понять, как заставить Caps Lock вести себя как Ctrl на самом низком уровне, а также как сделать нормальный Клавиша Ctrl действует как клавиша Caps Lock .

Спасибо

1 Ответ

2 голосов
/ 29 августа 2009

Поддерживать bool, который представляет ожидаемое состояние блокировки шапки. Когда нажата клавиша Caps Lock, установите системное значение Caps Lock обратно на значение bool. Когда нажата Ctrl , переключите ожидаемое состояние блокировки caps и установите значение блокировки cap системы в значение bool.

Используйте следующее для установки начального ожидаемого состояния:

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true, CallingConvention=CallingConvention.Winapi)] 
public static extern short GetKeyState(int keyCode); 
bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;

Добавить специальную логику в HookCallback (по предоставленной вами ссылке) для случаев нажатия Ctrl и Caps Lock . Caps Lock - это когда lParam &H14. Ctrl - это когда lParam &H11.

Чтобы получить / установить системное значение Caps Lock :

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/fb8308e5-7620-43cc-8ad8-be67d94708fa/

...