CString word="你好";
char Speaks[20];
for ( j=0;j<word.GetLength();j++)
{
   Speaks[j]=word[j];
}
   
Speaks[j]='\0';    

/***以上是把word中的字符串转化为字符数组Speaks*****/
::SendMessage(hSpeak,WM_KEYDOWN,0x0000000D,0x001C0001);
for( k = 0 ;Speaks[k];k++)
{
 ::SendMessage(hSpeak,WM_CHAR,Speaks[k],0);
}
::SendMessage(hSpeak,WM_KEYDOWN,0x0000000D,0x001C0001);
::SetForegroundWindow(hSpeak);
这是本人的"喊话"软件,,如果word是英文可以,汉字就不行了,请问大家有什么办法??

解决方案 »

  1.   

    中文要模拟输入法输入,在MSDN中查一下WM_IME_XXXX这类消息。
    你可以考虑把控件上的文字取出来,加上新的文字再设置上去,或者考虑用剪贴板粘贴。
      

  2.   

    类型是不是要转一下!!!::SendMessage(hSpeak,WM_CHAR,(WPARAM)&Speaks[k],0);
      

  3.   

    http://topic.csdn.net/u/20080623/15/a060928c-e841-44e4-94e9-4e108af1780e.html
      

  4.   

    喊到哪去?如果喊到的地方文字量不大先GetWindowText再修改并SetWindowText如果用WM_IME_CHAR的话,对UNICODE窗口可以直接发宽字符数组元素对非UNICODE窗口可以判断是不是汉字,是汉字的话一次发2个元素,不是的话一次发一个 。ansi/dbcs汉字的编码可以用*(WORD*)(buffer+i)并高低字节颠倒的方式获得