如何以編程方式知道是否需要在文本框中輸入像'@'
這樣的字符Alt Gr或Shift按住?在文本框中輸入字符的關鍵筆畫?
這是名單Alt鍵的Gr:² ³ { [ ] } \ @ € ~ | µ
而對於移更長的名單:°!"§$%&/()=?*'>;:_
,信件和更多
Char.IsUpper(...)
幫助我的信件。但是我怎麼解決這個問題呢?我希望能夠正確檢查它們,如果可能的話,我想讓系統做到。
最後我會通過keybd_event
發送這些擊鍵。
(我使用的WinForms。)
如何以編程方式知道是否需要在文本框中輸入像'@'
這樣的字符Alt Gr或Shift按住?在文本框中輸入字符的關鍵筆畫?
這是名單Alt鍵的Gr:² ³ { [ ] } \ @ € ~ | µ
而對於移更長的名單:°!"§$%&/()=?*'>;:_
,信件和更多
Char.IsUpper(...)
幫助我的信件。但是我怎麼解決這個問題呢?我希望能夠正確檢查它們,如果可能的話,我想讓系統做到。
最後我會通過keybd_event
發送這些擊鍵。
(我使用的WinForms。)
我想通了。 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();
}
在沒有該字符的鍵的情況下具有'vksc == -1'。所以它只適用於一小部分人物。 – CodesInChaos
這甚至不適用於鍵盤佈局支持的所有字符。例如,我可以輸入'ü'作爲密碼,然後輸入'u'。亞洲鍵盤佈局完全失敗。 – CodesInChaos
@CodesInChaos它做我需要的。適用於我面前的鍵盤。當我需要弄清楚鍵盤佈局時,我會研究它。在這一點上,我不關心鍵盤佈局。當我問我的時候也沒有。 – Bitterblue
你可以找到使用鍵修飾符以下
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
{
//control key
}
if ((Control.ModifierKeys & Keys.Shift) == Keys.Alt)
{
//Alt
}
源鏈接
這兩個if塊看起來和我完全一樣嗎我是否缺少某些東西? – Ash
修改後的謝謝:) – Srinivas
-1這並不回答這個問題,問題是如何將字符映射到鍵或者如何模擬輸入一個角色,這個答案是關於檢測按鍵的。 – CodesInChaos
是這樣的WinForms或WPF? –
@KajalSinha我使用WinForms。不知道爲什麼這可能很重要。 – Bitterblue
不知道你想完成什麼,但是你可以將char轉換爲int,以便獲得該char的十進制表示形式。這種表示對於每個角色當然是獨一無二的。例如,ASCII字符@的十進制值是64.你可以用它來做什麼? – Jeroen1984