6

我正在寻找一种将 a 的值转换为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没有返回任何东西。有什么想法吗?

4

2 回答 2

7

用于Enum.Parse将字符串转换为对应的枚举值:

public static Keys ConvertFromString(string keystr) {
    return (Keys)Enum.Parse(typeof(Keys), keystr);
}

请注意,如果密钥字符串不在枚举中,Enum.Parse则会抛出一个。ArgumentException如果您不希望这样,请改用Enum.TryParse它,它会返回一个布尔值,指示转换是否成功。

于 2012-09-16T18:27:48.783 回答
5

System.Windows.Forms.Keys是一个枚举,所以你可以使用 Enum.TryParse

Keys key;
Enum.TryParse("Enter", out key);

它是在 .NET 框架 4.0 中引入的,它比Enum.Parse自动推断类型参数更具可读性。

您可以检查布尔返回值以查看转换是否成功,从而无需为未定义的枚举值捕获异常。

于 2012-09-16T18:29:06.307 回答