vb.net在窗体内启动应用程序

vb.net在窗体内启动应用程序,vb.net,winforms,process,windows-8,visual-studio-2012,Vb.net,Winforms,Process,Windows 8,Visual Studio 2012,我想在面板或我的应用程序中运行应用程序。这是一个模拟器前端。浏览游戏,然后选择其中一个,它将启动模拟器。我找到了以下代码,并将其改编为我的项目 Public Class Form1 Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer Declare Auto Function SendMessag

我想在面板或我的应用程序中运行应用程序。这是一个模拟器前端。浏览游戏,然后选择其中一个,它将启动模拟器。我找到了以下代码,并将其改编为我的项目

Public Class Form1
    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 Const WM_SYSCOMMAND As Integer = 274
    Private Const SC_MAXIMIZE As Integer = 61488
    Dim proc As Process

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        proc = Process.Start("C:\WINDOWS\notepad.exe")
        proc.WaitForInputIdle()

        SetParent(proc.MainWindowHandle, Panel1.Handle)
        SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
    End Sub
End Class
如果我用记事本,甚至zsnesw.exe尝试它,它可以正常工作,但是如果我尝试将一些参数传递给zsnesw,它会有点崩溃,我必须重新启动我的计算机(我无法切换应用程序,甚至无法打开任务管理器)

而且,即使它确实起作用,开始菜单也会弹出,就像我切换到了另一个应用程序一样。这是我一开始试图避免的,因为我的应用程序是全屏的。

我让它工作了

        Dim proc As Process
        proc = Process.Start(emuPath + "zsnesw", "-m """ + selGame.romPath + """")
        proc.WaitForInputIdle()
        SetParent(proc.MainWindowHandle, Me.Panel1.Handle)
        SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
        Me.BringToFront()
问题1:我错误地传递了参数。我试图使用Process.StartInfo.Arguments。因为某种原因没有起作用。在Process.Start中使用逗号很好

问题2:我添加了Me.BringToFront()以再次隐藏开始菜单。

使用Thread.Sleep ;)

'在Panel2控件内运行计算应用程序

Dim proc As Process
proc = Process.Start("Calc.exe")
proc.WaitForInputIdle()
Thread.Sleep(1000)
SetParent(proc.MainWindowHandle, Me.Panel2.Handle)
Thread.Sleep(1000)
SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)

好吧,我确实用记事本而不是模拟器再试了一次,效果好多了。我还是想知道这是不是个好主意。。。似乎有很多失败的可能性