Android C程序:为什么在将字符串输出到当前活动光标时必须使用英文输入模式?
我正在编写一个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
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字符串,支持中文和英文
当我将输入法设置为英语模式时,上面的代码运行良好。但是,当我将输入法设置为中文模式时,不会输出任何内容
顺便说一下,输入法是我自己开发的,我通过输入法程序输出字符串
程序工作流程为:
输入法程序使用adb与Android设备连接。我将数据从安卓系统发送到我的输入法程序(在桌面窗口上运行)。当它接收到数据时,我使用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;
}