【问题标题】:vb.net Launch application inside a formvb.net 在表单内启动应用程序
【发布时间】:2012-11-19 01:31:04
【问题描述】:

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

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 它有点吓坏了,我必须重新启动我的计算机(我无法切换应用程序甚至打开任务管理器)。

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

【问题讨论】:

  • 好的,我确实继续使用记事本而不是模拟器再次尝试,它工作得更好。我仍然想知道这是否是个好主意......似乎有很多失败的可能性

标签: vb.net winforms process windows-8 visual-studio-2012


【解决方案1】:

我搞定了!

        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() 以再次隐藏开始菜单。

【讨论】:

    【解决方案2】:

    使用 Thread.Sleep ;)

    '在 Panel2 控件中运行 Calc 应用程序

    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)
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2010-09-23
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多