• Windows进程间通讯(IPC)----WM_COPYDATA


    WM_COPYDATA通讯思路

    通过向其他进程的窗口过程发送WM_COPYDATA消息可以实现进程间通讯。
    只能通过SendMessage发送WM_COPYDATA消息,而不能通过PostMessage发送WM_COPYDATA消息。因为系统必须管理用以传递数据的缓冲区的生命期,如果使用了PostMessage(),数据缓冲区会在接收方(线程)有机会处理该数据之前,就被系统清除和回收。所以应该使用SendMessage,这样就能在接收方处理数据之前使发送方处于阻塞状态,发送数据的缓冲区不会被清除或释放。

    SendMessage(hWnd,            //目标进程窗口句柄
                WM_COPYDATA, 
                WPARAM,          //发送进程的窗口句柄(GetConsoleWindow()可以获得当前控制台窗口句柄)
                LPARAM)          //指向一个COPYDATASTRUCT结构
    

    利用COPYDATASTRUCT结构传送需要通讯的信息,接收方通过处理WM_COPYDATA消息来获得此结构。

    typedef struct tagCOPYDATASTRUCT {
        ULONG_PTR dwData;
        DWORD cbData;//数据长度
        PVOID lpData;//存放通信数据的内存的地址
    } COPYDATASTRUCT, *PCOPYDATASTRUCT;
    

    WM_COPYDATA原理

    WM_COPYDATA原理是通过回调函数KeUserModeCallback来调用接收方的窗口过程

  • 相关阅读:
    HTML5基础
    错题本
    字符串
    带参的方法
    人际猜拳参考答案:
    用户登录页面——jdbc
    多媒体播放系统案例
    七言
    七言
    表格设计案例
  • 原文地址:https://www.cnblogs.com/revercc/p/14344829.html
Copyright © 2020-2023  润新知