我看到有一个VB写的共享软件在自己的窗口中调用了外部程序,我用VBreqz看了一下,调用外部程序的窗口好像是WebBrowser控件。请问这个功能是如何实现的?谢谢。

解决方案 »

  1.   

    '
    '运行一个程序或文档.
    '函数:RunFile
    '参数:FilePath 要打开的文件路径
    '返回值:无
    '注:实际上是 [开始]==>[运行]
    Public Function RunFile(FilePath As String)
           Call Shell("rundll32.exe url.dll,FileProtocolHandler " & FilePath, 1)
    End Function
      

  2.   

    Private Const INFINITE = &HFFFF
    Private Const NORMAL_PRIORITY_CLASS = &H20
    Private Const SYNCHRONIZE = &H100000
    Private Const REALTIME_PRIORITY_CLASS = &H100'/建立一个新的进程或线程
    Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
                                            (ByVal lpApplicationname As String, _
                                             ByVal lpCommandLine As String, _
                                             ByVal lpProcessAttributes As Long, _
                                             ByVal lpThreadAttributes As Long, _
                                             ByVal bInheritHandles As Long, _
                                             ByVal dwCreationFlags As Long, _
                                             lpEnvironment As Any, _
                                             ByVal lpCurrentDirectory As String, _
                                             lpStartupInfo As STARTUPINFO, _
                                             lpProcessInformation As PROCESS_INFORMATION) As Long'
    '打开一个文件.
    '函数: ShellFile
    '参数:
    '    FileName 要打开的文件名 _
    '    Wait     布尔值,是否同步启动: =TRUE 同步, =FALSE 异步 _
    '    DoPath   文件的所在目录
    '返回值:  =1 成功,=0 失败
    '*注:如果是打开一个关联文件,必须用异步方式,即Wait=False,
    '    例如要直接打开某个 ".DOC" 文档,则 WAIT=FALSE.Public Function ShellFile(ByVal Filename As String, _
                              Optional WinHwnd As Long = 0, _
                              Optional Wait As Boolean = False) As Long
                              
      Dim Proc As PROCESS_INFORMATION
      Dim Start As STARTUPINFO
      Dim Rc As Long
      Dim Mdriv As String
      Dim OpenName As String
      Dim OpenPath As String
      
      OpenName = FileNameExp(Filename): OpenPath = FilePath(Filename)
      If Wait Then '如果T,同步启动
         Start.cb = Len(Start)
         '/建立一个新的进程
         Rc = CreateProcess(Filename, OpenPath, _
                            ByVal 0, ByVal 0, 1, _
                            NORMAL_PRIORITY_CLASS, _
                            ByVal 0, OpenPath, _
                            Start, Proc)
         '/等待,直到进程结束
         Rc = WaitForSingleObject(Proc.hProcess, INFINITE)
         '/关闭进程
         Rc = CloseHandle(Proc.hProcess)
      Else
         '/否则,异步启动,(资源管理器启动)
         Rc = ShellExecute(WinHwnd, "Open", OpenName, "", OpenPath, SW_MAXIMIZE)
      End If
      ShellFile = Rc
    End Function'
    '启动EXE文件
    '函数:OpenExe
    '参数:FileName EXE文件名,WorkPath 工作目录.
    '返回值:该EXE的进程句柄
    Public Function OpenExe(ByVal Filename As String, _
                            Optional WorkPath As String = "") As Long
      Dim Proc As PROCESS_INFORMATION
      Dim Start As STARTUPINFO
      Dim Rc As Long
      Dim Mdriv As String
      Dim A As String
      Dim B As String
      Dim ExeName As String
      
      On Error Resume Next
      
      ExeName = FileNameExp(Filename)
      WorkPath = FilePath(Filename)
      ChDrive Left$(WorkPath, 2)
      ChDir WorkPath
      Rc = CreateProcess(ExeName, WorkPath, _
                         ByVal 0, ByVal 0, 1, _
                         NORMAL_PRIORITY_CLASS, _
                         ByVal 0, vbNullString, _
                         Start, Proc)
      OpenExe = Proc.hProcess
    End Function'
    '取文件名,有扩展名
    '函数:FileNameExp
    '参数: Fname 文件绝对路径.
    '返回值:文件名.
    '如:"C:\PROMAS\AA.EXE",则返回 "AA.EXE"
    Public Function FileNameExp(Fname As String) As String
        Dim A As Integer
        Dim B As Integer
        Dim JlStr As String
        FileNameExp = ""
        B = 0
        For A = Len(Fname) To 1 Step -1
            If Mid$(Fname, A, 1) = "\" Then
               B = A: GoTo 100
            End If
        Next A
    100:
        JlStr = Right$(Fname, Len(Fname) - B)
        FileNameExp = JlStr
    End Function'
    '取路径名
    '函数:FilePath
    '参数: Fname 文件绝对路径.
    '返回值:路径名.
    '如:"C:\PROMAS\AA.EXE",则返回 "C:\PROMAS\"
    Public Function FilePath(Fname As String) As String
        Dim A As Integer
        Dim B As Integer
        Dim JlStr As String
        FilePath = ""
        B = 0
        For A = Len(Fname) To 1 Step -1
            If Mid$(Fname, A, 1) = "\" Then
               B = A: GoTo 100
            End If
        Next A
        
    100:
        JlStr = Left$(Fname, B)
        FilePath = JlStr
    End Function
      

  3.   

    谢谢两位的解答,可是如何在webbrowser控件中显示调用外部程序的界面呢?