在WPF窗口中嵌入应用程序

时间:2016-11-03 19:38:03

标签: c# wpf windows winforms user-interface

对整个社区都有好处。我在Visual Studio 2015中使用C#和WPF技术。我需要嵌入我的程序窗口,第三方系统的另一个窗口系统,如记事本。

我找到了答案here(抱歉网站是西班牙语),但它只能用于Windows窗体。

这是我的代码。

//get the third party window
public static IntPtr getWindow(string titleName)
{
   Process[] pros = Process.GetProcesses(".");
   foreach (Process p in pros)
      if (p.MainWindowTitle.ToUpper().Contains(titleName.ToUpper()))
         return p.MainWindowHandle;
      return new IntPtr();
}

//Get my own window
IntPtr ptr = new WindowInteropHelper(this).Handle;

//a window embedded within the other
[DllImport("user32.dll")]
        public extern static IntPtr SetParent(IntPtr hWnChild, IntPtr hWndNewParent);

正如我所说,这适用于Windows窗体,但在WPF中不起作用。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

以下是代码,问题是您需要在新的父窗口中设置位置,宽度,高度并重新绘制子窗口。

public void CapturarApp()
        {
            hWndApp = ScreenFuntion.getWindow("Notepad");
            if (hWndApp.ToInt32() > 0)
            {
                ProgramsEncrustForm.MoveWindow(hWndApp,
                    0, 0,
                    Int32.Parse(Width.ToString()),
                    Int32.Parse(Height.ToString()), 1);
                ProgramsEncrustForm.SetParent(hWndApp, new WindowInteropHelper(this).Handle);
            }
            else
            {
                hWndApp = IntPtr.Zero;
            }
            this.Show();
        }

以下是移动和重新绘制窗口的方法

[System.Runtime.InteropServices.DllImport("user32.dll")]
public extern static int MoveWindow(IntPtr hWnd, int x, int y,
    int nWidth, int nHeight, int bRepaint);