WM_SETTEXT是怎么实现跨进程传输数据的?

Defanive 2011-10-17 11:31:21
WM_SETTEXT可以设置其他窗口的文本,尤其是可以设置其他进程窗口的文本
这样就需要将发送者进程的数据传输到接收者进程里面,类似的消息还有WM_COPYDATA
lParam传的参数是发送者进程里面的字符串指针,接受消息的窗口必须要知道进程ID才能读取发生者进程的内存
但是似乎没有通过wParam将进程ID或者进程句柄传送过去,而且GetMessage里面收到的MSG结构体里面也没有和发送者进程相关的数据
难道是在调用SendMessage的时候API就已经将数据复制过去了吗?
...全文
319 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smalle 2011-10-20
  • 打赏
  • 举报
回复
1.发送带有字符串的消息,windows都有经过特殊处理的,windows自己复制字符串,而不是直接复制指针过去。
2.API是通过调用DLL的,DLL本身是全局地址唯一的,对各个进程都相同。
UNSCcaptain 2011-10-20
  • 打赏
  • 举报
回复
WM_COPYDATA将指针内的数据传入另一个进程
楼上第二点。。。我做进程监控时改变进程某API首字节时,再读取另一个程序相同API首字节时发现并没有被改变,我觉得不同进程的Dll虽然是从系统映射进来的,但实际映射后的地址不绝对,也互不干扰(虽然绝大多数情况基址是相同的)
Defanive 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 unsccaptain 的回复:]
没有吗?WM_COPYDATA明显有
SendMessage WM_COPYDATA 第三个参数就是消息源的窗口句柄 通过消息源窗口句柄查找进程ID 然后读进程内存
[/Quote]那么对于WM_SETTEXT呢?消息接收者完全不能得到发送者信息
类似的问题也有,WM_GETTEXT是怎么实现把数据发送到其他进程的,因为同样WM_GETTEXT也没有得到发送者的信息
UNSCcaptain 2011-10-19
  • 打赏
  • 举报
回复
我不是太清楚。。。查了下资料,应该是WM_SETTEXT或WM_GETTEXT后自动调用WM_COPYDATA
贝隆 2011-10-18
  • 打赏
  • 举报
回复

'将一个字符串通过PostMessage传送出去
Public Sub subPostString(ByVal lngHandle As Long, ByVal strP As String)
Dim intP As Integer
Dim intK As Integer
Dim lngAsc As Long
Dim lngP As Long
Dim strT As String
On Error GoTo errSub
For intP = 0 To Len(strP) - 1
strT = Mid(strP, intP + 1, 1)
If Asc(strT) <= 0 Then
lngAsc = AscW(StrConv(strT, 128))
If lngAsc < 0 Then
lngAsc = lngAsc + 65536 '2^16
End If
Else
lngAsc = Asc(strT)
End If
lngP = PostMessage(lngHandle, WM_CHAR, lngAsc, 0)
Next intP
Exit Sub
errSub:
bcrun 2011-10-18
  • 打赏
  • 举报
回复
楼主爱思考,支持!
UNSCcaptain 2011-10-18
  • 打赏
  • 举报
回复
没有吗?WM_COPYDATA明显有
SendMessage WM_COPYDATA 第三个参数就是消息源的窗口句柄 通过消息源窗口句柄查找进程ID 然后读进程内存

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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