0

我想预览我的应用程序中显示的 pdf 和 xps 文件。所以我希望能够运行一个进程并给它一个“位置”或它应该运行的容器。

有没有办法做到这一点?

我现在可以使用必要的 ProcessStartInfo 来启动我想要的任何应用程序来打开文件,但我需要将应用程序包含在特定的控件中,而不是作为一个独立的应用程序。

例如,我没有找到允许我这样做的 .Parent 属性。如果你有想法,请告诉我。

提前致谢。


4

1 回答 1

1

一些发现:

首先在这里:http ://www.dreamincode.net/forums/topic/148658-embedding-another-program-into-app/

第一个解决方案:使用 webbrowser 控件:

  WebBrowser1.Url = New System.Uri("file://" & myFileNameHere)

第二种解决方案(在这里找到:http ://www.tek-tips.com/viewthread.cfm?qid=1598720 )

Private Const WM_SYSCOMMAND As Integer = 274
Private Const SC_MAXIMIZE As Integer = 61488
Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

 Private Sub Test3()
Try
        myProcess.Kill()
    Catch ex As Exception
        Dim ii As Integer = 33
    End Try

    Dim valueFileName As String = myFileNameHere 
    Dim myProcessInfo As New ProcessStartInfo
    myProcessInfo.FileName = myCompletePathToTheEXEFileHere
    myProcessInfo.WorkingDirectory = valueFileName.Substring(0, valueFileName.LastIndexOf("\") + 1)
    myProcessInfo.Arguments = valueFileName.Substring(valueFileName.LastIndexOf("\") + 1)
    myProcess.StartInfo = myProcessInfo
    myProcess.Start()
    myProcess.WaitForInputIdle()
    Threading.Thread.Sleep(500)
    SetParent(myProcess.MainWindowHandle, Me.GroupBox1.Handle)
    SendMessage(myProcess.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)

上面的代码正在运行,并且可能会得到改进。
我还在努力呢!

于 2011-09-15T19:08:53.047 回答