Apabila menghantar aksara menggunakan SendInput, adalah penting untuk memahami cara mengendalikan berbilang aksara.
Kod yang anda berikan telah cuba menghantar dua aksara tetapi gagal kerana parameter yang salah. Parameter pertama SendInput menentukan bilangan struktur INPUT, tetapi anda telah memasukkan 1 semasa cuba menghantar 2.
Untuk menghantar berbilang aksara, anda memerlukan tatasusunan berbilang struktur INPUT. Setiap struktur mewakili peristiwa penting, dan untuk setiap watak, anda memerlukan dua acara:
Oleh itu, untuk menghantar 2 aksara, anda memerlukan 4 struktur INPUT.
Apabila menggunakan bendera KEYEVENTF_UNICODE, anda perlu menentukan titik kod Unikod sebenar dan bukannya kekunci maya. Selain itu, pasangan pengganti UTF-16 memerlukan dua set INPUT bawah/atas.
Berikut ialah contoh fungsi untuk menghantar rentetan Unicode menggunakan 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>
Atas ialah kandungan terperinci Bagaimana untuk menghantar berbilang aksara menggunakan SendInput dan mengurus pertimbangan Unicode?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!