我为自己的程序制作了一个CHM帮助文件,文件名为Help.chm,现在代码中加入
private command1_click()
  Shell "D:\MIS\help.chm", vbNormalFocus
end sub
执行后却显示“无效的过程调用或参数”,请教该如何写这一句?

解决方案 »

  1.   

    HtmlHelp函数VB声明如下(API浏览器中没有,我自己照VC的声明改的): Private Declare Function HtmlHelpA Lib "hhctrl.ocx" (ByVal hwndCaller As 
    Long, ByVal pszFile As String, ByVal uCommand As Long, ByVal dwData As 
    Long) As Long hwndCaller指出调用者的窗口,pszFile指出要调用的文件,uCommand是发送给 
    HtmlHelp的命令,dwData是uCommand的参数。 这个函数位于system\hhctrl.ocx中,你安装了IE4以上版本浏览器就应该有 调用举例: HtmlHelpA Form1.hWnd, "C:\WINDOWS\HELP\CALC.CHM", 0, 0 这个是 
    最简单的例子,uCommand和dwData的组合能产生许多非常复杂的功能 具体情况可 
    查找MSDN:HTMLHelp API Reference主题 函数的C语言原型和所用到的结构和常量定义参见HTML Help Workshop\include\ 
    htmlhelp.h 当然你必须先安装了Html Help Workshop hhctrl.ocx文件虽然后缀是OCX却不是控件,而是一个标准的DLL
      

  2.   

    利用VB调用CHM帮助文件 
    2003-10-16 14:44:00  来源:  阅读32次 
        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”等均属举例,应用中需要根据自己的具体情况来设置这些参数的实际值。至此,应用程序的帮助系统就建立起来了,当然,要把帮助系统做得更完美一点,还有更多的工作要做。 
      

  3.   

    在VB中调用CHM  帮助的几种方法    
     
    一个应用程序不论编制得如何完美,在很多情况下用户还是会对如何使用它提出问题。  Visual  Basic  提供了对两种不同帮助系统的支持:传统的  Windows  帮助系统  (WinHelp)和新的  HTML  帮助(CHM帮助)。当我们制作好帮助文件后,就需要在程序的适当位置编写代码进行调用,本文将讨论几种在程序中调用CHM帮助文件的方法。    
    方法一 使用F1键:  
    这种方法最简单,只需如下代码即可:  
    Private  Sub  Form_Load()    
    App.HelpFile  =  app.path  &  "\help.chm"  '调用与主程序同目录下的help.chm帮助文件,按F1键调用  
    End  Sub  
     
    方法二  使用SendKeys方法:  
    Private  Sub  Form_Load()    
    App.HelpFile  =  app.path  &  "\help.chm"    
    End  Sub    
    private  Sub  CmdHelp_Click()    
    SendKeys  "{F1}"  '发送击键到活动窗口    
    End  Sub  
     
    方法三  使用Shell函数:  
    private  Sub  CmdHelp_Click()  
    Shell  "hh.exe  help.chm",  vbNormalFocus  'help.chm为指定的帮助文件,可包含路径。  
    End  Sub  
     
    方法四  使用HtmlHelp函数:  
    先声明如下API:  
    Option  Explicit  
    Private  Declare  Function  HtmlHelpA  Lib  "hhctrl.ocx"  (ByVal  hwndCaller  As  Long,  ByVal  pszFile  As  String,  ByVal  uCommand  As  Long,  ByVal  dwData  As  Long)  As  Long    
    'hwndCaller指定调用者的窗口,pszFile指定要调用的文件,uCommand是发送给  HtmlHelp的命令,dwData是uCommand的参数。    
    然后在过程中调用:  
    private  Sub  CmdHelp_Click()  
    dim  i  as  string  
    i  =  app.path  &  "\help.chm"  '用变量i记录与主程序同目录下的help.chm帮助文件  
    HtmlHelpA  Form1.hWnd,  i,  0,  0  
    End  Sub  
     
    方法五  使用ShellExecute函数:  
    先声明如下API:  
    Option  Explicit  
    '声明API函数用于异步打开一个文档  
    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  Const  SW_SHOWNORMAL  =  1  
    然后在过程中调用:  
    private  Sub  CmdHelp_Click()  
    dim  a  as  long  
    Dim  b  As  String  
    b  =  App.Path  &  "\help.chm"  '用变量b记录与主程序同目录下的help.chm帮助文件  
    a  =  ShellExecute  (0,  "open",  b,  "",  "",  SW_SHOWNORMAL)  
    End  Sub  
    以上五种方法各有优缺点,从代码的简单上讲,建议使用第二种方法。从功能上讲,建议使用第五种方法,因其不只用于打开CHM帮助文件,还可用同样的格式打开、打印或查找一个文件或文档(参见该API的说明资料)。    
      

  4.   

    Public 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'打开帮助需要用到的常数为
    Public Const HH_DISPLAY_INDEX = 2
    Public Const HH_DISPLAY_TOC = 1
    Public Const HH_DISPLAY_TOPIC = 0Dim lngHelp As Long
    lngHelp = htmlhelp(Me.hWnd, "D:\MIS\help.chm", HH_DISPLAY_TOPIC, 0)
      

  5.   

    ft,哪有好他们说的那么麻烦
    工程属性里面有个helpFile的属性,可以设置为你需要chm帮助文件
    也可以在代码里面些app.helpfile=......
    这样你按f1的时候,就会弹出该帮助文件
      

  6.   

    shell "C:\WINDOWS\hh.exe e:\book\vb\ado.chm"
    shell "C:\WINDOWS\hh.exe e:\book\vb\ado.chm"
    shell "C:\WINDOWS\hh.exe e:\book\vb\ado.chm"
    shell "C:\WINDOWS\hh.exe e:\book\vb\ado.chm"
    shell "C:\WINDOWS\hh.exe e:\book\vb\ado.chm"
      

  7.   

    hh.exe 是系统打开CHM文件的程序,
    如果是HLP文件,则由.C:\WINDOWS\System32\winhlp32.exe 打开.就这么办就成.
      

  8.   

    谢谢大家的回复,但是我的可用分很少,只剩下二十分了,真不知道结帖后该如何给分。
    我觉得用 shell "c:\windows\hh.exe d:\mis\help.chm"是一个很简单的方法。
    但是在NT/2000的操作系统上Window的系统目录是Winnt,那么我就不能写成c:\windows而应当写成c:\winnt,现在我想用%systemboot%来代替系统目录,那么我该如何写这一句呢?