当前位置:编程学习 > VB >>

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

WM_SETTEXT可以设置其他窗口的文本,尤其是可以设置其他进程窗口的文本
这样就需要将发送者进程的数据传输到接收者进程里面,类似的消息还有WM_COPYDATA
lParam传的参数是发送者进程里面的字符串指针,接受消息的窗口必须要知道进程ID才能读取发生者进程的内存
但是似乎没有通过wParam将进程ID或者进程句柄传送过去,而且GetMessage里面收到的MSG结构体里面也没有和发送者进程相关的数据
难道是在调用SendMessage的时候API就已经将数据复制过去了吗? --------------------编程问答-------------------- 楼主爱思考,支持! --------------------编程问答--------------------

'将一个字符串通过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:
--------------------编程问答-------------------- 没有吗?WM_COPYDATA明显有
SendMessage WM_COPYDATA 第三个参数就是消息源的窗口句柄 通过消息源窗口句柄查找进程ID 然后读进程内存 --------------------编程问答--------------------
引用 3 楼 unsccaptain 的回复:
没有吗?WM_COPYDATA明显有
SendMessage WM_COPYDATA 第三个参数就是消息源的窗口句柄 通过消息源窗口句柄查找进程ID 然后读进程内存
那么对于WM_SETTEXT呢?消息接收者完全不能得到发送者信息
类似的问题也有,WM_GETTEXT是怎么实现把数据发送到其他进程的,因为同样WM_GETTEXT也没有得到发送者的信息 --------------------编程问答-------------------- 我不是太清楚。。。查了下资料,应该是WM_SETTEXT或WM_GETTEXT后自动调用WM_COPYDATA --------------------编程问答-------------------- 1.发送带有字符串的消息,windows都有经过特殊处理的,windows自己复制字符串,而不是直接复制指针过去。
2.API是通过调用DLL的,DLL本身是全局地址唯一的,对各个进程都相同。 --------------------编程问答-------------------- WM_COPYDATA将指针内的数据传入另一个进程
楼上第二点。。。我做进程监控时改变进程某API首字节时,再读取另一个程序相同API首字节时发现并没有被改变,我觉得不同进程的Dll虽然是从系统映射进来的,但实际映射后的地址不绝对,也互不干扰(虽然绝大多数情况基址是相同的)
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,