【原创】wince 驱动发送广播消息
在wince的驱动下,添加自定义的消息,在某一时刻发送到HWND_BROADCAST,在应用层中,相应的程序接收这个消息,并进行相应的处理。
驱动中的定义发送消息:(例如:)
//******************************************************************** // Function : SendSIGNALMessage // Description : 发送信号消息 // Input : signal : 信号 // Output : NONE // return : TRUE/FALSE //******************************************************************** BOOL SendSIGNALMessage(int signal) { BOOL ret = FALSE; // 信号消息 static UINT WM_TGD_SIGNAL = RegisterWindowMessage(_T("TGD_SIGNAL_MESSAGE")); if(WM_TGD_SIGNAL){ ret = PostMessage(HWND_BROADCAST, WM_TGD_SIGNAL, (WPARAM)signal, 0); if(!ret) RETAILMSG(1, ( TEXT("### Send SIGNAL Message Fail! ###\r\n") )); else RETAILMSG(1, ( TEXT("### Send SIGNAL Message Success! signal:%d ###\r\n"), signal )); } else{ RETAILMSG(1, ( TEXT("### RegisterWindowMessage WM_TGD_SIGNAL Fail! ###\r\n") )); } return ret; }
应用层配置接收自定义消息:
1、添加消息定义:(和驱动层之间的定义一样)(在相应的cpp文件添加)
// 信号消息
static UINT WM_TGD_SIGNAL = RegisterWindowMessage(_T("TGD_SIGNAL_MESSAGE"));
2、添加接收消息处理函数:
(在相应的头文件添加声明)
afx_msg LRESULT OnSelfMessageHandle(WPARAM wParam, LPARAM lParam);
(在相应的cpp文件添加处理)
//******************************************************************** // Function : OnSelfMessageHandle // Description : 自定义消息接收函数 // Input : wParam : // Input : lParam : // Output : // return : LRESULT //******************************************************************** LRESULT CD3GOtherDlg::OnSelfMessageHandle(WPARAM wParam, LPARAM lParam) { CString tmp; tmp.Format(_T("wParam:%d, lParam:%d"), wParam, lParam); MessageBox(tmp, L"自定义消息接收函数"); return 1; }
3、添加自定义消息与接收函数的映射:(在cpp文件中添加,下面蓝色加粗部分就是要添加的)
BEGIN_MESSAGE_MAP(CD3GOtherDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BTN_EXIT, &CD3GOtherDlg::OnBnClickedBtnExit)
ON_BN_CLICKED(IDC_BTN_GET_NET_MSG, &CD3GOtherDlg::OnBnClickedBtnGetNetMsg)
ON_BN_CLICKED(IDC_BTN_CHECK_WORK, &CD3GOtherDlg::OnBnClickedBtnCheckWork)
ON_REGISTERED_MESSAGE(WM_TGD_SIGNAL, OnSelfMessageHandle)
END_MESSAGE_MAP()
到这里就可以在应用层中接收到底层发送的消息了,这种情况适用于:有一个广播消息,要告知需要它的应用程序。需要接收这个消息的应用程序添加接收处理就可以了。
上述方法已经经过测试,在底层驱动发送了一个消息之后,上层的几个应用程序都能够接收到对应的消息,并且传递的参数也正确。