使用 SendInput 发送字符时,了解如何处理多个字符非常重要。
您提供的代码尝试发送两个字符,但由于参数不正确而失败。 SendInput 的第一个参数指定 INPUT 结构的数量,但您在尝试发送 2 时传入了 1。
要发送多个字符,您需要一个数组多个 INPUT 结构。每个结构代表一个按键事件,对于每个字符,您需要两个事件:
因此,要发送 2字符,您需要 4 个 INPUT 结构。
使用 KEYEVENTF_UNICODE 标志时,您需要指定实际的 Unicode 代码点而不是虚拟键。此外,UTF-16 代理对需要两组向下/向上 INPUT。
以下是使用 SendInput 发送 Unicode 字符串的示例函数:
<code class="c++">#include <vector> #include <string> void SendInputString(const std::wstring &str) { int len = str.length(); if (len == 0) return; std::vector<INPUT> in(len * 2); ZeroMemory(&in[0], in.size() * sizeof(INPUT)); int i = 0, idx = 0; while (i < len) { WORD ch = (WORD)str[i++]; if ((ch < 0xD800) || (ch > 0xDFFF)) { in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = ch; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx] = in[idx - 1]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; } else { in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = ch; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx].type = INPUT_KEYBOARD; in[idx].ki.wScan = (WORD)str[i++]; in[idx].ki.dwFlags = KEYEVENTF_UNICODE; ++idx; in[idx] = in[idx - 2]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; in[idx] = in[idx - 2]; in[idx].ki.dwFlags |= KEYEVENTF_KEYUP; ++idx; } } SendInput(in.size(), &in[0], sizeof(INPUT)); }</code>
以上是如何使用 SendInput 发送多个字符并管理 Unicode 注意事项?的详细内容。更多信息请关注PHP中文网其他相关文章!