范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

使用win32API函数实现进程间通信

  前言
  在应用开发中,经常会碰到应用程序之间交换数据的情况。常用的方式有,共享内存 、共享 存储以及socket等方式。今天给大家讲一种在windows下通过消息实现进程间通信的方式。 windows消息机制
  windows是一个消息驱动的系统,windows的消息提供了应用程序之间、应用程序与windows 系统之间进行通信的手段。
  Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式,窗口是总是在某个线程(Thread)内创建的。Windows系统通过消息机制来管理交互,消息(Message)被发送,保存,处理,一个线程会维护自己的一套消息队列(Message Queue),以保持线程间的独占性。队列的特点无非是先进先出,这种机制可以实现一种异步的需求响应过程。 SendMessage函数:
  该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。该函数是应用程序和应用程序之间进行消息传递的主要手段之一。
  函数原型:IntPtr SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam);
  参数说明 hWnd:其窗口程序将接收消息的窗口的句柄。 Msg:指定被发送的消息 wParam:指定附加的消息指定信息  IParam:指定附加的消息指定信息 返回值:返回消息处理的结果,依赖于所发送的消息 实现方式
  定义消息ID、要传递的消息结构以及要调用WIN32函数        const int WM_SENDDATA = 0x004A;//消息ID         public struct MSGDATA         {             public IntPtr dwData; // 可以是任意值             public int lpLength;    // 指定lpData内存区域的字节数             [MarshalAs(UnmanagedType.LPStr)]             public string lpData; //消息内容         }          [DllImport("user32.dll", EntryPoint = "SendMessage")]         private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref MSGDATA lParam);          [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]         public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  获取要发送消息的窗体,向该窗体发送消息            IntPtr mainHandle = FindWindow(null, "座山雕");//获得要发送消息的窗体             if (mainHandle != IntPtr.Zero)             {                 MSGDATA msg;                 byte[] arr = System.Text.Encoding.Default.GetBytes(msgInfo);                 msg.dwData = (IntPtr)0;                 msg.lpLength = arr.Length + 1;                 msg.lpData = msgInfo;//消息内容                 SendMessage(mainHandle, WM_SENDDATA, 0, ref msg);             }
  接收消息        protected override void WndProc(ref Message m)//WinForm窗体要重写该方法         {             if (m.Msg == WM_SENDDATA)             {                 MSGDATA cds = new MSGDATA();                 Type t = cds.GetType();                 cds = (MSGDATA)m.GetLParam(t);                 string receiveInfo = cds.lpData;//消息内容                 this.richTextBox1.Text += "座山雕:" + receiveInfo + "r ";             }             else             {                 base.DefWndProc(ref m);             }         }程序演示
  有想要源码的小伙伴,欢迎私信沟通交流!PostMessage和SendMessage的区别
  PostMessage 是异步的,SendMessage 是同步的。
  PostMessage 只把消息放到队列,不管消息是不是被处理就返回,消息可能不被处理;
  SendMessage等待消息被处理完了才返回,如果消息不被处理,发送消息的线程将一直处于阻塞状态,等待消息的返回。
  每天一个小知识,每天进步一点!!![加油][加油][加油]

产后恶露不绝3大类,中医调养治疗有良方产后时期也称为产褥期,是指产妇分娩后与怀孕有关的生理变化恢复到非怀孕状态的时间,通常为期68周。恶露是指胎盘分离后,蜕膜的基础部分保留下来,蜕膜分为两层表层脱落,深层则再生为新的子脾胃是长寿的根本!跟着老中医,养好脾胃,健康过百原标题脾胃是长寿的根本!跟着老中医,吃一吃,按一按,养好脾胃,健康过百心肝脾肺肾,是人体主要的五大系统,而脾是其中的核心。脾运化水谷精微,营养全身,所以脾的运化功能是非常重要的。可为什么要学中医?传统文化博大精深!中医是什么?中医是能治病的医学。除此之外,它还是国学(中医是国学的一个重要分支,最接地气,最能为人民服务),是哲学(是关于生命的哲学),是道(是天地大道,中医最强调天地对人的影响,中医治疗焦虑症经方1则,疏肝解郁,行气活血焦虑症是以持续性精神紧张或发作性惊恐状态为主要症状,并伴有自主神经功能紊乱及运动性不安的一种神经症,其发病与急慢性精神因素或躯体因素有关。临床常有突发性惊恐,无原因的紧张焦急,注意大冷门!黑马23分掀翻浙江,MVP拉胯无力救主,王世龙场边摇头问如何每天都能收到如此有趣的体育原创资讯?答只需轻点右上角的关注按钮就能实现梦想。竞技体育不能只看纸面实力,如果你不能稳定地打出自己的特点,即使面对鱼腩球队也会栽个大跟头。凯尔特人湖南中医药高专获全省教育系统献策活动一等奖红网时刻新闻1月5日讯(通讯员李康馨)日前,湖南省教育厅公布了全省教育系统关于贯彻党的二十大精神,我为现代化建设献策活动评审结果,湖南中医药高等专科学校获优秀组织奖集体荣誉,学校推明日小寒,中医分享如何调理阳康后遗症明天就是小寒了,农历年24节气中的倒数第二个节气,俗话说大寒小寒,冻作一团,对于往年,人们只要重视寒邪就行,而今年不少人刚刚经历了新冠病毒感染,正处于康复期,或多或少都还存在容易疲NK(自然杀伤)异常是反复流产的元凶吗?NK多高需要用药?如果你混迹在一个比较活跃的保胎群,可能没有几分钟就会有姐妹来问关于NK的问题,仿佛它就是免疫性反复流产最核心的问题。以前很多研究把NK细胞定义为胚胎杀手,认为就是因为NK细胞过度活六种鸡蛋的做法,比番茄炒蛋还好吃,色香味俱全,营养丰富又下饭大家好这里是香姐说美食,每天分享好吃的家常菜。鸡蛋在我们的日常生活中,是最常见的食物了,不仅营养丰富,而且可以和任何食物搭配,好吃又下饭。今天香姐分享另外六种鸡蛋的做法,比番茄炒蛋膨胀剂的明矾对人体的危害你知道吗在2014年7月,被国家禁用明矾由原国家卫计委等五部门规定,以十二水合硫酸铝钾和硫酸铝铵为代表的含铝膨松剂不能再被使用到面制品中(除油炸面制品挂浆用的面糊裹粉煎炸粉外),包括馒头发大米别蒸米饭了,加1根香蕉,简单一做,外酥里嫩,咬一口满嘴香大米别蒸米饭了,加1根香蕉,简单一做,外酥里嫩,咬一口满嘴香。大米是我们日常生活中离不开的食材,一般都会拿来熬粥喝,蒸米饭等做法。大米好吃营养高,大米的营养素主要是碳水化合物,另外