进程间通信的一种方法——剪贴板

<script src="win.js" type="text/javascript"></script>

进程间通信有很多种方法:

  MSMQ  
  COM/DCOM  
  DDE  
  剪贴板  
  管道  
  SOCKET  
  数据库  

这里介绍剪贴板使用方法:

使用WM_COPYDATA是个简单,可靠的办法  
   
  用WM_COPYDATA的前提:  
   
  1,知道接收消息进程的句柄。  
   
  2,接收消息进程重载了WM_COPYDATA消息映射,能对其做出反应(否则不是发送端自作多情了?)  
   
  看过前提,的出结论:在自己写的两个进程间用WM_COPYDATA再好不过。  
   
  下面CODE几行就说明了一切。  
   
  获得句柄的方法,最简单的方法就是使用FindWindow,找窗口类,或者名,如果你觉得这样不把握,那就利用SetProp个窗口做个记号....(不说这些,跑踢儿了都)  
   
  发送端代码:  
   
  HWND   hWnd   =   FindWindow(NULL,"MyApp");  
   
  if(hWnd!=NULL)   
  {   
      COPYDATASTRUCT   cpd;   /*给COPYDATASTRUCT结构赋值*/   
      cpd.dwData   =   0;   
      cpd.cbData   =   strlen("字符串");   
      cpd.lpData   =   (void*)"字符串";   
      ::SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cpd);//发送!   
  }  
   
  接收端重载ON_WM_COPYDATA消息映射函数(下面是手工所要加的,你最好还是用ClassWizard)  
   
  afx_msg   BOOL   OnCopyData(CWnd*   pWnd,   COPYDATASTRUCT*   pCopyDataStruct);  
   
  ON_WM_COPYDATA()/*消息映射*/  
   
  BOOL   CMainFrame::OnCopyData(CWnd*   pWnd,   COPYDATASTRUCT*   pCopyDataStruct)    
  {   
        AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));/*利用对话框表示收到消息*/   
    
        return   CWnd::OnCopyData(pWnd,   pCopyDataStruct);  
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值