我正在寻找一种方法将string
的值转换为等效的System.Windows.Forms.Keys
项。然后,此值将与PressKey
一起用于模拟相应的Key。我尝试使用这样的KeyConverter
:
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void PressKey(System.Windows.Forms.Keys key, bool up)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
if (up)
{
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}
else
{
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
}
}
KeyConverter kc = new KeyConverter();
PressKey((System.Windows.Forms.Keys)kc.ConvertFromString(string), false);
我需要的是string
,例如"Enter"
转换为System.Windows.Forms.Keys.Enter
。但是KeyConverter
没有返回任何东西。有什么想法吗?
答案 0 :(得分:6)
使用Enum.Parse
将字符串转换为相应的枚举值:
public static Keys ConvertFromString(string keystr) {
return (Keys)Enum.Parse(typeof(Keys), keystr);
}
请注意,如果密钥字符串不在枚举中,Enum.Parse
将抛出ArgumentException
。如果您不想这样,请改用Enum.TryParse
,这会返回一个bool,表明转换是否成功。
答案 1 :(得分:4)
System.Windows.Forms.Keys
是一个枚举,因此您可以使用Enum.TryParse
:
Keys key;
Enum.TryParse("Enter", out key);
它是在.NET Framework 4.0中引入的,它比Enum.Parse
更具可读性,因为类型参数是自动推断的。
您可以检查布尔返回值以查看转换是否成功,从而无需捕获未定义枚举值的异常。