2014-07-02 28 views
2

如何以編程方式知道是否需要在文本框中輸入像'@'這樣的字符Alt GrShift按住?在文本框中輸入字符的關鍵筆畫?

這是名單Alt鍵的Gr² ³ { [ ] } \ @ € ~ | µ
而對於更長的名單:°!"§$%&/()=?*'>;:_,信件和更多

Char.IsUpper(...)幫助我的信件。但是我怎麼解決這個問題呢?我希望能夠正確檢查它們,如果可能的話,我想讓系統做到。

最後我會通過keybd_event發送這些擊鍵。
(我使用的WinForms。)

+0

是這樣的WinForms或WPF? –

+4

@KajalSinha我使用WinForms。不知道爲什麼這可能很重要。 – Bitterblue

+0

不知道你想完成什麼,但是你可以將char轉換爲int,以便獲得該char的十進制表示形式。這種表示對於每個角色當然是獨一無二的。例如,ASCII字符@的十進制值是64.你可以用它來做什麼? – Jeroen1984

回答

1

我想通了。 VkKeyScan是關鍵。
VkKeyScanEx爲KeyboardLayouts等)

一些測試代碼:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
static extern short VkKeyScan(char ch); 

static void Main(string[] args) 
{ 
    char[] chars = "²³{[]}\\@€~|µ °!`\"§$%&/()=?*'>;:_".ToCharArray(); 
    Console.WriteLine("char\talt\tcontrol\tshift" + Environment.NewLine + "-----------------------------"); 

    for (int i = 0; i < chars.Length; i++) 
    { 
     char ch = chars[i]; 
     short vksc = VkKeyScan(ch); 

     bool alt = (vksc & 1024) == 1024; 
     bool control = (vksc & 512) == 512; 
     bool shift = (vksc & 256) == 256; 

     Console.WriteLine(ch + "\t" + alt + "\t" + control + "\t" + shift); 
    } 

    Console.ReadKey(); 
} 
+1

在沒有該字符的鍵的情況下具有'vksc == -1'。所以它只適用於一小部分人物。 – CodesInChaos

+1

這甚至不適用於鍵盤佈局支持的所有字符。例如,我可以輸入'ü'作爲密碼,然後輸入'u'。亞洲鍵盤佈局完全失敗。 – CodesInChaos

+0

@CodesInChaos它做我需要的。適用於我面前的鍵盤。當我需要弄清楚鍵盤佈局時,我會研究它。在這一點上,我不關心鍵盤佈局。當我問我的時候也沒有。 – Bitterblue

0

你可以找到使用鍵修飾符以下

if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) 
{ 
    //control key 
} 

if ((Control.ModifierKeys & Keys.Shift) == Keys.Alt) 
{ 
    //Alt 
} 

源鏈接

Determine Which Modifier Key Was Pressed

Modifier Key Details

+1

這兩個if塊看起來和我完全一樣嗎我是否缺少某些東西? – Ash

+0

修改後的謝謝:) – Srinivas

+0

-1這並不回答這個問題,問題是如何將字符映射到鍵或者如何模擬輸入一個角色,這個答案是關於檢測按鍵的。 – CodesInChaos

相關問題