Windows使用自定义消息实现进程之间通信

来源:互联网 发布:上海电商淘宝客服招聘 编辑:程序博客网 时间:2024/06/06 09:06
Windows使用自定义消息实现进程之间通信
        Windows程序与其它类型程序的区别就是使用消息,例如键盘或鼠标消息等,在dos系统下的程序没有定义消息。在windows操作系统中,消息不但可以用于进程内的通信,也可以用于进程间的通信。而我这篇博文将讲使用自定义消息实现进程间的通信。
        我们都知道,在windows中消息分为两种,即系统消息和用户自定义消息,系统消息定义从0到0x3ff,可以使用0x400到0x7fff定义自己的消息。windows把0x400定义为WM_USER,如果想定义自己的一个消息,可以在WM_USER上加上一个值。当然了,还有另外一种方法,这里就不讲了,而是使用RegisterWindowsMessage()函数。
        要想用消息实现进程间通信,则需要在这两个程序中定义或注册相同的消息,才能保证数据通信顺利进行。
  使用这种方式实现进程间通信,但是传送的数据只能是长整型的数据,不能是字符串。所以这个就是这种方式的局限。
定义完消息之后,可以使用如下的方法来发送消息:
Pwnd->SendMessage(WM_USER+0x401, NULL, (LPARAM)Msg)

参数代表的含义,在此就不多费口舌了,可以查阅MSDN。
好了,废话不多说,上代码:
SendDlg:
afx_msg LRESULT OnUserSendMsg(WPARAM wParam, LPARAM lParam); // 自定义的消息

BEGIN_MESSAGE_MAP(CSendDlgDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_STRSEND, OnUserSendMsg)//}}AFX_MSG_MAPON_BN_CLICKED(IDOK, &CSendDlgDlg::OnBnClickedSendMsg)END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////// 发送数据LRESULT CSendDlgDlg::OnUserSendMsg(WPARAM wParam, LPARAM lParam){UpdateData(); // 更新数据CWnd *pWnd = CWnd::FindWindow(NULL, _T("RecvDlg"));if (pWnd == NULL){AfxMessageBox(_T("无法找到接收窗口"));return 0;}UINT uMsg;uMsg = atoi(m_strSend);pWnd->SendMessage(WM_STRSEND, NULL, (LPARAM)uMsg); // 发送消息return 0;}

RecvDlg类似,此处提供完整的项目工程下载地址(注:项目工程使用vs2008 sp1建立的,如果使用别的vs版本,可能会出错)。
由于只能发送长整形的数据,所以,在程序中,你只能输入数字字符,而不能发送其它非数字字符。

单击这里下载演示工程

原创粉丝点击