我如何使用win32 api读取击键?我也希望从德国变形金刚等国际键盘上看到它们。
感谢
答案 0 :(得分:3)
键盘按下和它们产生的字符之间存在差异。
在最低级别,您可以使用GetKeyboardState
轮询键盘状态。这通常是键盘记录恶意软件的方式,因为它需要最少的权限,无论焦点在哪里都可以看到所有内容。这种方法的问题(除了需要不断轮询)是你必须将键盘状态拼凑成击键然后键入字符流。您必须知道键盘是如何映射的,您必须保持移位键,控制键,alt键等的状态。您必须了解自动重复,死键以及可能的其他复杂情况。
如果您有权限,可以安装键盘钩子,正如Jens在答案中提到的那样。
如果你有焦点,并且你是一个控制台应用程序,你可以使用其中一个函数来读取标准输入。在Windows上,很难获得真正的Unicode输入。您通常会获得所谓的ANSI字符,这些字符对应于控制台窗口的当前代码页。如果您知道代码页,则可以使用MultiByteToWideChar
将单字节或多字节输入转换为UTF-16(Windows文档称为Unicode)。从那里你可以将它转换为UTF-8(带WideCharToMultiByte
)或你想要的任何其他Unicode编码。
如果你有焦点,并且你是一个GUI应用程序,你可以看到WM_KEYDOWN
(和朋友)的击键。您还可以使用WM_CHAR
(或来自WM_UNICHAR
的UTF-32)获得完全解析的UTF-16字符。如果您需要那些UTF-8,则必须进行转换。
答案 1 :(得分:1)
无论焦点如何,为了获得键盘输入,您可能需要挂钩键盘。
使用WH_KEYBOARD或WH_KEYBOARD_LL查看SetWindowsHookEx。在调用Unicode变体时添加一个W.