首页 > 代码库 > 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 wParam, LPARAM lParam)
{
char str[ 256 ];
wsprintf( str, "%s", (char*) lParam );
return 0;
}
最后把两者结合起来,这样就能够在程序中通过传递图片的索引来传递值了。应该是解决问题的办法。
最终的解决的结果,是能够直接传递图片的地址,并且直接打开的。通过适当的修改,能够直接运用于目前的石材大板项目中去。
进一步研究,发现在doc/view模式中,这个东西不是能够直接识别的,怕是还要想想办法。
最后想到的办法,还是用来找对话框,然后反过来处理这些东西
来自为知笔记(Wiz)
附件列表
ShellExecute传递参数外引程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。