6

stringaの値を同等のアイテムに変換する方法を探していSystem.Windows.Forms.Keysます。次に、この値を使用しPressKeyて、対応するキーをシミュレートします。私はこのようなものを使って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.EnterKeyConverter

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);

これは.NETFramework4.0で導入されEnum.Parse、typeパラメーターが自動的に推測されるためよりもはるかに読みやすくなっています。

ブール値の戻り値をチェックして、変換が成功したかどうかを確認できます。これにより、未定義の列挙値の例外をキャッチする必要がなくなります。

于 2012-09-16T18:29:06.307 に答える