回 帖 发 新 帖 刷新版面

主题:ShellExecute为什么有时会失败?

希望在程序中显示帮助文件,chm形式的。
因此用这个函数打开 在程序中这个作为单独的一个菜单项不与其它的共享任何变量。
但是发现不是每次都成功  既然都能打开了说明不是路径设置的错误吧?  而且发现是调用GetOpenFileName之后就再也不能打开了  它们之间有冲突吗?

回复列表 (共6个回复)

沙发

你说的话都不能作为找错误的根据,还是把关键代码拿出来的好

板凳

不是有返回值可以用来确定是什么错误吗?????有使用吗??

3 楼

[quote]你说的话都不能作为找错误的根据,还是把关键代码拿出来的好[/quote]
大哥啊!  你知道我为什么没敢贴上代码 也没敢多说吗?  就是你告诉我不要说得太多啊  现在又嫌少了  我晕了  哈哈……  
我做过试验  可能和OPenFIleName有关  我还是贴一回代码  尽量的精简而把问题描述清楚  还得请教你们帮我解答啊

4 楼

代码的部分……  尽量精简
case IDM_HELPTHEME:
if( (int)ShellExecute(hwnd,"open","HelpFile.CHM",NULL,
    HelpFilePath,SW_SHOWNORMAL) <= 32 )                
      MessageBox(hwnd,"无法打开帮助文件,请确认\n文件是否存在或路径正确.",
                "错误",MB_OK | MB_ICONERROR);
break;

其中HelpFilePath是一个定义的常量const char[],任何其他代码都没有用到它所以不会改变  改变了也没关系,这个参数本来可以设定为空的

这个是菜单项仅仅这么简单而已,就是打开帮助文件,不与其它任何代码共享变量
还有的是打开文件的自定义菜单项和默认菜单项,程序开始时显示的是默认值,此时可以打开帮助文件,而且点了几次帮助就能打开几个……自从选择自定义以后,但是是真正选了文件的,不是取消的话在单击帮助就提示MessageBox了,而且在选回默认项还是不能打开帮助文件

5 楼

测试过……GetOpenFileName时没按确定选择文件之前  ShellExecute的返回值 = 42, > 32。  而选择了自定义的文件后在点击帮助项 打不开帮助文件  返回值 = 2, 小于32不是说明有错误吗?
2 也就是 File not find  但是我明明是没动过帮助文件  而且GetOpenFileName所选择的是音乐文件和帮助文件一点关系都没有啊。
所以我又换方法验证一次,用ShellExecuteEx,还是这种结果,但是打不开windows会以对话框提示,说找不到文件,请单击开始搜索……  
怎么会找不到呢? 难道这个函数和GetOpenFileName有冲突?

6 楼

诶,我的QQ315223811,给我你的代码,基本上知道你错在哪里。。。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册