none
window的keyup事件 KeyEventArgs 怎么转换成string RRS feed

答案

  • e.Key.ToString()这样返回的string不是我想要的...比如按下6 会返回NumPad6和D6,难道这里需要substring么

    有没有办法获取到ascii码值....

        [DllImport("User32.dll")]
        public static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpChar, int uFlags);
    
        [DllImport("User32.dll")]
        public static extern int GetKeyboardState(byte[] pbKeyState);
    
        private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
        {
          string str="";
          int key = KeyInterop.VirtualKeyFromKey(e.Key); // virtual key code
    
          byte[] lpKeyState = new byte[256];
          GetKeyboardState(lpKeyState);
          byte[] lpChar = new byte[2];
          if (ToAscii(key, 0, lpKeyState, lpChar, 0) == 1)
          {
            str =Char.ConvertFromUtf32( lpChar[0]);
          }
          Console.WriteLine(str);
        }

    http://msdn.microsoft.com/zh-cn/library/system.windows.input.keyinterop_methods.aspx

    and ToAscii function: http://msdn.microsoft.com/en-us/library/ms646316(VS.85).aspx


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年3月27日 15:48
    版主

全部回复

  • 价格断点,你就知道 e里面哪个属性可以得到你按下的那个键了:

        private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
        {
          string str = e.Key.ToString();
        }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月27日 4:55
    版主
  • e.Key.ToString()这样返回的string不是我想要的...比如按下6 会返回NumPad6和D6,难道这里需要substring么

    有没有办法获取到ascii码值....

    2012年3月27日 8:56
  • e.Key.ToString()这样返回的string不是我想要的...比如按下6 会返回NumPad6和D6,难道这里需要substring么

    有没有办法获取到ascii码值....

        [DllImport("User32.dll")]
        public static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpChar, int uFlags);
    
        [DllImport("User32.dll")]
        public static extern int GetKeyboardState(byte[] pbKeyState);
    
        private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
        {
          string str="";
          int key = KeyInterop.VirtualKeyFromKey(e.Key); // virtual key code
    
          byte[] lpKeyState = new byte[256];
          GetKeyboardState(lpKeyState);
          byte[] lpChar = new byte[2];
          if (ToAscii(key, 0, lpKeyState, lpChar, 0) == 1)
          {
            str =Char.ConvertFromUtf32( lpChar[0]);
          }
          Console.WriteLine(str);
        }

    http://msdn.microsoft.com/zh-cn/library/system.windows.input.keyinterop_methods.aspx

    and ToAscii function: http://msdn.microsoft.com/en-us/library/ms646316(VS.85).aspx


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年3月27日 15:48
    版主
  • 可以了,3Q

    2012年3月28日 1:14