vb打开chm帮助文件

时间:2022-06-28 14:02:09
我做成的chm帮助文件打开时,提示:e:\aa\bb.chm不是windows帮助文件,或者该文件已被破坏。但是我直接打能打开 ,为什么?
Private Sub helpc_Click()
    With CommonDialog1
        .HelpCommand = cdlHelpContents
        .ShowHelp
    End With

End Sub
就这样,为什么会出现上述错误?是不是打开的应该是.hlp文件,而不能是.chm文件?我做的是.chm文件,应该怎样修改?

8 个解决方案

#1


来源:中国计算机报

CHM文件是微软公司开发的新一代基于HTML的帮助文件格式,它一问世就以其易用性和新颖的界面赢得了广大编程一族的喜爱,目前大多数软件都用它来制作应用程序的帮助文件。

关于Html Help Workshop的用法已有文章介绍,在这里笔者着重讲述在实际编程中如何调用CHM文件,从而建立起应用程序的帮助系统,本文以VisualBasic 6.0为语言平台。

声明HtmlHelp API函数

由于HtmlHelp API 并没有集成在Windows操作系统的API中,因此不能直接调用HtmlHelp.lib 库函数,但HtmlHelp API的功能位于hhctrl.ocx中,这样可以通过调用hhctrl.lib库函数来显示帮助文件,其声明格式如下:
Declare Function Htmlhelp Lib "hhctrl.ocx"Alias "HtmlHelpA"
(ByVal hwndCaller As Long,
ByVal pszFile As String,
ByVal uCommand As Long,
ByVal dwData As Any) As Long


具体参数含义如下:
hwndCaller 调用该函数的窗体句柄
pszFile 帮助文件的名称和位置
uCommand 帮助类型
dwData 与uCommand相匹配的附加参数

定义uCommand 常数

Const HH_DISPLAY_TOPIC = &H0
Const HH_DISPLAY_INDEX=&H2
Const HH_HELP_CONTEXT = &HF
Const HH_DISPLAY_SEARCH= &H3
Const HH_DISPLAY_TEXT_POPUP= &HE
接着指定CHM文件的名称和位置:
App.HelpFile=App.Path & "\Sample.CHM"


程序调用
调用缺省主题帮助
Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_TOPIC,
ByVal "Default.htm")


此调用方式用于没有上下文ID号的情形,dwData可指定一个在CHM文件内的缺省htm文件,也可取NULL,这是HtmlHelp API最基本的一种用法。

调用关键字帮助

Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_INDEX,
(DWORD)"关键字"))


此调用方式中dwData取索引文件(.hhk)中存在的关键字。
调用上下文敏感帮助
Call HtmlHelp(hwnd,
App.HelpFile,
HH_HELP_CONTEXT, 1000)


此调用方式用于含有映射信息的CHM文件, dwData取映射表中存在的ID号。
调用全文搜索帮助
Dim Query As HH_FTS_QUERY
Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_SEARCH,
(DWORD)& Query)


DwData参数指定一个指向HH_FTS_QUERY结构的指针。

调用弹出式帮助

Dim Popup As HH_POPUP
Call HtmlHelp(hwnd,
NULL,
HH_DISPLAY_TEXT_POPUP,
(DWORD)&Popup)


PszFile通常取NULL,也可以指定一个CHM和一个在该CHM文件中的TEXT文件,DwData用于指定一个指向HH_POPUP结构的指针。

指定显示窗体形式
由于显示帮助文件的缺省窗体是在编译该CHM文件时的窗体,因此为了更好地控制帮助文件的显示,在制作CHM文件时,可以自定义一个窗体形式。在程序中可以通过两种方法来调用自定义窗体。
1.当uCommand 为HH_DISPLAY_TOPIC或HH_HELP_CONTEXT时,在pszFile参数中用“>”符号,其后跟上窗体名称即可。如pszFile取:
App.HelpFile & "> MainWin"
2.用HtmlHelp函数直接指定:
Dim WinType As HH_WINTYPE
Call HtmlHelp(hwnd,
App.HelpFile &" > MainWin",
HH_SET_WIN_TYPE,
(DWORD) &WinType)


必须声明的是,以上叙述中使用的“Sample.CHM”、“Default.htm”、“关键字”、“1000”和“MainWin”等均属举例,应用中需要根据自己的具体情况来设置这些参数的实际值。

至此,应用程序的帮助系统就建立起来了,当然,要把帮助系统做得更完美一点,还有更多的工作要做。 

#2


Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
     (ByVal hwndCaller As Long, ByVal pszFile As String, _
     ByVal uCommand As Long, ByVal dwData As Long) As Long
HtmlHelp hwnd, App.Path & "\帮助.chm", HH_DISPLAY_TOPIC, 0

#3


喻华峰被指控两个罪名:贪污10万元和行贿97万元。 


关于贪污,检察机关的指控是:喻华峰指使财务人员以业务人员的名义冒领156万元公款,《南方都市报》九个编委将其中58万元私分,喻华峰分得10万元。但有关调查以及庭审已经查明,所谓156万元公款其实是《南方都市报》经营人员应得的奖金,而不是所谓国家财产。这156万元中的每一笔都有合法来源,都是根据《南方都市报》与《南方日报》集团签订的合同确定提取的,它们的所有权分属于广告业务员、广告部副总经理等。考虑到当年经营人员收入已经很高,为了平衡经营部门和采编部门、行政部门的奖金差异,《南方都市报》决定把这156万元从经营人员那里拿出来供所有《南方都市报》员工分配。喻华峰起的作用是执行编委的决定劝说业务员、广告部副总经理等同意把奖金拿出来,而不是私自指使财务人员冒领公款。 


2000年度《南方都市报》可支配的年终奖金共计600多万元,其中就包括账面上已经发给经营部门个人的而他们又同意返回《南方都市报》的156万元。根据《南方日报》集团的规定,《南方都市报》编委有权决定奖金的分配方案。这一共605万元的奖金分为三次发放,前两次分别于2001年春节前后向全体员工以及管理人员发放,第三次剩余的58万元经过主编程益中提议编委讨论,于2001年6月在九个编委中间发放。至于为什么要在编委们中间进行第三次分配,主管《南方都市报》的南方日报集团编委解释说,南方都市报有很好的市场激励机制,优秀管理人员有很高的报酬,但在中国这特殊的国情下容易引来不必要的麻烦,所以他们后来给主要管理人员的奖金都不是一次发放,而是分几次发放。在这次很正常的奖金分配中,喻华峰享受主编待遇,分得10万元。 


可以确定地说,喻华峰所得的10万元是奖金,奖金的发放也符合程序。一位《南方都市报》的员工愤愤不平地说,如果这样的行为是贪污的话,那么,《南方都市报》以及中国几乎所有的报纸乃至所有的国有企业发的奖金都是贪污,中国的国有企业管理人员几乎个个都可以定为贪污犯。 


关于行贿,检察机关指控喻华峰为谋取不正当利益向《南方日报》编委李民英贿送97万元。根据我国刑法规定,行贿罪必须以谋取不正当利益为前提,但法庭上控方始终没有任何证据表明喻华峰试图谋取什么不正当利益。如果说喻华峰想向领导行贿的话,那么,他行贿的对象也应该是主管编委乃至社长而不应该是2001年12月就已经退职成为调研员的李民英。即使在2001年12月之前李民英任《南方都市报》主编以及作为分管《南方都市报》社委时期,喻华峰的职务任免、工资奖金的确定,以及《南方日报》集团与《南方都市报》的二级核算承包方案,都是由《南方日报》集团社委会集体讨论决定的,而并非由李民英说了算。喻华峰实在不具备拿97万元行贿李民英的动机。 


事实上,根据我们的调查了解,喻华峰送钱给李民英是代表《南方都市报》表达对李民英贡献的感谢。《南方日报》集团派驻《南方都市报》的调研员李民英曾经是《南方都市报》的创办人,这位从前的老领导被称为《南方都市报》“最大的业务员”——很多广告客户都是李民英出面谈判敲定的,他和喻华峰被称为《南方都市报》两大“铁人”,为《南方都市报》的崛起立下了汗马功劳。但根据《南方日报》社管理规定,李民英作为集团管理人员不准从集团下属《南方都市报》领工资和奖金。为了答谢李民英的贡献,《南方都市报》曾经多次讨论给他发奖金,2000年度的奖金名单上也已经明确列上李民英20万元,但考虑到集团的规章制度,李民英不能拿这些奖金。后来终于有了一个不太妥当的变通的方法:由喻华峰以个人的名义领出来奖金送给李民英。在《南方都市报》迅速发展的四年里,《南方都市报》以这种方式送给李民英共计97万元。正是这些奖金,被检察院认定为贿赂,喻华峰是行贿,李民英是受贿。 


时代背景 


应当说,《南方都市报》的做法有些违规,但指控喻华峰贪污行贿在法律上是非常勉强的,《南方都市报》的问题其实是一个财务管理不够规范的问题。中国有那么多腐败问题,可是有关部门为什么非要拿《南方都市报》的财务管理问题大做文章?联想到2003年针对《南方都市报》和喻华峰持续半年多的调查,我们不得不怀疑,这个悲剧和2003年的社会背景有某种联系。 


2003年2月到3月,《南方都市报》多次努力冲击传统的信息封闭*公开报道SARS。 

4月25日,《南方都市报》的一篇报道《一大学毕业生因无暂住证被收容并遭毒打致死》震撼了整个国家,孙志刚之死导致了一部法规的废止和公民权利运动的浪潮。但收容遣送办法的废止在给上亿的中国农民工带来安全和尊严的同时也意味着某些人非法利益的损失。 


6月下旬,收容遣送办法刚刚废止,广州有关部门曾经召开过反思大会,但遗憾的是反思的背后潜伏着某些人对《南方都市报》的愤恨。之后,一个传言说:一位领导下令查《南方都市报》,直到查出问题为止! 


7月,《南方都市报》总经理喻华峰涉嫌“受贿”被拘留,审查后改为取保候审。同时,大量南方都市报的广告客户被调查,有关部门试图发现客户向喻华峰行贿的痕迹。 


12月下旬,《南方都市报》报道广东再次出现SARS。这样的信息公开对于人民生命安危来说是非常重要的,也是国务院曾经要求过的,然而南方都市报却为此付出惨重代价:当天值班编委被撤职,直到2004年3月,针对此事的调查还没有结束。 


2004年1月初,针对《南方都市报》的经济问题的调查骤然升级。 1月14日,喻华峰被正式逮捕,涉嫌的罪名由受贿变成了贪污和行贿。 


如果喻华峰被指控的罪名成立,他将面临十年以上的牢狱生涯,相应地,《南方都市报》九个编委也都会有罪,即使暂时不被处罚,他们也随时处在危险当中。

#4


用 CommonDialog 打开的 Help 必须是.hlp 文件

#5


用 CommonDialog 打开的 Help 必须是.hlp 文件


那怎样制作这个.hlp文件?

#6


Html Help Workshop用这个,楼上的说过
我也来说几个
VB中调用CHM 帮助的几种方法:
1.Private Sub Form_Load() 
  App.HelpFile = app.path & "\help.chm" 
  '调用与主程序同目录下的help.chm帮助文件,按F1键调用
End Sub 
2.Private Sub Form_Load() 
App.HelpFile = app.path & "\help.chm" 
End Sub 
private Sub CmdHelp_Click() 
SendKeys "{F1}" '发送击键到活动窗口 
End Sub
3.private Sub CmdHelp_Click()
Shell "hh.exe help.chm", vbNormalFocus 
'help.chm为指定的帮助文件,可包含路径。
End Sub
第四种 fuanwei(fuanwei)说了

#7


可以考虑调用hh.exe打开*.chm文件,hh.exe就在系统目录下面。

#8


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()
ShellExecute Me.hwnd, "open", "hh.exe", "123.chm", "c:\", vbNormal
End Sub

#1


来源:中国计算机报

CHM文件是微软公司开发的新一代基于HTML的帮助文件格式,它一问世就以其易用性和新颖的界面赢得了广大编程一族的喜爱,目前大多数软件都用它来制作应用程序的帮助文件。

关于Html Help Workshop的用法已有文章介绍,在这里笔者着重讲述在实际编程中如何调用CHM文件,从而建立起应用程序的帮助系统,本文以VisualBasic 6.0为语言平台。

声明HtmlHelp API函数

由于HtmlHelp API 并没有集成在Windows操作系统的API中,因此不能直接调用HtmlHelp.lib 库函数,但HtmlHelp API的功能位于hhctrl.ocx中,这样可以通过调用hhctrl.lib库函数来显示帮助文件,其声明格式如下:
Declare Function Htmlhelp Lib "hhctrl.ocx"Alias "HtmlHelpA"
(ByVal hwndCaller As Long,
ByVal pszFile As String,
ByVal uCommand As Long,
ByVal dwData As Any) As Long


具体参数含义如下:
hwndCaller 调用该函数的窗体句柄
pszFile 帮助文件的名称和位置
uCommand 帮助类型
dwData 与uCommand相匹配的附加参数

定义uCommand 常数

Const HH_DISPLAY_TOPIC = &H0
Const HH_DISPLAY_INDEX=&H2
Const HH_HELP_CONTEXT = &HF
Const HH_DISPLAY_SEARCH= &H3
Const HH_DISPLAY_TEXT_POPUP= &HE
接着指定CHM文件的名称和位置:
App.HelpFile=App.Path & "\Sample.CHM"


程序调用
调用缺省主题帮助
Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_TOPIC,
ByVal "Default.htm")


此调用方式用于没有上下文ID号的情形,dwData可指定一个在CHM文件内的缺省htm文件,也可取NULL,这是HtmlHelp API最基本的一种用法。

调用关键字帮助

Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_INDEX,
(DWORD)"关键字"))


此调用方式中dwData取索引文件(.hhk)中存在的关键字。
调用上下文敏感帮助
Call HtmlHelp(hwnd,
App.HelpFile,
HH_HELP_CONTEXT, 1000)


此调用方式用于含有映射信息的CHM文件, dwData取映射表中存在的ID号。
调用全文搜索帮助
Dim Query As HH_FTS_QUERY
Call HtmlHelp(hwnd,
App.HelpFile,
HH_DISPLAY_SEARCH,
(DWORD)& Query)


DwData参数指定一个指向HH_FTS_QUERY结构的指针。

调用弹出式帮助

Dim Popup As HH_POPUP
Call HtmlHelp(hwnd,
NULL,
HH_DISPLAY_TEXT_POPUP,
(DWORD)&Popup)


PszFile通常取NULL,也可以指定一个CHM和一个在该CHM文件中的TEXT文件,DwData用于指定一个指向HH_POPUP结构的指针。

指定显示窗体形式
由于显示帮助文件的缺省窗体是在编译该CHM文件时的窗体,因此为了更好地控制帮助文件的显示,在制作CHM文件时,可以自定义一个窗体形式。在程序中可以通过两种方法来调用自定义窗体。
1.当uCommand 为HH_DISPLAY_TOPIC或HH_HELP_CONTEXT时,在pszFile参数中用“>”符号,其后跟上窗体名称即可。如pszFile取:
App.HelpFile & "> MainWin"
2.用HtmlHelp函数直接指定:
Dim WinType As HH_WINTYPE
Call HtmlHelp(hwnd,
App.HelpFile &" > MainWin",
HH_SET_WIN_TYPE,
(DWORD) &WinType)


必须声明的是,以上叙述中使用的“Sample.CHM”、“Default.htm”、“关键字”、“1000”和“MainWin”等均属举例,应用中需要根据自己的具体情况来设置这些参数的实际值。

至此,应用程序的帮助系统就建立起来了,当然,要把帮助系统做得更完美一点,还有更多的工作要做。 

#2


Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
     (ByVal hwndCaller As Long, ByVal pszFile As String, _
     ByVal uCommand As Long, ByVal dwData As Long) As Long
HtmlHelp hwnd, App.Path & "\帮助.chm", HH_DISPLAY_TOPIC, 0

#3


喻华峰被指控两个罪名:贪污10万元和行贿97万元。 


关于贪污,检察机关的指控是:喻华峰指使财务人员以业务人员的名义冒领156万元公款,《南方都市报》九个编委将其中58万元私分,喻华峰分得10万元。但有关调查以及庭审已经查明,所谓156万元公款其实是《南方都市报》经营人员应得的奖金,而不是所谓国家财产。这156万元中的每一笔都有合法来源,都是根据《南方都市报》与《南方日报》集团签订的合同确定提取的,它们的所有权分属于广告业务员、广告部副总经理等。考虑到当年经营人员收入已经很高,为了平衡经营部门和采编部门、行政部门的奖金差异,《南方都市报》决定把这156万元从经营人员那里拿出来供所有《南方都市报》员工分配。喻华峰起的作用是执行编委的决定劝说业务员、广告部副总经理等同意把奖金拿出来,而不是私自指使财务人员冒领公款。 


2000年度《南方都市报》可支配的年终奖金共计600多万元,其中就包括账面上已经发给经营部门个人的而他们又同意返回《南方都市报》的156万元。根据《南方日报》集团的规定,《南方都市报》编委有权决定奖金的分配方案。这一共605万元的奖金分为三次发放,前两次分别于2001年春节前后向全体员工以及管理人员发放,第三次剩余的58万元经过主编程益中提议编委讨论,于2001年6月在九个编委中间发放。至于为什么要在编委们中间进行第三次分配,主管《南方都市报》的南方日报集团编委解释说,南方都市报有很好的市场激励机制,优秀管理人员有很高的报酬,但在中国这特殊的国情下容易引来不必要的麻烦,所以他们后来给主要管理人员的奖金都不是一次发放,而是分几次发放。在这次很正常的奖金分配中,喻华峰享受主编待遇,分得10万元。 


可以确定地说,喻华峰所得的10万元是奖金,奖金的发放也符合程序。一位《南方都市报》的员工愤愤不平地说,如果这样的行为是贪污的话,那么,《南方都市报》以及中国几乎所有的报纸乃至所有的国有企业发的奖金都是贪污,中国的国有企业管理人员几乎个个都可以定为贪污犯。 


关于行贿,检察机关指控喻华峰为谋取不正当利益向《南方日报》编委李民英贿送97万元。根据我国刑法规定,行贿罪必须以谋取不正当利益为前提,但法庭上控方始终没有任何证据表明喻华峰试图谋取什么不正当利益。如果说喻华峰想向领导行贿的话,那么,他行贿的对象也应该是主管编委乃至社长而不应该是2001年12月就已经退职成为调研员的李民英。即使在2001年12月之前李民英任《南方都市报》主编以及作为分管《南方都市报》社委时期,喻华峰的职务任免、工资奖金的确定,以及《南方日报》集团与《南方都市报》的二级核算承包方案,都是由《南方日报》集团社委会集体讨论决定的,而并非由李民英说了算。喻华峰实在不具备拿97万元行贿李民英的动机。 


事实上,根据我们的调查了解,喻华峰送钱给李民英是代表《南方都市报》表达对李民英贡献的感谢。《南方日报》集团派驻《南方都市报》的调研员李民英曾经是《南方都市报》的创办人,这位从前的老领导被称为《南方都市报》“最大的业务员”——很多广告客户都是李民英出面谈判敲定的,他和喻华峰被称为《南方都市报》两大“铁人”,为《南方都市报》的崛起立下了汗马功劳。但根据《南方日报》社管理规定,李民英作为集团管理人员不准从集团下属《南方都市报》领工资和奖金。为了答谢李民英的贡献,《南方都市报》曾经多次讨论给他发奖金,2000年度的奖金名单上也已经明确列上李民英20万元,但考虑到集团的规章制度,李民英不能拿这些奖金。后来终于有了一个不太妥当的变通的方法:由喻华峰以个人的名义领出来奖金送给李民英。在《南方都市报》迅速发展的四年里,《南方都市报》以这种方式送给李民英共计97万元。正是这些奖金,被检察院认定为贿赂,喻华峰是行贿,李民英是受贿。 


时代背景 


应当说,《南方都市报》的做法有些违规,但指控喻华峰贪污行贿在法律上是非常勉强的,《南方都市报》的问题其实是一个财务管理不够规范的问题。中国有那么多腐败问题,可是有关部门为什么非要拿《南方都市报》的财务管理问题大做文章?联想到2003年针对《南方都市报》和喻华峰持续半年多的调查,我们不得不怀疑,这个悲剧和2003年的社会背景有某种联系。 


2003年2月到3月,《南方都市报》多次努力冲击传统的信息封闭*公开报道SARS。 

4月25日,《南方都市报》的一篇报道《一大学毕业生因无暂住证被收容并遭毒打致死》震撼了整个国家,孙志刚之死导致了一部法规的废止和公民权利运动的浪潮。但收容遣送办法的废止在给上亿的中国农民工带来安全和尊严的同时也意味着某些人非法利益的损失。 


6月下旬,收容遣送办法刚刚废止,广州有关部门曾经召开过反思大会,但遗憾的是反思的背后潜伏着某些人对《南方都市报》的愤恨。之后,一个传言说:一位领导下令查《南方都市报》,直到查出问题为止! 


7月,《南方都市报》总经理喻华峰涉嫌“受贿”被拘留,审查后改为取保候审。同时,大量南方都市报的广告客户被调查,有关部门试图发现客户向喻华峰行贿的痕迹。 


12月下旬,《南方都市报》报道广东再次出现SARS。这样的信息公开对于人民生命安危来说是非常重要的,也是国务院曾经要求过的,然而南方都市报却为此付出惨重代价:当天值班编委被撤职,直到2004年3月,针对此事的调查还没有结束。 


2004年1月初,针对《南方都市报》的经济问题的调查骤然升级。 1月14日,喻华峰被正式逮捕,涉嫌的罪名由受贿变成了贪污和行贿。 


如果喻华峰被指控的罪名成立,他将面临十年以上的牢狱生涯,相应地,《南方都市报》九个编委也都会有罪,即使暂时不被处罚,他们也随时处在危险当中。

#4


用 CommonDialog 打开的 Help 必须是.hlp 文件

#5


用 CommonDialog 打开的 Help 必须是.hlp 文件


那怎样制作这个.hlp文件?

#6


Html Help Workshop用这个,楼上的说过
我也来说几个
VB中调用CHM 帮助的几种方法:
1.Private Sub Form_Load() 
  App.HelpFile = app.path & "\help.chm" 
  '调用与主程序同目录下的help.chm帮助文件,按F1键调用
End Sub 
2.Private Sub Form_Load() 
App.HelpFile = app.path & "\help.chm" 
End Sub 
private Sub CmdHelp_Click() 
SendKeys "{F1}" '发送击键到活动窗口 
End Sub
3.private Sub CmdHelp_Click()
Shell "hh.exe help.chm", vbNormalFocus 
'help.chm为指定的帮助文件,可包含路径。
End Sub
第四种 fuanwei(fuanwei)说了

#7


可以考虑调用hh.exe打开*.chm文件,hh.exe就在系统目录下面。

#8


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()
ShellExecute Me.hwnd, "open", "hh.exe", "123.chm", "c:\", vbNormal
End Sub