【发布时间】:2019-02-15 01:45:46
【问题描述】:
如何通过(Keys) Marshal.ReadInt32 (lParam)+勾选Shift同时捕获大小键。
我想学习如何捕获所有键盘按键,但我不知道如何正确操作。
public delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
private static readonly LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
try
{
Console.WriteLine((Keys)Marshal.ReadInt32(lParam));
}
catch (AccessViolationException ex) { Console.WriteLine($"Error: {ex.ToString()}"); }
}
return NativeMethods.CallNextHookEx(_hookID, nCode, wParam, lParam);
}
很多事情是无法理解的。以及如何定义字符键?
是否可以将键转换为UnicodeEx?
【问题讨论】:
-
只检查是否按下了大写或移位。但肯定有更好的方法
-
@sLw,你能举个例子吗?
-
即使按下 shift 键,你得到的 int 也可能不是那种可以是“大写”的东西。这感觉就像您应该能够以某种方式获得 Char 表示形式,例如
isUpper()
标签: c# hook keyboard-hook