(一)Win32进程通信 —— 自定义消息实现

article/2025/9/18 17:06:21

自定义消息

系统定义消息,非用户定义,其范围在[0x0000,0x03ff] 之间,也就是说我们定义的消息的范围不能在这之间,

如果用户自定义的消息,可以使用如下两种方式(其实不止两种):

  • WM_USER:0x0400 - 0x7FFF
  • RegisterWindowMessage:0xC000 - 0xFFFF

这里我们就用这两种方式来实现进程之间的通信


案例效果演示:

在这里插入图片描述


服务端窗口及功能实现步骤:

  1. 搭建服务端界面:
    在这里插入图片描述

  2. 为两个编辑框添加变量:
    在这里插入图片描述

  3. 在Dlg源文件中自定义消息(两种不同方式):

#define WM_COMM (WM_USER + 100)		// WM_COMM 是我们定义的消息,WM_USER的值是0x4000const UINT wm_nRegMsg = RegisterWindowMessage(_T("reg_data"));	// 调用函数让操作系统为我们定义一个消息
  1. 为两个发送按钮实现方法:

可以为按钮自定义ID

  • 第一个发送按钮(WM_COMM消息):

在这里插入图片描述

双击按钮即可写代码

updateData();		// 使最新的数据同步更新到变量中CWnd* pWnd = CWnd::FindWindow(NULL, _T("DataRecv"));	// 查找客户端窗口
if(pWnd == NULL)
{AfxMessageBox(TEXT("Unableto find DataRecv."));	//没有找到窗口return;
}UINT uMsg;
uMsg = _ttoi(m_usermsg);	// 字符符 --> 整形(自定义消息只能传送整形数据)pWnd->SendMessage(WM_COMM, NULL, (LPARAM)uMsg);	// 以客户端的名义发送消息
  • 第二个发送按钮(wm_nRegMsg消息):

这个按钮的内容和上面的内容基本一样
在这里插入图片描述

UpdateData();	CWnd* pWnd = CWnd::FindWindow(NULL, _T("DataRecv"));
if(pWnd == NULL)
{AfxMessageBox(TEXT("Unableto find DataRecv."));  return;
}UINT uMsg;
uMsg = _ttoi(m_regmsg); pWnd->SendMessage(wm_nRegMsg, NULL, (LPARAM)uMsg); 

服务端已经写好,接下来实现客户端编写


客户端窗口及功能实现步骤:

  1. 窗口搭建:

在这里插入图片描述

  1. 为两个编辑框添加变量:
    在这里插入图片描述

  2. 在Dlg源文件中自定义消息(两种不同方式):

#define WM_COMM (WM_USER + 100)const UINT wm_nRegMsg = RegisterWindowMessage(_T("reg_data"));
  1. 消息映射
    在这里插入图片描述

  2. 声明两个自定义方法(Dlg头文件中):
    在这里插入图片描述

  3. 实现OnUserReceiveMsg方法

LRESULT CDataRecvDlg::OnUserReceiveMsg(WPARAM wParam, LPARAM lParam)
{m_usermsg.Format(_T("%d"), int(lParam));	// 获取数据UpdateData(FALSE);		// 更新数据到控件中return 0;
}
  1. 实现OnRegReceiveMsg方法
LRESULT CDataRecvDlg::OnRegReceiveMsg(WPARAM wParam, LPARAM lParam)
{m_regmsg.Format(_T("%d"), int(lParam));UpdateData(FALSE);return 0;
}

下一篇:(二)Win32进程通信 —— 内存映射文件


作者:浪子花梦

Time:2020.02.14

情人节快乐,各位


http://chatgpt.dhexx.cn/article/B5wovlWL.shtml

相关文章

WIN7 命令行

查看具体端口占用情况:4000端口被QQ.exe占用了 C:\Users\Administrator>netstat -ano|findstr 4000 UDP 0.0.0.0:4000 : 4860 C:\Users\Administrator>tasklist|findstr 4860 QQ.exe 4860 Console 1 96,744 K ncpa.cpl打开网络设备管理窗口

爬虫实战——批量爬取明星图片(http://www.win4000.com/)

爬取网站 美桌(http://www.win4000.com) 由于该网站并没有robots协议,因此可以任意爬取。 技术路线 requestsre 除此之外用到了pypinyin库用于进行名字到拼音的转换 代码 # -*- coding: utf-8 -*- """ Created on Mon O…

Cleartext HTTP traffic to pic1.win4000.com not permitted

首先理解清楚字面意思: 不允许明文HTTP访问方式 理解字面意思之后,我们可以打开google官网,找到Android的http安全配置说明文档 大概意思是说,所有连接都应该使用安全连接( TLS 和 HTTPS 加密协议)默认均信任预装的…

给大家分享几个不错的高清壁纸网

正文: 很多朋友都在找壁纸,但是又不知道去哪里找,所有今天我给大家分享几个不错的壁纸站,当然不仅限于下面的这些壁纸站,其实壁纸站有非常得多,我只是随便给大家整理了几个。 1.极简壁纸: 网站地址:bz.z…

配置交叉编译工具链和环境变量

配置交叉编译工具链和环境变量 1 设置交叉编译工具链1.1 永久生效1.2 临时生效1.3 手动指定 2 测试交叉编译工具链2.1 测试环境变量2.2 测试交叉编译器 3 如何添加交叉编译工具链(toolchain)到环境变量?(--sysroot路径&#xff09…

配置交叉编译工具链

文章目录 1 配置交叉编译工具链1.1 永久生效1.2 临时生效1.3 手动指定 2 测试交叉编译工具链 简单记录一下配置交叉编译工具链的过程。 1 配置交叉编译工具链 交叉编译工具链存放于/home/book 目录下。设置交叉编译工具主要是设置 PATH, ARCH 和 CROSS_COMPILE 三个…

ARM学习(19)交叉编译工具链的理解

笔者来聊聊交叉编译工具链 1、认识 正常理解的,比如windows下编译出来windows上面运行,visual stdio,等,这是因为windows有能力编译出来,有对应的VC工具链,这是本地编译。 假如一个51板子或者stm32板子&a…

交叉编译工具链配置

第一步, 将文件放在Linux根目录下(目录可以自己选择,记住即可),通过下面命令解压: unzip aarch64-poky-linux-7.3-glibc-2.27.zip第二步: cd aarch64-poky-linux-7.3-glibc-2.27目录下&#…

构建gcc交叉编译工具链

如何构建一个GCC交叉编译工具链 GCC不仅是一个编译器,它是一个开源工程,可以让你建立各种编译器。一些编译器支持多线程,一些支持共享库,一些支持Multilib(典型的应用是在64位机上运行32位应用程序)&#…

ARM交叉编译工具链分类说明

为什么要用交叉编译器? 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不…

ARM-Linux 交叉编译工具链安装

创建时间:2022-04-12-23:10 说明:在Linux下安装arm-linux交叉编译工具链 修改时间: 修改内容: 1. 前言 在ubuntu中系统自带的gcc编译器是基于x86架构的,通过该编译器编译出来的代码只能在x86架构上运行。 如果需要在x…

【linux】安装Linux的交叉编译工具链

1、linux中装软件的特点 linux中安装软件比windows中复杂。linux中安装软件一般有以下几种方法: 第一种:在线安装。譬如ubuntu中使用apt-get install vim来安装vim软件。 第二种:自己下载安装包来安装。这种方式的缺陷就是你不知道你…

制作交叉编译工具链

制作交叉编译工具链 编写可以在ARM上运行的程序需要使用arm-linux-gcc交叉编译工具。因此,需要制作一套交叉编译器工具链,使用它,可以让代码运行在ARM平台上。 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG&#xff…

【交叉编译】配置交叉编译工具链

配置交叉编译工具链 一、 设置交叉编译工具链1.永久生效2.临时生效3.手动指定 二、测试交叉编译工具链1.测试环境变量:2.测试交叉编译器: 一、 设置交叉编译工具链 交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其…

【编译原理】交叉工具链详解

1、嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分,宿主机是执行编译、链接嵌入式软件的计算机,目标机是运行嵌入式软件的硬件平台。在宿主机执行编译的流程如下: 而所谓的交叉编译就是:在一种平台上编…

linux交叉编译工具链安装

交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。   交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 一间非营利性质的开放源代码软件工程公司,Linaro 开发了很…

常用的交叉编译工具链

交叉编译工具链是一种用于在一个平台上编译另一个平台上运行的程序的软件工具集,它通常包括编译器、链接器、汇编器等组件。 交叉编译工具链的命名一般遵循 target-platform-triplet 的格式,例如 arm-linux-gcc 表示用于生成 ARM 平台上 Linux 系统下运…

基于cmake的交叉编译工具链

基于cmake的交叉编译工具链 本文转载自:https://segmentfault.com/a/1190000019276315,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。 一、基本概念 1. 什么是交叉编译 交叉编译是A机器上编译生成,运行在B机…

交叉编译工具链建立与常识

交叉编译工具链的命名规则 arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel; vendor – 工具链提供商,可能有的工具链会省去这个字段,…

交叉编译工具链的安装和配置过程

1. 编译工具链基本介绍 C/C程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。 gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:g…