进程入门之sendessage(2)
来源:互联网 发布:淘宝法务部电话 编辑:程序博客网 时间:2024/05/22 04:34
参考: http://pppboy.blog.163.com/blog/static/3020379620101026103644889/
进程入门之sendessage(1) 里提到了一个win32 的API,SendMessage,它有4个参数如下。
SendMessage函数的原型为
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄。
Msg:指定被发送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息
WPARAM 和 LPARAM 两个附加参数,可以传递一些附加信息,由于它们是long 型的,所以只能传递数字,如果想要传递字符串之类的则需要使用指针,即字符串的地址。
但是并不只有上面这种发送消息的API,CWnd 类也有成员函数 SendMessage,而且只有3个参数,如下:SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );下面的示例中使用的是CWnd 类的成员函数 SendMessage来进行发送消息的。
一、使用WM_COPYDATA消息在不同进程发送消息传递字符串
发送WM_COPYDATA消息在进程间传送数据,WM_COPYDATA 是系统消息。不同于进程入门之sendessage(1)中的自定义消息。WM_COPYDATA结合sendmessag
来完成进程间字符串的发送。
(1)发送消息
The exchange of data is performed by finding the other application (using FindWindow) and sending a WM_COPYDATA message to that window
使用FindWindow找到窗口,然后发送WM_COPYDATA消息,字符串附加到COPYDATASTRUCT 结构体
LRESULT copyDataResult;CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitle);if (pOtherWnd)
{COPYDATASTRUCT cpd;cpd.dwData = 0;cpd.cbData = strDataToSend.GetLength();cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
copyDataResult = pOtherWnd->SendMessage(WM_COPYDATA,(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),(LPARAM)&cpd);strDataToSend.ReleaseBuffer();// copyDataResult has value returned by other app
}else
{AfxMessageBox("Unable to find other app.");
}
(2)添加消息
The other app should handle the WM_COPYDATA message in the following manner
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)//{{AFX_MSG_MAP(CMyWnd)
...ON_WM_COPYDATA()...//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(3)消息处理
BOOL CMyWnd::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct){CString strRecievedText = (LPCSTR) (pCopyDataStruct->lpData);return CMyWnd::OnCopyData(pWnd, pCopyDataStruct);
}
二、备注说明
如果有4个参数的SendMessage,调用如下:
::SendMessage(hWnd->GetSafeHwnd(),WM_COPYDATA,NULL,(LPARAM)&cpd);//发送!
其中hWnd 是接受窗口的句柄。
- 进程入门之sendessage(2)
- 进程入门之CreateProcess
- 进程入门之管道
- 进程入门之sendmessage
- 进程入门之信号量
- linux菜鸟入门之进程
- Erlang编程入门之并发编程-进程
- 进程入门之使用文件映射
- Linux C进程与多线程入门—(2)等待进程
- Androidk开发入门之使用AIDL实现进程通信
- smali入门之迭代器循环:列出进程名字
- Android入门之在客户进程中注册InputChannel
- Java 入门 之 IO操作与进程、线程
- linux入门:进程间通信之匿名管道
- Linux入门:进程间通信之消息队列
- Linux_入门之进程和系统服务的控制
- IPC之AIDL -- APK之间进程通信(入门)
- C#之入门总结_进程,线程_14
- MVVM模式的一个小例子
- android中的权限
- 近似求pi
- 图着色--非递归实现
- NIS和pbs服务改动
- 进程入门之sendessage(2)
- 考数据库系统会用到的一些计算方法和题目整理(3)
- 第二周作业
- 我要开始写博客了
- 简单事件处理程序
- J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析
- 各种I/O模型的比较
- 关于统计ascii码文本中英语单词的出现频率的c++实现
- 浅谈C#托管程序中的资源释放问题