如何獲得適用於WPF中給定的KeyDown事件的字符?如何獲得適合給定KeyDown事件的角色?
2
A
回答
3
public enum MapType : uint
{
MAPVK_VK_TO_VSC = 0x0,
MAPVK_VSC_TO_VK = 0x1,
MAPVK_VK_TO_CHAR = 0x2,
MAPVK_VSC_TO_VK_EX = 0x3,
}
[DllImport("user32.dll")]
public static extern bool GetKeyboardState(byte[] lpKeyState);
[DllImport("user32.dll")]
public static extern uint MapVirtualKey(uint uCode, MapType uMapType);
[DllImport("user32.dll")]
public static extern int ToUnicode(
uint wVirtKey,
uint wScanCode,
byte[] lpKeyState,
[Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 4)]
StringBuilder pwszBuff,
int cchBuff,
uint wFlags);
public static char GetCharFromKey(Key key)
{
char ch = ' ';
int virtualKey = KeyInterop.VirtualKeyFromKey(key);
byte[] keyboardState = new byte[256];
GetKeyboardState(keyboardState);
uint scanCode = MapVirtualKey((uint)virtualKey, MapType.MAPVK_VK_TO_VSC);
StringBuilder stringBuilder = new StringBuilder(2);
int result = ToUnicode((uint)virtualKey, scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0);
switch (result)
{
case -1:
break;
case 0:
break;
case 1:
{
ch = stringBuilder[0];
break;
}
default:
{
ch = stringBuilder[0];
break;
}
}
return ch;
}
0
並非所有的KeyDown事件都對應一個可見的字符 - 例如Backspace和Enter。您必須將事件arg的內容與您想要關聯的內容進行比較。例如,在我的美國QUERTY鍵盤上,左上角的按鍵是反撥號,但它可能看起來像別的鍵盤。
2
試試這個:
var virtualKey = (uint)KeyInterop.VirtualKeyFromKey(e.Key);
var keyCode = MapVirtualKey(virtualKey, 0);
導入功能MapVirtualKey
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
0
private void UserControl1_KeyDown_1(object sender, KeyEventArgs e)
{
FieldInfo field = e.GetType().GetField
(
"_scanCode",
BindingFlags.NonPublic |
BindingFlags.Instance
);
Int32 scancode = (Int32)field.GetValue(e);
char c = (char)scancode;
}
+0
這段代碼的一些解釋很好。 – 2012-10-02 12:32:15
相關問題
- 1. 我如何獲得與給定實體關聯的CRM角色
- 2. 如何獲得懸停的灰色顏色合適的尺寸
- 3. Zend_ACL如何獲得角色?
- 4. 如何獲得角色直到達到特定角色?
- 5. 如何獲得所收到的keydown事件中TinyMCE的
- 6. 如何獲得全球的MouseMove而的KeyDown事件在Silverlight
- 7. 如何捕獲標籤的keydown事件?
- 8. 如何獲得聚合物組分內元素的實際事件keydown目標?
- 9. 如何在haskell中獲得keydown和keyup事件?
- 10. MeasureCharacterRanges不適合角色?
- 11. 如何獲得用戶的角色?
- 12. 如何獲得2個其他角色之間的角色?
- 13. 如何獲得給定事件的上一行數
- 14. keydown事件如何工作?
- 15. 未捕獲PyGame KEYDOWN事件
- 16. 捕獲keydown事件iframe
- 17. jQuery腳本非常適合單擊,不支持keydown事件
- 18. 綁定KeyDown事件Silverlight
- 19. CF keyDown事件(定時)
- 20. 如何獲得特定角色的索引和復現?
- 21. 如何獲得來自特定角色的所有用戶
- 22. 我怎樣才能在鉻上的div上獲得keydown事件?
- 23. 獲取組合用戶控件以處理KeyDown事件
- 24. 如何從KeyDown事件窗口獲得按下的字符電話
- 25. ASPxTextBox KeyDown事件
- 26. jQuery keydown事件
- 27. keydown事件:與「@」
- 28. Keydown事件Javascript?
- 29. 在keydown事件
- 30. DataGridView KeyDown事件
我是知道的。我只是在尋找類似於WinForm的KeyPress事件。提供角色的東西(如果可用)。我發現了一個工作,儘管很麻煩。 – Jordan 2011-01-27 15:40:57