Как запустить процесс в данном контейнере? (как запустить Acrobate Reader в групповой коробке?) в VB.Net
Я хотел бы иметь предварительный просмотр файлов PDF и XPS, отображаемых в моем приложении. Поэтому я хотел бы иметь возможность запустить процесс и указать ему "местоположение" или контейнер, из которого он должен запускаться.
Есть ли способ сделать это?
В настоящее время я могу запустить любое приложение с необходимым ProcessStartInfo для открытия файла, но мне нужно, чтобы приложение содержалось в определенном элементе управления, а не было автономным приложением.
Например, я не нашел свойство.Parent, которое позволило бы мне это сделать. Если у вас есть идея, дайте мне знать.
Заранее спасибо.
1 ответ
Некоторые выводы:
сначала здесь: http://www.dreamincode.net/forums/topic/148658-embedding-another-program-into-app/
Первое решение: использовать элемент управления веб-браузера с:
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)
Код выше, работает и, возможно, может быть улучшен.
Я все еще работаю над этим!