我对使用winform应用程序执行以下操作感兴趣,我正在编写,以在Visual Studio 2010 IDE中的c#中的.exe中打开。
我现在可以使用以下代码通过按钮单击所需的选项卡来打开程序:
string str = @"-INSERT FILEPATH HERE-";//took file path out as i have a few exes i'm wanting to add.
Process process = new Process();
process.StartInfo.FileName = str;
process.Start();
现在我怎么能这样做,所以这个可执行文件作为选项卡打开,或者在我的winform中的选项卡中打开?我愿意接受任何一种情况的建议。
解决:
using System.Runtime.InteropServices;
using System.Threading;
[DllImport("user32.dll", SetLastError = true)]
private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
public GUI()
{
// Initialize form fieds
InitializeComponent();
openProgram()
}
private void openProgram()
{
process.StartInfo.FileName = "-filepathhere-";
process.Start();
IntPtr ptr = IntPtr.Zero;
while ((ptr = process.MainWindowHandle) == IntPtr.Zero) ;
SetParent(process.MainWindowHandle, trackerPanel.Handle);
MoveWindow(process.MainWindowHandle, 0, 0, this.Width - 90, this.Height, true);
}
答案 0 :(得分:3)
您可以使用SetParent api设置可执行文件窗口的父级。将面板添加到TabControl并使用下面的代码将可执行窗口的父级分配给面板的父级。
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void button2_Click(object sender, EventArgs e)
{
var process = new Process();
process.StartInfo.FileName = "notepad.exe";
process.Start();
SetParent(process.MainWindowHandle, panel1.Handle);
}
要从面板中删除窗口,请使用相同的代码,但将父句柄设置为IntPtr.Zero
SetParent(process.MainWindowHandle, IntPtr.Zero);