av文档最新地址:av格式 2024-04-16 21:13:17 0 0 通过双击文件,怎样使windows调用我自己编的程序打开这个文件? 我是这样做的: 先生成了一个自己已知格式的文件xxx.xyz,然后将该类.xyz文件的打开方式设我的程序my.exe。 这样双击xxx.xyz,系统就会调用my.exe。但是my.exe 中怎样处理才能得到我需要打开的文件名? 我试过用获取命令行的方式: 通过AfxGetApp()->m_lpCmdLine来获取这个文件名。 系统提示了一个很怪的消息框“未发生错误!” 没有找到xxx.xyz文件。 解决方案 » 你要这样注册 “my.exe” “%1” 在资源管理器菜单选-文件夹选项,在文件类型中新建一个xyz文件类型,指定打开方式就行了啊 如楼上说的,在[文件夹选项里],指定文件类型和打开方式 或者在注册表中指定 最简单的方法就是选择你要打开的文件,点击鼠标右键,选择打开方式,在弹出的对话框中选择浏览,找到相应的打开程序,同时选中始终用选择的程序打开文件,再确定就可以了 如果你的my.exe要作为安装程序安装到目标机器,那就要在安装的时候修改目标机器的注册表,把对应的文件类型和打开方式添加到注册表 建议楼主再仔细学习一下MFC的 Document/View ,不妨用向导编一个测试程序试试。 兄弟们啊!谢谢了,可是你们没有理解我的意思我问题中已经说明了,系统已经调用了my.exe 只是my.exe不知到我双击的那个文件! 关键是在my.exe中怎么处理,才能将获得这个文件名(绝对不是用鼠标单击打开文件按钮弹出CFileDialg这样的手动操作).我想知道,双击xxx.xyz文件后系统做了什么操作,向my.exe传了些什么参数,怎样才能利用这些参数自动的打开xxx.xyz文件? 向Windows注册你文件的扩展名就行了…….. 文档视图结构就是这样的. 按2,3,4楼兄弟的方法去做,如果还是提示找不到文件,就应该是你程序中处理AfxGetApp()->m_lpCmdLine的问题了。兄弟不妨贴出代码看看啊 File-type associations is stored in registry. see http://www.codeproject.com/shell/cgfiletype.asp 兄弟们啊!谢谢了,可是你们没有理解我的意思我问题中已经说明了,系统已经调用了my.exe 只是my.exe不知到我双击的那个文件! 关键是在my.exe中怎么处理,才能将获得这个文件名(绝对不是用鼠标单击打开文件按钮弹出CFileDialg这样的手动操作).我想知道,双击xxx.xyz文件后系统做了什么操作,向my.exe传了些什么参数,怎样才能利用这些参数自动的打开xxx.xyz文件? 首先,在编写my.exe时,要传入一个文件名作为参数给主程序,取到参数后判断,如果参数为空就不打开任何文件,如果非空,判断文件是否存在,不存在则提示文件无效,最后就是打开由参数传进来的文件名,然后编译生成你的exe 然后在做上述的文件关联,这样你双击关联文件就能调用你的exe打开了 用这个取得传递exe后传递的参数:AfxGetApp()->m_lpCmdLine 如果是双击,就是传递的被双击的文件名。 自己想怎么处理怎么处理。 奇怪的是:我通过工程属性添加的命令行 和通过双击文件得到的命令行是完全相同的都是”C:\Documents and Settings\Administrator\桌面\测试包\xxx.xyz”但是前者能打开文件, 后者却提示“未发现错误!”没有打开文件。 CString st = AfxGetApp()->m_lpCmdLine; AfxMessageBox(st); CFile file( st, CFile::modeRead ); 因为传递命令行参数时, 有个小细节: 如果全路径中含有空格,那么传递的命令行参数将加上引号。 不信你试一下c:\a.txt这样的文件肯定不会出错 因此,你要做的就是去掉这个引号, CString st = AfxGetApp()->m_lpCmdLine; if(st.Left(1)==”\”“)//如果第一个字符是引号,那么去掉之 { st=st.Mid(1,st.GetLength()-2); } AfxMessageBox(st); CFile file( st, CFile::modeRead ); 收藏(0)