1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Windows使用自定义消息实现进程之间通信

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

时间:2024-02-11 13:09:50

相关推荐

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

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

单击这里下载演示工程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。