对整个社区都有好处。我在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中不起作用。有人可以帮帮我吗?
答案 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);