我正在使用C#和Visual Studio 2008编写键盘映射器(还有另一个,我知道)。

我跟随this guide学习如何捕捉低级按键。这对于覆盖例如键盘上的普通字母字符,但我似乎还需要更多一些功能才能使Caps Lock像Ctrl一样起作用。

我的理解(可能是错误的)是,由于Caps Lock是切换键,而Ctrl只是“普通”键,因此Caps Lock和Ctrl的处理方式完全不同。

因此,我想在这里理解的是如何使Caps Lock在最低级别上像Ctrl键一样工作,以及如何使普通Ctrl键像Caps Lock键一样工作。

谢谢

最佳答案

保持代表大写锁定的预期状态的 bool 值。
当按下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时添加特殊的逻辑。大写锁定是当lParam为&H14时。 Ctrl是lParam为&H11时。

要获取/设置系统的Caps Lock值,请执行以下操作:

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

10-06 12:19