Как запустить процесс в данном контейнере? (как запустить Acrobate Reader в групповой коробке?) в VB.Net - PullRequest
0 голосов
/ 14 сентября 2011

Я бы хотел, чтобы в моем приложении отображался предварительный просмотр файлов pdf и xps. Поэтому я хотел бы иметь возможность запустить процесс и указать ему «местоположение» или контейнер, из которого он должен запускаться.

В любом случае, сделать это?

В настоящее время я могу запустить любое приложение с необходимым ProcessStartInfo для открытия файла, но мне нужно, чтобы приложение содержалось в определенном элементе управления, а не было автономным приложением. Например, я не нашел свойство .Parent, которое позволило бы мне это сделать. Если у вас есть идея, дайте мне знать.

Заранее спасибо.


1 Ответ

1 голос
/ 15 сентября 2011

Некоторые выводы:

сначала здесь: 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)

Код выше, работает и, возможно, может быть улучшен.
Я все еще работаю над этим!

...