4

我将如何使用 win32 api 读取击键?我也想从德国变音符号等国际键盘上看到它们。

谢谢

4

2 回答 2

3

键盘按下和它们生成的字符之间存在差异。

在最低级别,您可以使用 轮询键盘状态GetKeyboardState。这通常是键盘记录恶意软件的做法,因为它需要最少的权限并且无论焦点在哪里都能看到所有内容。这种方法的问题(除了需要不断轮询)是您必须将键盘状态拼凑成击键,然后将击键组合成字符流。您必须知道键盘是如何映射的,您必须保持 shift 键、控制键、alt 键等的状态。您必须了解自动重复、死键以及可能的其他并发症。

如果您有特权,您可以安装键盘挂钩,正如 Jens 在他的回答中提到的那样。

如果你有焦点,并且你是一个控制台应用程序,你可以使用其中一个函数从标准输入中读取。在 Windows 上,很难获得真正的 Unicode 输入。您通常会得到所谓的 ANSI 字符,它们对应于控制台窗口的当前代码页。如果您知道代码页,则可以使用MultiByteToWideChar将单字节或多字节输入转换为 UTF-16(Windows 文档称为 Unicode)。从那里您可以将其转换为 UTF-8(带有WideCharToMultiByte)或您想要的任何其他 Unicode 编码。

如果您有焦点,并且您是一个 GUI 应用程序,您可以看到与WM_KEYDOWN(和朋友)的击键。您还可以使用WM_CHAR(或 UTF-32 from WM_UNICHAR)获得完全解析的 UTF-16 字符。如果您需要其中的 UTF-8,则必须进行转换。

于 2010-05-06T17:04:06.270 回答
1

要获得键盘输入而不考虑焦点,您可能需要挂钩键盘。

用 WH_KEYBOARD 或 WH_KEYBOARD_LL查看SetWindowsHookEx 。将 W 添加到 Unicode 变体的调用中。

于 2010-05-04T14:15:19.503 回答