我创建了3个不同的应用程序
应用程序1: 这是一个WPF应用程序,它具有1个显示“ Hello Word”的窗口(MainWindow)。
应用程序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应用程序 “显示应用程序1”和“隐藏应用程序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中单击“显示应用程序1”按钮后, 窗口(应用程序1)带有黑色背景。它没有显示“ Hello world”。 它显示了窗口标题,但窗口的其余部分是黑色的。
如果有人知道如何解决?请让我知道。
如果您对我的查询有任何疑问,请告诉我。
答案 0 :(得分:0)
已确认工作
App2:
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 ReferenceSource:
// RootVisual is not set until Show.
// Only set RootVisual when we are going to show the window.
if (!HwndCreatedButNotShown)
{
SetRootVisualAndUpdateSTC();
}
评论说明了一切。;) 如果仅使用winapi,则不会设置RootVisual ...