2009-08-28 5 views
5

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

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

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

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

Благодаря

+0

Я хотел бы сказать, почему вы хотите этого? Если вы не хотите, чтобы данные вводились во всех кешках, введите шаг ввода, который изменит этот случай. – cjb110

ответ

2

Поддерживайте логическое значение, которое представляет ожидаемое состояние Caps Lock. Когда нажата клавиша блокировки крышки, установите значение системных замков в значение Caps Lock, чтобы вернуть значение bool. При удалении Ctrl переключает ожидаемое состояние блокировки колпачков и устанавливает значение блокировки крышки системы в значение 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 - это когда lParam - &H14. Ctrl - это когда lParam - &H11.

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

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