2013-06-26 50 views
1

是否有辦法找出哪些Keys或Keys組合必須按下才能獲得特定的字符。對'''''''這樣的字符很容易,但對其他字符卻不那麼容易,比如'。','_'或'ü'。任何想法 ?謝謝。從字符到system.windows.forms.keys

+0

也許這可以幫助的http://msdn.microsoft.com/en-us/library/ms646329 – V4Vendetta

+0

可能重複[如何將一個字符轉換到等價System.Windows.Input.Key枚舉值?] (http://stackoverflow.com/questions/544141/how-to-convert-a-character-in-to-equivalent-system-windows-input-key-enum-value) –

+0

給菲利普:不是重複的系統。 Windows.Input.Key!= System.Windows.Forms.Keys,但有趣的鏈接。謝謝 – user1472131

回答

0

感謝您發佈的鏈接,我來到了一個解決方案,我張貼在這裏。輸入是一個字符,輸出是System.Windows.Forms.Keys的列表。第一個鍵是實際的鍵,列表中的其他鍵(如果有的話)是修飾鍵。

[DllImport("user32.dll")] 
    static extern short VkKeyScan(char ch); 

    public static List<Keys> FromCharacterToKeys(char c) 
    { 
     var key = BitConverter.GetBytes(VkKeyScan(c)); 
     if (key[1] > 0) 
     { 
      var list = new List<Keys> {(Keys) key[0]}; 
      list.AddRange(ConvertModifierByte(key[1])); 
      return list; 
     } 
     else 
     { 
      return new List<Keys> { (Keys)key[0] }; 
     }  
    } 

    private static List<Keys> ConvertModifierByte(byte modifier) 
    { 
     switch ((short)modifier) 
     { 
      case 1: 
       return new List<Keys> { Keys.Shift }; 
      case 2: 
       return new List<Keys> { Keys.Control }; 
      case 4: 
       return new List<Keys> { Keys.Alt }; 
      case 6: 
       return new List<Keys> { Keys.Control, Keys.Alt }; 
      default: 
       return new List<Keys> { Keys.None }; 
     } 
    }