I am looking for a way to convert the value of a string
to the equivalent System.Windows.Forms.Keys
item. Then this value will be used with PressKey
to simulate the corresponding Key. I tried using the KeyConverter
like this:
[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);
What I need is a string
like "Enter"
to be converted to System.Windows.Forms.Keys.Enter
. But KeyConverter
is not returning anything. Any thoughts?
Use Enum.Parse
to convert a string into the corresponding enumeration value:
public static Keys ConvertFromString(string keystr) {
return (Keys)Enum.Parse(typeof(Keys), keystr);
}
Note that Enum.Parse
will throw an ArgumentException
if the key string is not in the enumeration. If you don't want that, use Enum.TryParse
instead, which returns a bool indicating if the conversion was successful.
System.Windows.Forms.Keys
is an enum, so you can use Enum.TryParse
:
Keys key;
Enum.TryParse("Enter", out key);
It was introduced with .NET framework 4.0 and it's a lot more readable than Enum.Parse
because the type parameter is inferred automatically.
You can check the boolean return value to see if the conversion succeeded, eliminating the need to catch an exception for undefined enum values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With