Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert String to corresponding Forms.Keys value?

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?

like image 577
Ziad Akiki Avatar asked Sep 16 '12 18:09

Ziad Akiki


2 Answers

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.

like image 81
nneonneo Avatar answered Nov 14 '22 23:11

nneonneo


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.

like image 31
Adam Avatar answered Nov 15 '22 01:11

Adam