首頁 > 後端開發 > C++ > 如何使用 SendInput 發送多個字元:解決參數和 Unicode 處理問題?

如何使用 SendInput 發送多個字元:解決參數和 Unicode 處理問題?

Mary-Kate Olsen
發布: 2024-10-26 01:41:28
原創
897 人瀏覽過

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

解決使用 SendInput 發送多個字元的問題

SendInput 是一個用於模擬鍵盤輸入的函數。然而,在給定的例子中,存在一個嚴重的誤解。

SendInput 的第一個參數指定傳入的 INPUT 結構體的數量。在原始程式碼中,只定義了一個 INPUT 結構體,但函數是被呼叫時參數設定為 2。這個不正確的參數計數會阻止發送任何輸入。

更正方法

要使用 SendInput 發送多個字符,您將需要建立一個 INPUT 結構數組。對於每個字符,您將需要兩組結構,一組用於 keydown 事件,一組用於 keyup 事件。因此,要發送兩個字符,總共需要四個 INPUT 結構。

或者,您可以使用 KEYEVENTF_UNICODE 標誌直接傳送 Unicode 字元。但是,請注意,對於 UTF-16 代理程式項目對,您將需要使用兩組 keydown/keyup 事件來傳送代碼單元。

範例:

以下程式碼片段示範如何使用KEYEVENTF_UNICODE 標誌傳送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>
登入後複製

此程式碼將發送指定的Unicode 字串作為鍵盤輸入,並在必要時考慮UTF-16 代理項目對.

以上是如何使用 SendInput 發送多個字元:解決參數和 Unicode 處理問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板