Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android C程序:为什么在将字符串输出到当前活动光标时必须使用英文输入模式?_Android_C_Windows - Fatal编程技术网

Android C程序:为什么在将字符串输出到当前活动光标时必须使用英文输入模式?

Android C程序:为什么在将字符串输出到当前活动光标时必须使用英文输入模式?,android,c,windows,Android,C,Windows,我正在编写一个C程序,将字符串输出到当前活动光标 这是我的密码: void outputRawString(char* buf){ INPUT input[2]; int j = 0; wchar_t* output = c2w(buf); while(*(output + j)){ input[0].type = INPUT_KEYBOARD; input[0].ki.dwFlags = 0x0004; in

我正在编写一个C程序,将字符串输出到当前活动光标

这是我的密码:

void outputRawString(char* buf){

    INPUT input[2];
    int j = 0;
    wchar_t* output = c2w(buf);

    while(*(output + j)){

        input[0].type = INPUT_KEYBOARD;
        input[0].ki.dwFlags = 0x0004;
        input[0].ki.wScan = (short)(*(output + j));
        //input[0].ki.wScan = (short)0x6211;
        input[0].ki.wVk = 0;
        SendInput(1, input, sizeof(INPUT));

        input[1].type = INPUT_KEYBOARD;
        input[1].ki.wScan = (short)(*(output + j));
        //input[1].ki.wScan = (short)0x6211;
        input[1].ki.wVk = 0;
        input[1].ki.dwFlags = (KEYEVENTF_KEYUP | 0x0004);
        SendInput(1, input + 1, sizeof(INPUT));
        j++;
    }

}
c2w是一个将char*转换为wchar\u t*的函数

wchar_t* c2w(const char *str)
{
    int length = strlen(str)+1;
    wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length);
    memset(t,0,length*sizeof(wchar_t));
    MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length);
    return t;
}
我需要输出unicode字符串,支持中文和英文

当我将输入法设置为英语模式时,上面的代码运行良好。但是,当我将输入法设置为中文模式时,不会输出任何内容

顺便说一下,输入法是我自己开发的,我通过输入法程序输出字符串

程序工作流程为:
输入法程序使用adbAndroid设备连接。我将数据从安卓系统发送到我的输入法程序(在桌面窗口上运行)。当它接收到数据时,我使用outputRawString

wchar\u t*output=c2w(buf)将字符串输出到当前活动光标看起来可疑。取一个
char*
得到一个
wchar\u t*
。转换是如何进行的?你要创建另一个缓冲区吗?如果是这样的话,你什么时候把它放出来?你能把它转换成现在的样子吗?如果是这样,那么您必须确保buff足够大,以容纳更大的wchar_tt。c2w()现在在已编辑的问题中。问题是:为什么在英文模式下不能工作,而在中文输入法模式下可以。您的输出终端是否支持要输出的unicode字符?例如,如果使用的字体没有汉字字形,输出将不可见。您可能误解了我的问题。当输入法模式设置为英语时,它可以输出unicode字符串(英语字符和中文字符)。当输入法模式设置为中文时,它不会输出任何内容。因为我不直接从键盘输入,所以我只是将unicode字符串从Android设备发送到输入法。
wchar_t* c2w(const char *str)
{
    int length = strlen(str)+1;
    wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length);
    memset(t,0,length*sizeof(wchar_t));
    MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length);
    return t;
}