【问题标题】:Convert A Char To Keys将字符转换为键
【发布时间】:2011-09-06 07:26:46
【问题描述】:

我有一个特殊的字符 (/@),我想将其转换为键。

我目前正在使用这个:

Keys k = (Keys)'/';

在调试时,我得到 k 等于:

L按钮 |右按钮 |按钮 |返回 |空间类型 - System.Windows.Forms.Keys

k 的键码应该是 111。

注意:该代码适用于大写字母,例如:

Keys k = (Keys)'Z';

这样的话,k的key code是90,就ok了。

我正在尝试找到一种将特殊字符转换为键的方法。 (或他们正确的关键代码)

尝试使用全局发送密钥:

public static void SendKey(byte keycode)
    {
        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;
        keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
        keybd_event(keycode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
    }

SendKey((byte)Keys.{SomethingHere});

【问题讨论】:

  • 请问您要如何处理此转换?

标签: c# char key special-characters


【解决方案1】:

在我看来,就可读性而言,这是理想的解决方案。

Keys key = (Keys) Enum.Parse(typeof(Keys), c.ToString(), ignoreCase: true);

【讨论】:

    【解决方案2】:

    我的方法只适用于字母和其他一些键。

    string s = char.ToString(e.KeyChar);
    

    这会为您提供等效的 Keys 字符串。类似于Keys.ToString() 的输出。所以我们只需要将s 转换为等效的密钥!

    (Keys) Enum.Parse(typeof(Keys), char.ToString(e.KeyChar).ToUpper());
    

    祝你好运……

    【讨论】:

      【解决方案3】:

      这是个老问题,但我用了这个:

      Keys k = (Keys)char.ToUpper(c);
      

      如果 char 值为 a(代码为 97),则转换为 A(代码为 65)映射到 Keys.A 等等上...

      希望这会对某人有所帮助。

      【讨论】:

      • 这实际上是唯一可行的解​​决方案,表明 char 确实可以转换为键。
      • 这很好用,除了当你将它推送到 User32.DLL 中的键盘输入命令时,Keys 枚举只有小写值,例如使用臭名昭著的 KeyboardSimulator 库。为了支持大写字母,需要检查 if(char.IsUpper(c)) 如果是,则发出 Keys.ShiftKey 按键按下事件,在字母上执行按键事件,然后在 shift 时执行按键向上事件,这就是键盘将小写转换为大写的方式。
      【解决方案4】:

      您不能从 char 转换为 Keys。 Keys 是一个标志枚举,表示在键盘上按下了哪些物理键。您正在尝试解决的问题可能不是一个简单的问题。谁来说用户使用什么键盘,什么映射在用户的键盘和他们的语言环境中生成什么特定字符?

      您能否更具体地说明您的目标?您是在教用户如何输入特殊字符或其他内容吗?

      根据您的更新,您应该使用SendKeys 类。

      【讨论】:

      • 哇,这为我省去了一些麻烦,但我认为它不会起作用,因为我将它发送到另一个可能已经保护自己的应用程序。
      • @user779444:我曾经做过类似的事情,但只是想让您知道,当计算机被锁定时,密钥将无法通过。例如,如果您启动程序模拟键并锁定计算机([Windows 键] + L),它将停止工作。
      • 根据 Vano Maisuradze 的回答,确实可以从字符转换为键。
      • SendKeys 没用,因为它不能将密钥发送到进程。它只能将密钥发送到“活动窗口”,这是不可靠的。我们需要一种更简单的方法来将字符串映射到击键以发送到应用程序。自动启动 bash 窗口并将数据输入其中是非常困难的。
      【解决方案5】:

      应该可以了!

      Keys o = (Keys)Enum.Parse(typeof(Keys), ((int)e.KeyChar).ToString());

      【讨论】:

      • 对不起,仍然得到 LButton |右按钮 |按钮 |返回 |空间
      【解决方案6】:

      据我所知,没有办法将Keys 枚举映射到char。一个指定键码和修饰符,对System.Windows.Forms.Control 有用,另一个表示 16 位 Unicode 字符(U+0000 到 U+ffff)。

      所有不同的概念。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2013-10-05
        相关资源
        最近更新 更多