想要使用 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 从键盘获取输入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 windows api 获取输入

c++从键盘输入字符串并保存成二进制文件

windows中哪些API能了解用户是不是在使用鼠标或者键盘?

openGL获取键盘输入的问题

c语言--键盘输入数字,输出汉字读法

phpmyadmin 与 java。有没有办法从 phpmyadmin 获取字符串并将其与键盘输入进行比较?