使用C#使用Ctrl覆盖Caps Lock

时间:2009-08-28 15:11:52

标签: c# capslock remap ctrl

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

我跟着this guide学习如何抢购低级按键。这适用于覆盖,例如键盘上的正常字母字符,但我似乎还需要更多一点来使 Caps Lock Ctrl 一样。

我的理解(可能不正确)是 Caps Lock Ctrl 处理完全不同,因为 Caps Lock 是一个切换键,而 Ctrl 只是一个“正常”键。

所以我在这里想要理解的是如何使 Caps Lock 在最低级别上表现得像 Ctrl 键,以及如何正常< kbd> Ctrl 键就像一个 Caps Lock 键。

由于

1 个答案:

答案 0 :(得分:2)

维持一个bool,代表预期的大写锁定状态。 当大写锁定键被命中时,将系统的大写锁定值设置回bool的值。 当命中 Ctrl 时,切换大写锁定的预期状态并将系统的上限锁定值设置为布尔值。

使用以下命令设置初始预期状态:

[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;

在点击 Ctrl Caps Lock 时,在HookCallback中添加特殊逻辑(来自您提供的链接)。大写锁定是指lParam为&H14时。当lParam为&H11时,Ctrl为。

获取/设置系统的 Caps Lock 值:

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