여러 문자 전송을 위한 SendInput 사용 문제 해결
SendInput은 키보드 입력을 시뮬레이션하는 데 사용되는 함수입니다. 그러나 주어진 예에는 결정적인 오해가 있습니다.
SendInput의 첫 번째 매개 변수는 전달되는 INPUT 구조의 수를 지정합니다. 원본 코드에서는 INPUT 구조가 하나만 정의되어 있지만 함수는 이 잘못된 매개변수 수로 인해 입력이 전송되지 않습니다.
접근 방식 수정
SendInput을 사용하여 여러 문자를 보내려면 다음을 수행합니다. INPUT 구조의 배열을 만들어야 합니다. 각 캐릭터에 대해 두 개의 구조 세트가 필요합니다. 하나는 keydown 이벤트용이고 다른 하나는 keyup 이벤트용입니다. 따라서 두 문자를 보내려면 총 4개의 INPUT 구조가 필요합니다.
또는 KEYEVENTF_UNICODE 플래그를 사용하여 유니코드 문자를 직접 보낼 수 있습니다. 그러나 UTF-16 서로게이트 쌍의 경우 코드 단위를 전송하려면 두 세트의 keydown/keyup 이벤트를 사용해야 합니다.
예:
다음은 KEYEVENTF_UNICODE 플래그를 사용하여 유니코드 문자 문자열을 보내는 방법을 보여주는 스니펫입니다.
<code class="cpp">#include <vector> #include <string> void SendUnicodeString(const std::wstring &str) { int length = str.length(); std::vector<INPUT> input(length * 2); int index = 0; for (int i = 0; i < length; ++i) { WORD character = static_cast<WORD>(str[i]); input[index].type = INPUT_KEYBOARD; input[index].ki.wScan = character; input[index].ki.dwFlags = KEYEVENTF_UNICODE; ++index; input[index] = input[index - 1]; input[index].ki.dwFlags |= KEYEVENTF_KEYUP; ++index; } SendInput(input.size(), &input[0], sizeof(INPUT)); }</code>
이 코드는 필요한 경우 UTF-16 서로게이트 쌍을 고려하여 지정된 유니코드 문자열을 키보드 입력으로 보냅니다. .
위 내용은 SendInput을 사용하여 여러 문자를 보내는 방법: 매개변수 및 유니코드 처리 문제 해결?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!