注册 登录
编程论坛 VFP论坛

PostMessage发送字符串返回接口字符怎么正常显示字符串

ljb8864 发布于 2023-12-22 09:45, 368 次点击
Declare integer PostMessage in win32api as F_PostMessage Long ,Long ,Long ,string

isec=STR(Seconds(),10,5)
F_PostMessage (thisform.HWnd,1024+22,LEN(isec),isec )


Procedure OnProgress
Lparameters tnHWnd,tnwMsg,tnwParam,tnLparam
? SYS(2600,tnLparam,tnwParam) &&这句显示乱码,要如何才能显示正确的字符串
?tnwParam,tnLparam

EndProc



        /// 使用COPYDATASTRUCT来传递字符串
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpData;
        }

[此贴子已经被作者于2023-12-22 09:53编辑过]

6 回复
#2
吹水佬2023-12-22 10:06
第4个参数用字符串地址
#3
ljb88642023-12-22 11:47
回复 2楼 吹水佬
问下,使用postmessage 设置字符串时
会出错,这是什么问题

For x=1 to 10


imessagestring=TEXTMERGE("<<Datetime()>> <<Seconds()>> <<x>> <<nMax>> <<this.Pro>> ")
F_PostMessage(this.ParentHwnd,this.ParentMsg,LEN(imessagestring),imessagestring) &&通知主程序


*!*    isec=STR(Seconds(),10,5)
*!*    SendMessage(this.ParentHwnd,this.ParentMsg,LEN(isec),isec )

For y =1 to 200
*!*    Activate Screen
?Seconds()
EndFor
EndFor
#4
ljb88642023-12-22 15:26
回复 2楼 吹水佬
不能在FOR 中使用字符类型的消息传递吗?
#5
吹水佬2023-12-22 15:28
以下是引用ljb8864在2023-12-22 15:26:35的发言:

不能在FOR 中使用字符类型的消息传递吗?

参见2楼
#6
shizi02023-12-24 15:03
方案一:传递String,接收方可直接接收字符串
方案二:传递String的内存地址,接收方从 发送方 该地址读取内存内容。
楼主SYS(2600,)是读取接收方本进程内存,传递的肯定是发送方的内存地址,所以读取的内容不对。接收方可用OpenProcess(0x1F0FFF,0,发送方pid)+ReadProcessMemory()跨进程读取。

#7
ljb88642023-12-25 11:26
回复 6楼 shizi0
postMess int 可以
1