想要使用 windows api 从键盘获取输入
Posted
技术标签:
【中文标题】想要使用 windows api 从键盘获取输入【英文标题】:Want to get input from Keyboard using windows api's 【发布时间】:2015-02-03 07:32:28 【问题描述】:我想使用 windows api 获取键盘输入(单个)
我有两个找到的选项
1.keybd_event() of user32.dll
VOID WINAPI keybd_event(
_In_ BYTE bVk,
_In_ BYTE bScan,
_In_ DWORD dwFlags,
_In_ ULONG_PTR dwExtraInfo
);
2 user32.dll 的 SendInput()
UINT WINAPI SendInput(
_In_ UINT nInputs,
_In_ LPINPUT pInputs,
_In_ int cbSize
);
我想在我的 WPF 应用程序中导入它们,我应该使用哪一个??
【问题讨论】:
这些函数生成输入事件消息。那是你要的吗?听起来不像。 Oo ..ok @David ...是的,我不希望那样...我只想通过使用本机 api 从键盘获取输入 请您解决问题以使其 100% 清楚您想要什么。请删除提及这两个不相关的功能。还请解释为什么您不能使用内置 WPF 工具的标准来接收输入。 【参考方案1】:两种选择。
注册热键
// Registers a hot key with Windows.
[DllImport(“user32.dll”)]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
// Unregisters the hot key with Windows.
[DllImport(“user32.dll”)]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
由于您的目标是 WPF,因此您还需要将 WndProc 添加到您的 HwndSource
。
此问题的更多信息:How to handle WndProc messages in WPF?
SetWindowsHookEx
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool UnhookWindowsHookEx(IntPtr hhk);
更多信息来自 PInvoke.net:SetWindowsHookEx (user32)
【讨论】:
icame 穿过这个delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);
一切都很好,但它所采用的参数是什么(// 我知道有类型但我应该传递的值是什么)代码=? w参数=? lParam=?
@AVIKDUTTA 参数由 Windows 消息泵/队列自动填充。您需要在此处了解 WndProc 的工作原理:msdn.microsoft.com/en-us/library/…以上是关于想要使用 windows api 从键盘获取输入的主要内容,如果未能解决你的问题,请参考以下文章