我有一个特殊的字符(/ @)我想转换为Keys。
我目前正在使用这个:
Keys k = (Keys)'/';
在调试时,我得到k等于:
LButton | RButton | MButton |返回|空间类型 - System.Windows.Forms.Keys
k的键码假设是111。
注意:代码适用于大写字母,例如:
Keys k = (Keys)'Z';
在这种情况下,k的密钥代码是90,这没关系。
我正在尝试找到一种将特殊字符转换为键的方法。 (或正确的密钥代码)
尝试使用以下方式全局发送密钥:
public static void SendKey(byte keycode)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}
SendKey((byte)Keys.{SomethingHere});
答案 0 :(得分:15)
这是一个老问题,但我用过这个:
Keys k = (Keys)char.ToUpper(c);
如果char值为 a (代码为97),则转换为 A (代码为65)会映射到 Keys.A 等等上...
希望这会对某人有所帮助。
答案 1 :(得分:3)
您无法从char转换为Keys。 Keys是一个标志枚举,表示在键盘上按下哪些物理键。您正在尝试的可能不是一个直截了当的问题需要解决。谁能说出用户使用的键盘以及哪些映射会在用户键盘及其语言环境中生成哪些特定字符?
您能更具体地了解自己的目标吗?您是否正在尝试教用户如何键入特殊字符或其他内容?
根据您的更新,您应该使用SendKeys类。
答案 2 :(得分:2)
它应该有用!
键o =(键)Enum.Parse(typeof(Keys),((int)e.KeyChar).ToString());
答案 3 :(得分:1)
我的方式只适用于字母和其他一些键。
string s = char.ToString(e.KeyChar);
这为您提供了等效的Keys字符串。像Keys.ToString()
的输出之类的东西。所以我们需要将s
转换为其等效的键!
(Keys) Enum.Parse(typeof(Keys), char.ToString(e.KeyChar).ToUpper());
祝你好运......
答案 4 :(得分:0)
据我所知,无法将Keys
枚举映射到char
。一个指定键代码和修饰符,对System.Windows.Forms.Control
有用,而另一个代表16位Unicode字符(U + 0000到U + ffff)。
对于所有不同的概念。
答案 5 :(得分:0)
在我看来,这是可读性方面的理想解决方案。
Keys key = (Keys) Enum.Parse(typeof(Keys), c.ToString(), ignoreCase: true);