向非unicode的窗口,发送中文的问题。

Neo_GYH 2010-08-02 12:56:07
如题:如果是非nunicode窗口,如何向窗口发送中文。下面代码有些问题。请各位大侠帮忙。。
if(!IsWindowUnicode(hwnd))
{
for(int i=0; i <len; i+=2)
{
SendMessageA(hwnd, WM_IME_CHAR, szBuf[i]+szBuf[i+1]*256,1);
}
}
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq5945 2010-08-03
  • 打赏
  • 举报
回复
接受消息方没有对消息做响应,消息应该会被传递给默认消息处理过程,且忽略掉.
Neo_GYH 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyq5945 的回复:]
用WM_COPYDATA就好了,这个就是微软设计来做进程间小数据传输用的,WM_IME_CHAR没用过,不太清楚.
和动态链接库没有关系,你发送的是UNICODE字符的话,接收方也必须按UNICODE字符来接收处理,反之同理.
[/Quote]

再请教最后一个问题,如果接受窗口是第三方程序。例如说是游戏窗口。那我是否需要拦截它的底层消息来处理WM_COPYDATA。从而达到解析中文的目的。
Neo_GYH 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zyq5945 的回复:]
发送程序是UNICODE的话,WideCharToMultiByte转成ANSI了再发
发送程序是ANSI的话,直接发就可以了
发送直接用SendMessage就行了,系统有个WM_COPYDATA消息,具体用法搜下就出来了.
[/Quote]

“发送程序”?我是把发送的方法放在动态连接库当中。你的意思是说我的DLL程序本身是Unicode的吗?我使用的是vs2008,默认的应该是unicode吧。WM_COPYDATA不是一个copy到内存公共区域的方法吗?为什么不可以用WM_IME_CHAR 哪?
oyljerry 2010-08-02
  • 打赏
  • 举报
回复
不关心你什么字符串,只要你知道发送的是ANSI还是UNICODE格式,然后接收的字符串,对应的转换回中文就可以了
zyq5945 2010-08-02
  • 打赏
  • 举报
回复
发送程序是UNICODE的话,WideCharToMultiByte转成ANSI了再发
发送程序是ANSI的话,直接发就可以了
发送直接用SendMessage就行了,系统有个WM_COPYDATA消息,具体用法搜下就出来了.
zyq5945 2010-08-02
  • 打赏
  • 举报
回复
用WM_COPYDATA就好了,这个就是微软设计来做进程间小数据传输用的,WM_IME_CHAR没用过,不太清楚.
和动态链接库没有关系,你发送的是UNICODE字符的话,接收方也必须按UNICODE字符来接收处理,反之同理.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧