首页 > 解决方案 > 读取 UTF-8 文件,使用 SendInput 将内容传递给其他应用程序

问题描述

标签: c++winapiunicode

解决方案


  1. UTF-8 和 Windows 不是好朋友。几乎所有你要用 Windows 做的事情都需要 UTF-16。您需要将 UTF-8 字符串转换为 UTF-16。在 Windows 上,这将是“wstring”,但您应该使用正确的转换例程。唉,C++ 标准现在不能为您提供一个可以工作的标准,因此特定于 Windows 的标准MultiByteToWideChar似乎是一个不错的选择。

  2.  ip.ki.dwFlags = KEYEVENTF_UNICODE;
     if (isupper(c)) {
                 ip.ki.wVk = VK_LSHIFT;
    

    这种方式行不通。

    如果 dwFlags 成员指定 KEYEVENTF_UNICODE,则 wVk 必须为 0。

    Unicode 字符不能与 Shift 或其他修饰符组合。它们不是关键代码,它们是字符。Aa是不同的字符,无需发送移位按键来区分它们。您也不需要VkKeyScanA,因为您要发送 Unicode 字符,而不是扫描代码。


推荐阅读