SendInput을 사용하여 문자를 보낼 때 여러 문자를 처리하는 방법을 이해하는 것이 중요합니다.
제공된 코드에서 두 문자를 전송하려고 시도했지만 잘못된 매개변수로 인해 실패했습니다. SendInput의 첫 번째 매개변수는 INPUT 구조의 수를 지정하지만 2를 보내려고 하는 동안 1을 전달했습니다.
여러 문자를 보내려면 다음의 배열이 필요합니다. 다중 INPUT 구조. 각 구조는 키 이벤트를 나타내며 각 캐릭터에 대해 두 개의 이벤트가 필요합니다:
따라서 2개를 보내려면 문자를 사용하려면 4개의 INPUT 구조가 필요합니다.
KEYEVENTF_UNICODE 플래그를 사용할 때 가상 키 대신 실제 유니코드 코드 포인트를 지정해야 합니다. 또한 UTF-16 서로게이트 쌍에는 두 세트의 down/up INPUT이 필요합니다.
다음은 SendInput을 사용하여 유니코드 문자열을 보내는 함수의 예입니다.
<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을 사용하여 여러 문자를 보내고 유니코드 고려 사항을 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!