> 백엔드 개발 > C++ > 본문

SendInput을 사용하여 여러 문자를 보내고 유니코드 고려 사항을 관리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-25 04:15:29
원래의
562명이 탐색했습니다.

How to send multiple characters using SendInput and manage Unicode considerations?

SendInput을 사용하여 여러 문자 보내기

SendInput을 사용하여 문자를 보낼 때 여러 문자를 처리하는 방법을 이해하는 것이 중요합니다.

오류 사례: 잘못된 매개 변수

제공된 코드에서 두 문자를 전송하려고 시도했지만 잘못된 매개변수로 인해 실패했습니다. SendInput의 첫 번째 매개변수는 INPUT 구조의 수를 지정하지만 2를 보내려고 하는 동안 1을 전달했습니다.

올바른 접근 방식: 다중 INPUT 구조

여러 문자를 보내려면 다음의 배열이 필요합니다. 다중 INPUT 구조. 각 구조는 키 이벤트를 나타내며 각 캐릭터에 대해 두 개의 이벤트가 필요합니다:

  • Keydown 이벤트
  • Keyup 이벤트

따라서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!