在应用程序之间传递参数

在编程中经常会遇到在应用程序间传递参数的问题

我总结了两种方法

一。在用ShellExcute启动另外一个应用程序的同时将参数传递过去.

函数ShellExcute的原型:

HINSTANCE ShellExecute(

HWND    hwnd,//父窗口的窗口句柄

LPCTSTR   lpOperation //操作类型有"open","print","explore"三种。如果该参数为NULL,则默认为打开类型open打开应用程序时为"open"

LPCTSTR    pFile,//子窗口的文件名(全路径

LPCTSTR lpParameters, //要传递到子窗口中的参数

LPCTSTR lpDirectory //子应用程序的默认路径

INTnShowCmd;       //子窗口的显示方式,如SW_SHOWNORMAL

);

具体做法如下:

在父程序中调用子程序,并传递参数sParameter :

CString playexePath= "......";

CString sParameter = "......"; ShellExecute(NULL,NULL,playexePath,sParameter ,NULL,SW_NORMAL);

在子程序中接受父窗口传过来的参数:

    在子程序的工程中,***App类的InitInstance函数中加入接受参数的代码:

BOOL CPlayWaveApp::InitInstance() { 。。。。。。

 //取得语音回放窗口中传过来的参数  if(__argc >= 1)    {    strparameter = __argv[1];  //strparameter 为子程序中存放传过来的参数的变量  }

。。。。。。

}

二。用WM_COPYDATA消息在应用程序间传递参数:

 在父程序中用如下的代码:  CString strWindowTitle = _T(”Window Name“);//父窗口标题  CString   strDataToSend     =   _T("This   is   a   message   to   send");   //要传递的变量               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.");     }  

在子程序中添加WM_COPYDATA的消息相应函数OnCopyData,在该函数中接受传过来的变量,代码如下

 

BOOL   CMyWnd::OnCopyData(CWnd*   pWnd,   COPYDATASTRUCT*   pCopyDataStruct)       {     CString   strRecievedText   =   (LPCSTR)(pCopyDataStruct->lpData);         return   CMyWnd::OnCopyData(pWnd,   pCopyDataStruct);     }  

注意:用WM_COPYDATA传递参数时,必须在子窗口显示以后才可以传递参数。否则会由于找不到子窗口而无法传递。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值