How to convert a character to key code?

前端 未结 4 821
名媛妹妹
名媛妹妹 2020-12-11 01:35

How can I convert backslash key (\'\\\') to key code?

On my keyboard backslash code is 220, but the method below

(int)\'\\\\\'

ret

4条回答
  •  鱼传尺愫
    2020-12-11 02:03

    You can P/Invoke VkKeyScan() to convert a typing key code back to a virtual key. Beware that the modifier key state is important, getting "|" requires holding down the shift key on my keyboard layout. Your function signature doesn't allow for this so I just made something up:

    public static Keys ConvertCharToVirtualKey(char ch) {
        short vkey = VkKeyScan(ch);
        Keys retval = (Keys)(vkey & 0xff);
        int modifiers = vkey >> 8;
    
        if ((modifiers & 1) != 0) retval |= Keys.Shift;
        if ((modifiers & 2) != 0) retval |= Keys.Control;
        if ((modifiers & 4) != 0) retval |= Keys.Alt;
    
        return retval;
    }
    
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern short VkKeyScan(char ch);
    

    Also beware of keyboard layouts that need to use dead keys (Alt+Gr) to generate typing keys. This kind of code is really best avoided.

提交回复
热议问题