Dev*_*ate 4 vb.net process winforms 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 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
Run Code Online (Sandbox Code Playgroud)
如果我使用记事本甚至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()
Run Code Online (Sandbox Code Playgroud)
问题1:我错误地传递了参数。我试图使用Process.StartInfo.Arguments。由于某种原因没有工作。在Process.Start中使用逗号可以正常工作。
问题2:我添加了Me.BringToFront()来再次隐藏开始菜单。