3

Visual Studios 2010 IDEのc#で.exeをタブで開くために作成しているwinformアプリケーションで次のことを行うための支援に興味があります。

現在、次のコードを使用して、目的のタブのボタンクリックでプログラムを開くことができます。

        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);

    }
4

1 に答える 1

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);
于 2013-03-13T21:19:03.737 に答える