我想在面板中运行应用程序或在我的应用程序中运行某个应用程序.这是一个模拟器前端.您浏览游戏,然后当您选择一个游戏时,它会启动模拟器.我找到了以下代码并将其改编为我的项目
- 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,0)
- Me.BringToFront()
问题1:我错误地传递了参数.我试图使用Process.StartInfo.Arguments.由于某种原因没有工作.在Process.Start中使用逗号可以正常工作.