1

我创建了 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: 这又是一个 WPF 应用程序,它有 2 个按钮“显示应用程序 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”。它显示窗口标题,但窗口的其余部分是黑色的。

如果有人知道如何解决它?请告诉我。

如果您对我的查询有任何疑问,请告诉我:)。

4

1 回答 1

0

确认工作

应用 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 ReferenceSource:

// RootVisual is not set until Show.
// Only set RootVisual when we are going to show the window.
if (!HwndCreatedButNotShown)
{
    SetRootVisualAndUpdateSTC();
}

评论说明了一切.. ;) 如果您只使用 winapi,则没有设置 RootVisual...

于 2019-01-02T14:40:09.370 回答