`
庚午子
  • 浏览: 15204 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

windows自定义消息通信机制

 
阅读更多

进程间通讯应该是老的内容了,相信用VC的大侠们都知道,书本上也都有介绍。我在这只是对自己用过的东西简单的总结一下,希望对有兴趣者有帮助。

WINDOWS中进程间通讯的方式很多,如:消息机制,共享内存机制,SOCKET,COM,RPC等等,需要时可以根据具体情况来选择使用的方式。我在这本文中仅介绍进程间的自定义消息通讯机制。
 
1,WINDOWS中自定义消息的定义和使用;

在WNDOWS中消息分系统消息和自定义消息。系统消息定义从0到0x3FF,使用0x400到0x7FFF定义自己的消息。
Windows把0x400定义为WM_USER。如果想定义自己的一个消息,可以在WM_USER上加上一个值:

#define WM_CONTROLPRINT WM_USER+1001

另一种自定义窗口消息的方法是用RegisterWindowsMessage()函数来注册这个消息。与在WM_USER上加上某个数相比,它的好处是不必考虑所表示的消息标识符是否超出工程的允许范围。如:

const UINT WM_CONTROLPRINT=RegisterWindowMessage("reg_data");

在接收消息的程序中,需要对添加对应消息的响应处理函数,并将消息和消息处理函数关联,要不它不知道消息发给谁:

//函数定义,在//AFX_MSG中
afx_msg LRESULT OnControlPrint(WPARAM wParam,LPARAM lParam);

//函数实现
LRESULT CSendDlg::OnControlPrint(WPARAM wParam,LPARAM lParam)
{
}

//关联映射,在BEGIN_MESSAGE_MAP中
ON_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用WM_USER+1001定义的消息
ON_REGISTERED_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用RegisterWindowMessage定义的消息

消息如何传递呢?我们需要发送消息时,可以使用PostMessage和SendMessage。这两个消息发送函数不一样的地方就是SendMessage发送完消息后会等待消息处理函数处理完成后返回,PostMessage则不等待。所以,可以说PostMessage是不可靠的,实际运用中可以根据具体情况来确定用那一个。这两个函数的具体使用请查看MSDN。

如我向主窗体发送一个消息(第一个参数是接收消息的窗体句柄,第二个参数是要发送的消息,后边两个为随消息发送的参数信息):
::SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_CONTROLPRINT,NULL,0);


2,使用自定义消息在进程间通讯;

我们可以用VC60建立两个基于对话框的工程,一个命名为Send,一个命名为Revice。

在Send对话框中添加一个名成为IDC_BUTTONSEND的按钮。

在SendDlg.h和ReviceDlg.g中都添加自定义消息。消息实现进程间通信,需要在这两个程序中定义或注册相同的消息,才能保证数据通信顺利进行:

#define WM_CONTROLPRINT WM_USER+1001

在Send工程中添加IDC_BUTTONSEND按钮的单击处理事件,并添加代码:

void CSendDlg::OnButtonsend()

{

//获取窗口句柄
CWnd *pWnd=CWnd::FindWindow(NULL,_T("Revice")); 
if(pWnd==NULL)
{
AfxMessageBox("接收程序没有运行!");
return ;
}

//发送消息
pWnd->SendMessage(WM_SENDYKDISABLE,NULL,0);
}

在Revice工程中添加WM_CONTROLPRINT 的处理函数,关联映射,和上边描述的过程一样,在处理函数中添加相应的处理代码。

分享到:
评论

相关推荐

    自定义消息机制

    自定义消息机制的核心思想是创建一个类来封装消息的发送、接收和处理过程,而不是依赖于Windows的消息循环。以下是一些关键步骤和知识点: 1. **定义消息结构体**:首先,我们需要定义一个结构体来存储消息信息。这...

    VC发送自定义消息

    通过UserMessageDemo,你可以了解到自定义消息的完整流程,包括定义、发送和处理,这对于理解MFC应用程序的内部通信机制非常有帮助。你可以下载并运行该示例,查看其工作原理,并根据需要修改和应用到自己的项目中。

    自定义消息 MFC 对话框

    总结来说,自定义消息在MFC中提供了一种强大的通信机制,通过注册和处理自定义消息,可以灵活地扩展应用程序的功能,实现更复杂的用户交互。在对话框编程中,利用自定义消息可以更好地控制对话框的行为,提高程序的...

    自定义消息,VC里面 自定义消息的实现,已经运行调式成功

    在Windows编程中,自定义消息(Custom Message)是一种扩展系统消息机制的方法,允许开发者定义自己的消息类型,以处理特定的应用程序需求。在Visual C++(VC++)环境中,自定义消息的实现通常涉及到Windows消息队列...

    MFC 自定义消息实现

    自定义消息是Windows消息机制的一部分,允许程序员扩展系统消息机制,实现特定的功能需求。本篇文章将深入探讨MFC中自定义消息的实现。 自定义消息在MFC中通常通过`WM_USER`开始的数值来定义,这是Windows消息ID...

    自定义消息实现进程通信

    发送进程需要知道接收进程的窗口句柄(HWND),这可以通过进程间通信机制获取。例如: ```cpp PostMessage(hwndReceiver, myMessage, wParam, lParam); ``` 3. **处理消息**:在接收进程的窗口过程(WndProc)中...

    MFC自定义消息的发送与接收

    除了基本的发送和接收,自定义消息还可以用于实现复杂的通信机制,比如线程间的通信。在多线程应用程序中,使用自定义消息可以在安全的环境下交换数据,避免同步问题。 此外,自定义消息也可以用于封装特定的操作,...

    MFC自定义消息源码附加说明

    MFC是基于Windows消息机制的,它封装了Windows API中的各种消息处理。在MFC中,消息主要通过`ON_MESSAGE`、`ON_COMMAND`和`ON_BN_CLICKED`等宏来处理,但这些宏只能处理系统预定义的消息。为了处理未在标准消息表中...

    VC中实现自定义消息(源码+文档说明)

    在VC++编程环境中,MFC(Microsoft Foundation Classes)库为开发者提供了一种高效的方式来构建Windows应用程序。...通过学习这部分内容,开发者可以更好地控制和扩展其应用程序的内部通信机制,提升程序设计的灵活性。

    VC 消息映射与处理\创建和使用自定义消息

    首先,理解Windows消息机制是至关重要的。Windows消息是应用程序之间和应用程序内部进行通信的一种方式,它由一个消息ID和相关参数组成。当用户进行操作,如点击按钮或移动鼠标,Windows系统会生成相应消息并将其放...

    消息黑客(自定义并发送Windows消息)

    总之,"消息黑客"是Windows编程中的一种高级技巧,它涉及到Windows消息机制、API调用和程序间通信。理解并熟练运用这一技术,可以提升开发者解决复杂问题的能力,但同时也需要谨慎行事,以维护系统的安全和稳定。

    vc自定义消息实例

    在Windows编程中,VC++...总的来说,通过自定义消息,开发者可以创建更复杂的应用程序逻辑,实现更灵活的通信机制,同时保持Windows消息系统的稳定性。理解并熟练运用自定义消息是提升VC++编程技能的关键步骤之一。

    从零开始学VC系列教程三.串口通信及自定义消息.rar

    【自定义消息】在Windows编程中,是一种扩展标准消息机制的方法。当标准的消息无法满足特定需求时,开发者可以创建自己的消息类型。在VC中,自定义消息通常通过`RegisterWindowMessage`函数注册,该函数返回一个唯一...

    MFC线程自定义消息循环

    3. **自定义消息循环**:在`Run`方法中,你需要编写自定义的消息循环。这通常包括调用` PeekMessage `或`GetMessage`函数来检查是否有待处理的消息,然后通过`TranslateMessage`和`DispatchMessage`将消息传递给相应...

    hook 自定义消息 (delphi 7)

    在Windows操作系统中,消息是进程间通信的一种方式,每个消息都有一个唯一的整数标识,即消息ID。通过注册自定义消息ID,我们可以创建并发送自己的消息,以便在程序的不同部分之间传递信息。 要创建自定义消息,...

    VC自定义消息进行线程间的通信

    自定义消息是Windows消息机制的一部分,它允许开发者定义自己的消息类型,以扩展系统默认的消息功能。自定义消息的定义通常通过`WM_USER`常量开始,例如`WM_USER + 100`表示一个自定义消息类型。 以下是使用自定义...

    BCB6 自定义消息

    在BCB6(Borland C++ Builder 6)中,自定义消息是开发者扩展系统功能,实现特定通信机制的一种重要技术。自定义消息允许程序员创建自己的消息类型,这些消息可以由一个组件发送给另一个组件,或者在应用程序的各个...

    MFC自定义消息

    MFC是基于Windows消息机制的,它将Windows API中的消息队列、消息循环和窗口过程等概念封装在C++类中,使得消息处理更加方便。在MFC中,每个窗口类(如CWnd)都有一个消息映射表,用于定义该窗口可以响应哪些消息...

    自定义消息

    本话题主要聚焦于如何在MFC中实现自定义消息以及在模式对话框之间进行通信。 首先,让我们深入理解自定义消息。在Windows系统中,消息是进程间或线程间通信的基本方式。标准的消息如WM_PAINT、WM_KEYDOWN等已预定义...

    c#自定义消息在Form间传递

    通过使用自定义消息机制,可以有效地实现Form间的通信。本文将详细介绍如何在C#中实现自定义消息在Form间传递的过程,包括发送端和接收端的具体实现细节。 #### 发送端实现步骤 **Step1: 添加引用** 首先,需要在...

Global site tag (gtag.js) - Google Analytics