首页
社区
课程
招聘
[求助]关于ShellExecute如何打开文件关联后的文件?
发表于: 2013-5-27 18:06 8356

[求助]关于ShellExecute如何打开文件关联后的文件?

2013-5-27 18:06
8356
别人给我发了一个.wps文件,无奈我电脑上没有安装WPS,庆幸的是我安装了WORD,然后我右键--属性---修改打开方式-----选择了WORD。

然后我把这个文件(.wps)拖入到了我的软件中,在我的软件中用ShellExecute打开,却没有任何反应,这里如何实现在我的软件中也可以打开呢?
软件中打开方式
ShellExecute(句窗口柄,_T("open"),文件完整路径,NULL,NULL,SW_SHOWNORMAL);

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1760
活跃值: (1616)
能力值: ( LV12,RANK:222 )
在线值:
发帖
回帖
粉丝
2
重命名 .wps 为 .doc
2013-5-27 19:07
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
哈哈,重命名不太友好吧,万一人家电脑上本就安装了wps呢,还有其他方式么亲
2013-5-27 20:02
0
雪    币: 213
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你选打开方式的时候,默认打开方式的选项选上了吗?选上试试!
2013-5-27 20:04
0
雪    币: 778
活跃值: (208)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
那这样行不,我也没测试,理论上可行。真是有缘啊,我回答你好几个问题了

	TCHAR			szPath[MAX_PATH];
	DWORD			cchPath;

	cchPath = MAX_PATH;
	AssocQueryString(0, 
		ASSOCSTR_EXECUTABLE, 
		_T(".doc"),
		NULL,
		szPath,
		&cchPath);//查询与.doc关联的可执行文件
	ShellExecute(窗口句柄, "open", szPath, 文件完整路径, NULL, SW_SHOWNORMAL);
2013-5-27 20:20
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=wertyuyuyu;1181467]那这样行不,我也没测试,理论上可行。真是有缘啊,我回答你好几个问题了

        TCHAR                        szPath[MAX_PATH];
        DWORD                        cchPath;

        cchPath = MAX_PATH;
        AssocQueryString(0,
                ASSOCSTR_EXECU...[/QUOTE]

缘分啊,首先感谢亲。另外我发现了一个ShllExecute的问题,麻烦亲给解释一下:
本机测试代码:
ShellExecute(NULL,_T("open"),_T("C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"),_T("[COLOR="Red"]C:\\Documents and Settings[/COLOR]\\Administrator\\桌面\\KP520_bug.wps"),NULL,SW_SHOWNORMAL);
	DWORD error=GetLastError();


结果,打开了word,但是提示什么找不到文件,目录名无效等错误。
后来又测试了:
ShellExecute(NULL,_T("open"),_T("C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"),_T("C:\\234.docx"),NULL,SW_SHOWNORMAL);

发现是可以正常打开的,经过思考测试,发现问题出在了参数中不能有空格(C:\\Documents and Settings),我的系统是xp

用了很多ShellExecute,都换成CreateProcess成本有点高,所以你看看有啥方式解决这个问题吗,xp桌面路径中包含空格也是客观事实。。。。。
2013-5-28 11:36
0
雪    币: 778
活跃值: (208)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
7
可以试着给参数加上"",双引号
ShellExecute(NULL,_T("open"),_T("C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"),_T("\"C:\\Documents and Settings\\Administrator\\桌面\\KP520_bug.wps\""),NULL,SW_SHOWNORMAL);
2013-5-28 11:41
0
雪    币: 778
活跃值: (208)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
8
可以使用PathQuoteSpaces函数给路径加上双引号
2013-5-28 11:48
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
灰常感谢,PathQuoteSpaces
2013-5-28 13:17
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
虽然已经解决但还是附带追问一下吧:
用AssocQueryString获取.ico,.jpg等图片格式的关联程序,返回结果是
C:\\WINDOWS\\system32\\shimgvw.dll,用这个打不开ico,jpg格式的图片图标呢,也晓得注册表中是rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1,想用AssocQueryString写个通用的,结果其他格式的貌似都可以,比如.zip,.doc等,但.jpg.bmp.ico却不满足,这个不晓得是否有办法?
2013-5-28 14:07
0
游客
登录 | 注册 方可回帖
返回
//