首页  :: 新随笔  :: 管理

VC进程间通信之消息传递

Posted on 2011-04-21 14:30  季枫  阅读(3891)  评论(0编辑  收藏  举报
vpn客户端要实现web登陆,采用activeX是相对来说最便捷、可靠性最好的一种方式,缺点在于activeX只适用于IE浏览器。
那么vpn客户端要为ActiveX提供调用接口和接收相应的参数,一般常用的方式有两种:
  1、socket通讯
  2、可执行程序的运行参数

如果是socket通讯必须要vpn客户端作监听tcp端口接收处理消息,activeX发消息,实现相对来说比较复杂;
可执行程序的运行参数让activeX调用相对来说非常简单,但是执行可执行程序都是以新开一个系统进程方式执行,那么要实现通讯需要解决:1、vpn客户端在系统中只能有一个进程实例   2、在新进程收到消息后需要收到的消息发送给旧的进程,然后退出。

vc实现进程通讯的实例:
cpp source:

    const UINT WM_MYMESSAGE = WM_USER + 1;
    CWnd *pWnd=CWnd::FindWindow(NULL,"GMS Version 1.1");//目标进程的窗口的captain
    if(pWnd)   
    {   
        pWnd->SendMessage(WM_MYMESSAGE, NULL, NULL);
    }   

窗口对象的 .h:
    #define WM_MYMESSAGE WM_USER + 1
    afx_msg LRESULT OnMyMessage(WPARAM wp, LPARAM lp);

窗口对象的.cpp:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
   ...
   ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
   ...
END_MESSAGE_MAP()

LRESULT CMainFrame::OnMyMessage(WPARAM wp, LPARAM lp)
{
    AfxMessageBox("Hello World");
}
智读 | 成都会领科技有限公司官网 | 智读App下载 | 每天听本书的博客 | |