如何检查换档键是否保持在C#档?

如何检查换档键是否保持在C#档?,c#,virtual,keycode,uppercase,lowercase,C#,Virtual,Keycode,Uppercase,Lowercase,我正在编写一个方法,该方法应该通过接收virtualcodes来处理小写/大写字母(正如您所知,virtualcode总是返回一个代码,并且不能单独呈现大写或小写字母)。如果有人感兴趣,我通过使用控件.IsKeyLocked和控件.ModifierKeys类找到了一个解决方案: bool isCapsLockOn = Control.IsKeyLocked(Keys.CapsLock); bool isShiftOn = Control.ModifierKeys == Keys.Shift;

我正在编写一个方法,该方法应该通过接收virtualcodes来处理小写/大写字母(正如您所知,virtualcode总是返回一个代码,并且不能单独呈现大写或小写字母)。如果有人感兴趣,我通过使用
控件.IsKeyLocked
控件.ModifierKeys
类找到了一个解决方案:

bool isCapsLockOn = Control.IsKeyLocked(Keys.CapsLock);
bool isShiftOn = Control.ModifierKeys == Keys.Shift;
我尝试实现的第一个解决方案是使用Control.IsKeyLocked()处理shift键,这是在我发现IsKeyLocked应仅用于可以实际锁定的键(如numlock、capslock等)后不久。以下代码不起作用:

bool isLShiftOn = Control.IsKeyLocked(Keys.LShiftKey);
bool isRShiftOn = Control.IsKeyLocked(Keys.RShiftKey);

好的,我通过使用Control.IsKeyLocked和Control.ModifierKeys以及if语句处理caps lock是否打开/关闭以及是否实际按下了shift,找到了解决问题的方法(当caps lock打开/按下shift时处理小写,当caps lock关闭/按下shift时处理大写,反之亦然)。我现在很好奇为什么上面的代码不工作,甚至下面的代码也没有执行。为什么编译器没有抛出错误?我想这会以某种方式使应用程序处于“等待”状态等待换档钥匙锁定的状态,该状态无法发生。

检查此项answer@RredCat当前位置请阅读整篇文章。我不是在寻找解决方案,而是想解释为什么我尝试的第一件事没有成功,以及“幕后”实际发生了什么.IMO您的整个方法是有缺陷的。键和字符之间没有微不足道的关系。您计划如何处理不同的键盘布局(包括死键、法语键盘上数字的移位、Alt+Gr组合)或者更糟糕的IMEs?@CodesInChaos我不知道。我在看windows API的toAscii和toUnicode函数,但找不到一个像样的例子和如何使用它们的解释。这就是为什么我提出了这个方法,至少在英文布局上是有效的。一个好的方法是处理
WM_CHAR
,而不是处理raw钥匙。