5

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

我按照本指南学习如何抢购低级按键。这可以很好地覆盖我键盘上的普通字母字符,但我似乎需要更多的东西来使Caps Lock行为像Ctrl.

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

所以我在这里试图理解的是如何在最低级别上Caps Lock表现得像一把Ctrl钥匙,以及如何让普通Ctrl钥匙像一把钥匙一样Caps Lock

谢谢

4

1 回答 1

2

维护一个代表大写锁定预期状态的布尔值。按下大写锁定键时,将系统Caps Lock值设置回布尔值。当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;

在 HookCallback 中添加特殊逻辑(来自您提供的链接)以了解何时CtrlCaps Lock被击中。大写锁定是当 lParam 是&H14. Ctrl 是当 lParam 是&H11.

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

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

于 2009-08-29T10:20:01.023 回答