如何用postmessage发送一个字符串 我现在用postMessage(whwnd,WM_keyUP,53,0)可以发送一个字符,但如何发送一个字符串呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //用SendMessage行不, PostMessage试过不行var S:string;begin S:='Hello World'; SendMessage(edt1.Handle, WM_SETTEXT, 0, Integer(s));end; 那样把S:string; 改成S:Pchar才可以吧, 你试试看行不 还是不行,我是给2000下的类似dos窗体的程序传,现在只能改变标题 你要找那接收该消息对象的Handle. 1.TCommInfo = array[0..50] of Char;szCommInfo : TCommInfo; SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo)));2.CommInfo : String;SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo))); var S:=pchar;begin S:='Hello word'; SendMessage(Handle, WM_SETTEXT, 0, Integer(s));end;我向用VB写的程序的文本框成功的, 另外你接收消息对象的是什么类? 用POSTMESSAGE肯定是不行的.因为字符串在你的程序的内存空间,发送过去的地址是没有意义的.WM_SETTEXT 消息是系统特殊处理过的,会先将内容保存到一个临时的内存映射文件中.然后给目标通知的.就算是同一个程序中用POSTMESSAGE发送字符串也要保证在收到消息的时候这个字符串还在原来的位置存在才可以. SendMessage(whwnd,WM_CHAR ,Integer(PChar(S)),0);这样就可以了,但只能每次传一个字符 非要用postmessage吗?如果可以用sendmessage,可以考虑用wm_copydata传。 SendMessage的实现在外部dll中,和调用者属于不同的exe或者dll,地址空间是独立的。 晕,WM_COPYDATA是正确答案,却估计不是楼主想要的.....楼主干嘛不把一个字符串内容一个字符一个字符发过去.如果字符数多,POST的时候控制一下速度.另外,建议用WM_CHAR代替WM_KEYUP 发送方:wParam = GlobalAddAtom('string...')PostMessage(HWnd, WM_XYZ, wParam, 0)接收方:str = GlobalGetAtomName(wParam)GlobalDeleteAtom(wParam) sTemp := Pchar(sData); SendMessage(wHandle,WM_SETTEXT,0,Integer(sTemp)); 这是给其它程序输入框送东东的,验证过要不用Loop发一系列按键消息也可行,关键是楼主想做啥?我觉得自已留RPC接口的话原子操作不错 哇,仔细一看,楼主是想用Windows 窗口与控制台命令行交互啊,而且没约定。 var s:stringbeginsetlength(s,100);s:='1111111';postmessage(frm_handle,wm_user+100,integer(@s[1]),0); type小问题 正月里来拜年不算晚 寻找带Canvas过程的jpg控件 请教关于WaitForMultipleObjects的用法 高分求教formula one6.1 的公式显示汉字的问题? 喜欢李维的请进! 在dbgrid下输入/修改数据时,怎么对输入进行约束? 请问,ACCESS的数据库连接和SQLSERVER数据库的连接有何不同呢? dbedit 的问题,???????? 如何解决机器非正常关机或死机后,数据库数据丢失的问题。答对者100分相送!!!! 关于hash函数的问题 如何做通过串口找到PDA上的文件并COPy到本地来
var
S:string;
begin
S:='Hello World';
SendMessage(edt1.Handle, WM_SETTEXT, 0, Integer(s));
end;
TCommInfo = array[0..50] of Char;
szCommInfo : TCommInfo;
SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo)));
2.
CommInfo : String;
SendMessage(FormHandle, WM_COMMINFOMSG, 0, Integer(PChar(CommInfo)));
S:=pchar;
begin
S:='Hello word';
SendMessage(Handle, WM_SETTEXT, 0, Integer(s));
end;我向用VB写的程序的文本框成功的, 另外你接收消息对象的是什么类?
因为字符串在你的程序的内存空间,发送过去的地址是没有意义的.
WM_SETTEXT 消息是系统特殊处理过的,会先将内容保存到一个临时的内存映射文件中.然后给目标通知的.就算是同一个程序中用POSTMESSAGE发送字符串也要保证在收到消息的时候这个字符串还在原来的位置存在才可以.
这样就可以了,但只能每次传一个字符
如果可以用sendmessage,可以考虑用wm_copydata传。
如果字符数多,POST的时候控制一下速度.另外,建议用WM_CHAR代替WM_KEYUP
PostMessage(HWnd, WM_XYZ, wParam, 0)
接收方:str = GlobalGetAtomName(wParam)
GlobalDeleteAtom(wParam)
sTemp := Pchar(sData);
SendMessage(wHandle,WM_SETTEXT,0,Integer(sTemp)); 这是给其它程序输入框送东东的,验证过要不用Loop发一系列按键消息也可行,关键是楼主想做啥?我觉得自已留RPC接口的话原子操作不错
begin
setlength(s,100);
s:='1111111';
postmessage(frm_handle,wm_user+100,integer(@s[1]),0);