首页 > 代码库 > ShellExecute传递参数外引程序

ShellExecute传递参数外引程序

这样的程序分为两个部分,一个是引用的程序,一个是被引用的程序。
核心的东西也比较简单

引用他人,需要传递参数
    CString exePath;
    CString paramPath;
    GetDlgItemText(IDC_EXEPATH,exePath);
    GetDlgItemText(IDC_PARAMS,paramPath);
    ShellExecute(this->m_hWnd,"open",exePath,paramPath,"",SW_SHOW );

被他人引用,需要读取参数
//  获取别的程序传递过来的参数
    CString strCommand =  GetCommandLine(); 
技术分享
获得的是类似这样的一个东西,分割开来或者进行模式识别,就能够得到结果。
这种方法,虽然可行,但是难以错误控制,最好还是能够通过消息传递的方式来进行处理。
在程序的运行的过程,如何传递参数?windows是消息循环的,能否通过这个机制来做。那么做的是程序间传递参数,就是进程间通信。
参考了相关的资料,发现了解决方法。可能这个时候,想要传递自定义消息不好来做,还是要依靠系统的消息。
资料显示一个消息是WM_SETTEXT。一个消息是WM_COPYDATA。都可以达到效果,我也进行了测试。相比较WM_SETTEXT可能是主要传递TEXT的,而WM_COPYDATA则更多是传递数据的。
关键代码,发送端
void CAaDlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    CWnd *pWnd=CWnd::FindWindow(NULL,_T("Bb")); 
    if(pWnd==NULL)
    {
        AfxMessageBox((CString)"接收程序没有运行!");
        return ;
    }
     CString str = _T"Hello" );
     pWnd->SendMessage(WM_SETTEXT ,0,(LPARAM)(LPCTSTR)str);
}
接受端
afx_msg LRESULT CBbDlg::OnSetTextMsg(WPARAM wParamLPARAM lParam)
{
    char str[ 256 ];
    wsprintfstr"%s", (char*) lParam );
    return 0;
}
最后把两者结合起来,这样就能够在程序中通过传递图片的索引来传递值了。应该是解决问题的办法。
最终的解决的结果,是能够直接传递图片的地址,并且直接打开的。通过适当的修改,能够直接运用于目前的石材大板项目中去。
进一步研究,发现在doc/view模式中,这个东西不是能够直接识别的,怕是还要想想办法。
最后想到的办法,还是用来找对话框,然后反过来处理这些东西







来自为知笔记(Wiz)


附件列表

     

    ShellExecute传递参数外引程序