>  기사  >  백엔드 개발  >  SendInput을 사용하여 여러 문자를 보내는 방법: 매개변수 및 유니코드 처리 문제 해결?

SendInput을 사용하여 여러 문자를 보내는 방법: 매개변수 및 유니코드 처리 문제 해결?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 01:41:28802검색

How to Send Multiple Characters Using SendInput:  Addressing Parameter and Unicode Handling Issues?

여러 문자 전송을 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.