如何接收另外一个程序对我发送的消息? 如何接收另外一个程序对我发送的消息?一个程序对我的程序postmessage 了一个消息,我如何接收到这个消息?怎么处理他 ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自定义消息, msdn中ON_MESSAGE 在相应的窗口类中添加消息响应函数,然后用ON_MESSAGE关联: postmessage ()自己定义的消息?可以详细点吗? 自定义消息, msdn中ON_MESSAGE看啊~~ 在我的程序里面得不到,另外程序给我发送的消息啊!怎样才能得到呢?程序1: #define WM_MYMESSAGE WM_USER+!;CSMCLASS::func(){ HWND hWnd = ::FindWindow("NULL","Other Program"); ::postMessage(hwnd,WM_MYMESSAGE,lpram,0);}我怎样在另外一个程序中得到我这个消息? ::PostMessage()只能在线程间传递消息,不能在进程间传递消息正确步骤:1. 在互传消息的两个程序中同时定义一个常量作为消息ID,比如 #define WM_MYMESSAGE WM_USER+!;2. 在两个程序中分别注册该消息,方法是 m_iMsgID = RegisterWindowMessage(WM_MYMESSAGE);3. 在发送消息的程序中取得接收消息的程序的主线程ID——m_id,然后发送消息: ::PostThreadMessage(m_id,m_iMsgID,参数1,参数2);4. 在接收消息的程序的app类的PreTranslateMessage中截获该消息,做出响应就可以了: PreTranslateMessage(MSG* pMsg) { if(pMsg->message == m_nIpsAndScsMsg) { // do what you want } } 我也有同样问题,目标程序收不到我发的消息,发消息的应用程序是Delphi编的 知道了消息号要相同例如 A程序:#defile MY_MSEEAGE (WM_USER+1)在B程序中也一样. 有没有搞错?!进程之间怎么能用postmessage来发送消息?那个是在同一个进程里用的。进程之间只能用DDE,内存映射之类的,最简单的就是发送WM_COPYDATA消息了。SendMessage(hwnd,WM_COPYDATA,wParam,lParam);其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:typedef struct tagCOPYDATASTRUCT{ DWORD dwData;//用户定义数据 DWORD cbData;//数据大小 PVOID lpData;//指向数据的指针}COPYDATASTRUCT;该结构用来定义用户数据。 进程之间的消息发送与接收在实际应用中进程之间需要发送和接收Windows消息来通知进程间相互通讯,发送方发送通讯的消息以通知接收方,接收方在收到发送方的消息后就可以对内存进行读写操作。我们在程序设计中采用Windows注册消息进行消息传递,首先在发送进程初始化过程中进行消息注册:m_nMsgMapped=::RegisterWindowsMessage("Mapped");m_nMsgHandle=::RegisterWindowsMessage("Handle");m_nMsgShared=::RegisterWindowsMessage("Shared");在程序运行中向接收进程发送消息:CWnd* pWndRecv=FindWindow(lpClassName,"Receive");pWndRecv->SendMessage(m_MsgMapped,0,0);pWndRecv->SendMessage(m_nMsgHandle,(UINT)GetCurrentProcessID(),(LONG)pApp->m_hGlobalHandle);pWndRecv->SendMessage(m_nMsgShared,0,0);可以按如下方式发送WM_COPYDATA消息:static COPYDATASTRUCT cds;//用户存放数据pWnd->SendMessage(WM_COPYDATA,NULL,(LONG)&cds);接收方进程初始化也必须进行消息注册:UNIT CRecvApp:: m_nMsgMapped=::RegisterWindowsMessage("Mapped");UNIT CRecvApp::m_nMsgHandle=::RegisterWindowsMessage("Handle");UNIT CRecvApp::m_nMsgShared=::RegisterWindowsMessage("Shared");同时映射消息函数如下:ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgMapped,OnRegMsgMapped)ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgHandle,OnRegMsgHandle)ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgShared,OnRegMsgShared)在这些消息函数我们就可以采用上述技术实现接收进程中数据的读写操作了。 可以阿我post的消息收到了 阿 用管道吧。MSDN: PlatformSDK-->Base Services--->Interprocess Communications--->Pipes 切割窗口CTreeView的一个更新问题 LNK2001错误, 高手能看看? 没有找到 MFC42D.DLL,虽然我知道可以用静态Release解决,但不知为什么此次不行,, 请教关于socket的问题 如何调整显示器亮度? Dib和Ddb那个应用前景大? vc中的宏 如何取得当前IE的URL? 关于WINDOWS核心编程中的HOOKAPI的疑问 CFormView派生类窗口为何DEL键不管用了? 有关指针的简单问题。迷茫中 在执行数据库操作,比如INSERT时候出错,是不是整个程序挂掉呢?
看啊~~
怎样才能得到呢?程序1:
#define WM_MYMESSAGE WM_USER+!;CSMCLASS::func()
{
HWND hWnd = ::FindWindow("NULL","Other Program");
::postMessage(hwnd,WM_MYMESSAGE,lpram,0);
}我怎样在另外一个程序中得到我这个消息?
#define WM_MYMESSAGE WM_USER+!;2. 在两个程序中分别注册该消息,方法是
m_iMsgID = RegisterWindowMessage(WM_MYMESSAGE);3. 在发送消息的程序中取得接收消息的程序的主线程ID——m_id,然后发送消息:
::PostThreadMessage(m_id,m_iMsgID,参数1,参数2);4. 在接收消息的程序的app类的PreTranslateMessage中截获该消息,做出响应就可以了:
PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == m_nIpsAndScsMsg)
{
// do what you want
}
}
例如 A程序:
#defile MY_MSEEAGE (WM_USER+1)
在B程序中也一样.
进程之间只能用DDE,内存映射之类的,最简单的就是发送WM_COPYDATA消息了。SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
该结构用来定义用户数据。
m_nMsgMapped=::RegisterWindowsMessage("Mapped");
m_nMsgHandle=::RegisterWindowsMessage("Handle");
m_nMsgShared=::RegisterWindowsMessage("Shared");
在程序运行中向接收进程发送消息:
CWnd* pWndRecv=FindWindow(lpClassName,"Receive");
pWndRecv->SendMessage(m_MsgMapped,0,0);
pWndRecv->SendMessage(m_nMsgHandle,
(UINT)GetCurrentProcessID(),(LONG)pApp->m_hGlobalHandle);
pWndRecv->SendMessage(m_nMsgShared,0,0);
可以按如下方式发送WM_COPYDATA消息:
static COPYDATASTRUCT cds;//用户存放数据
pWnd->SendMessage(WM_COPYDATA,NULL,(LONG)&cds);接收方进程初始化也必须进行消息注册:UNIT CRecvApp:: m_nMsgMapped=::RegisterWindowsMessage("Mapped");
UNIT CRecvApp::m_nMsgHandle=::RegisterWindowsMessage("Handle");
UNIT CRecvApp::m_nMsgShared=::RegisterWindowsMessage("Shared");
同时映射消息函数如下:
ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgMapped,OnRegMsgMapped)
ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgHandle,OnRegMsgHandle)
ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgShared,OnRegMsgShared)
在这些消息函数我们就可以采用上述技术实现接收进程中数据的读写操作了。