如何显示来自另一个进程的 wpf window
How to Show a wpf window from another process
我创建了 3 个不同的应用程序
应用程序 1:
这是一个 WPF 应用程序,它有 1 个 Window(MainWindow),显示 "Hello Word".
应用程序 2:
这是一个 WPF 应用程序
此应用程序将创建应用程序 1 的 MainWindow 实例。
如下图
MainWindow window = new MainWindow();
//And it will store it's window handle to some file
string filePath = @"c:\windowHandle.txt";
var windowInteropHelper = new WindowInteropHelper(window);
File.WriteAllText(filePath, windowInteropHelper.EnsureHandle().ToString());
应用程序 3:
这又是一个有 2 个按钮的 WPF 应用程序
"Show Application 1" 和 "Hide Application 1"
private void show_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 5);
}
private void hide_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 0);
}
private int GetWindowHandle()
{
string handle = File.ReadAllText(@"C:\windowHandle.txt");
return Convert.ToInt32(handle);
}
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int nCmdShow);
现在我将启动应用程序 2 和应用程序 3。
从应用程序 3 单击 "Show Application 1" 按钮后,
window(应用程序 1)带有黑色背景。它没有显示 "Hello world"。
它显示 window 标题,但 window 的其余部分是黑色的。
如果有人知道如何解决它?请告诉我。
如果您对我的查询有任何疑问,请告诉我:)。
确认工作
应用程序 2:
MainWindow window = new MainWindow();
window.Show();
//And it will store it's window handle to some file
string filePath = @"c:\windowHandle.txt";
var windowInteropHelper = new WindowInteropHelper(window);
File.WriteAllText(filePath, windowInteropHelper.EnsureHandle().ToString());
ShowWindow(windowInteropHelper.Handle.ToInt32(), 0);
App3 原样
编辑:
来自 .net 参考来源:
// RootVisual is not set until Show.
// Only set RootVisual when we are going to show the window.
if (!HwndCreatedButNotShown)
{
SetRootVisualAndUpdateSTC();
}
评论说明了一切.. ;)
如果你只使用winapi,没有设置RootVisual...
我创建了 3 个不同的应用程序
应用程序 1: 这是一个 WPF 应用程序,它有 1 个 Window(MainWindow),显示 "Hello Word".
应用程序 2: 这是一个 WPF 应用程序 此应用程序将创建应用程序 1 的 MainWindow 实例。 如下图
MainWindow window = new MainWindow();
//And it will store it's window handle to some file
string filePath = @"c:\windowHandle.txt";
var windowInteropHelper = new WindowInteropHelper(window);
File.WriteAllText(filePath, windowInteropHelper.EnsureHandle().ToString());
应用程序 3: 这又是一个有 2 个按钮的 WPF 应用程序 "Show Application 1" 和 "Hide Application 1"
private void show_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 5);
}
private void hide_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 0);
}
private int GetWindowHandle()
{
string handle = File.ReadAllText(@"C:\windowHandle.txt");
return Convert.ToInt32(handle);
}
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int nCmdShow);
现在我将启动应用程序 2 和应用程序 3。 从应用程序 3 单击 "Show Application 1" 按钮后, window(应用程序 1)带有黑色背景。它没有显示 "Hello world"。 它显示 window 标题,但 window 的其余部分是黑色的。
如果有人知道如何解决它?请告诉我。
如果您对我的查询有任何疑问,请告诉我:)。
确认工作
应用程序 2:
MainWindow window = new MainWindow();
window.Show();
//And it will store it's window handle to some file
string filePath = @"c:\windowHandle.txt";
var windowInteropHelper = new WindowInteropHelper(window);
File.WriteAllText(filePath, windowInteropHelper.EnsureHandle().ToString());
ShowWindow(windowInteropHelper.Handle.ToInt32(), 0);
App3 原样
编辑:
来自 .net 参考来源:
// RootVisual is not set until Show.
// Only set RootVisual when we are going to show the window.
if (!HwndCreatedButNotShown)
{
SetRootVisualAndUpdateSTC();
}
评论说明了一切.. ;) 如果你只使用winapi,没有设置RootVisual...