.Net 设计模式

作者: BookCodingLife | 来源:发表于2017-05-28 18:27 被阅读0次

    C#进程之间的通信

    a.使用SendMessage向另一进程发送WM_KEYDOWN消息

    1.进程之间的通讯方式:

    * 共享内存(内存映射文件,共享内存DLL,剪切板)

    * 命名管道

    * 匿名管道

    * 发送消息

    * socket口,配置文件和注册表来间接实现进程间数据通讯任务

    2.发送消息实现进程间通讯前准备

    用到的一个windows api函数:

    要有此函数,需要添加using System.Runtime.InteropService 命名空间

    [DLLImport("User32.dll",EntryPoint = "SendMessage")]

    private static extern int SendMessage(IntPtr wnd,int msg,IntPtr wP,IntPtr IP);

    此方法各个参数表示的意义:

    wnd:接收消息的窗口的句柄,如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口,被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

    msg:指定被发送的消息类型。

    wP:消息内容。

    IP:指定附加的消息。

    2.1SendMessage与PostMessage之间的区别:

    SendMessage和PostMessage,这两个函数虽然功能非常相似,都是负责向指定的窗口发送消息,

    但是SendMessage()函数发出消息后一直等到接收方消息响应函数处理完之后才能返回,并能够得到返回值,在此期间发送方程序将被阻塞。

    SendMessage()后面的语句不能被继续执行,即是说此方法是同步的。

    而PostMessage()函数在发出消息后马上返回,其后语句能够被立即执行,但是无法获取接收方的消息处理返回值,即是说此方法是异步的。

    2.2接收方程序:

    2.3发送方程序:

    b.使用SendMessage向另一进程发送WM_COPYDATA消息

    1.WM_COPYDATA

    WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接收方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据。

    这个函数的原型及其要用到的结构如下:

    2.具体过程如下:

    3.发送方程序:

    4.接收方程序:

    相关文章

      网友评论

        本文标题:.Net 设计模式

        本文链接:https://www.haomeiwen.com/subject/lnehfxtx.html