繁体   English   中英

c ++ win32从键盘获取utf8 char

[英]c++ win32 get utf8 char from keyboard

我如何使用win32 api读取击键? 我也希望从德国变形金刚等国际键盘上看到它们。

谢谢

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

在最低级别,您可以使用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,则必须进行转换。

无论焦点如何,要获得键盘输入,您可能需要挂钩键盘。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM