Как отобразить приложение, отличное от Windows, внутри приложения Windows - PullRequest
0 голосов
/ 26 октября 2018

Как я могу встроить не родное приложение (приложение, установленное в Windows 7) в форме Windows, используя c#.

Что я пробовал до сих пор:

public partial class Form1 : Form
{
    Process process = new Process();


    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [DllImport("user32.dll", SetLastError = true)]
    internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
    [DllImport("user32.dll")]
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

    [DllImport("User32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
    public Form1()
    {
        InitializeComponent();
        // panel1.Container.Add(process);
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = false;
         string path = Path.Combine(Path.GetFullPath(@"C:\Program Files (x86)\Plan-G v3.2.0"), "Plan-G3.exe");
         process = Process.Start(path);

         Debug.WriteLine(process.MainWindowHandle);
         while (process.MainWindowHandle == IntPtr.Zero)
        {
             Thread.Sleep(1000); // Don't hog the CPU
            process.Refresh(); // You need this since `MainWindowHandle` is cached


        }

        Form1.SetForegroundWindow(process.MainWindowHandle);
        SetForegroundWindow(process.MainWindowHandle);

        SetParent(process.MainWindowHandle, panel1.Handle);

        MoveWindow(process.MainWindowHandle, 0, 0, panel1.Width - 90, panel1.Height, true);

    }
}

Иногда я могу заставить это работать, когда начинаю с debugging.

Но когда я запускаю без debugging, приложение всегда открывается за пределами формы. Я не понимаю, почему это происходит.

Я также попробовал обходной путь [ForceForegroundWindow][1] ().

Возможно ли то, что я пытаюсь достичь?

Судя по другим ответам на форуме, похоже, что это не так ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...