Как показать окно wpf из другого процесса - PullRequest
0 голосов
/ 02 января 2019

Я создал 3 разных приложения

Приложение 1: Это приложение WPF, в котором есть 1 окно (MainWindow), которое отображает «Hello Word».

Приложение 2: Это приложение WPF. Это приложение создаст экземпляр MainWindow приложения 1. как показано ниже

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. Как только я нажму кнопку «Показать приложение 1» из приложения 3,Окно (Приложение 1) идет с черным фоном.это не показывает "Привет мир".Он показывает заголовок окна, но остальная часть окна черная.

Если у кого-нибудь есть идеи, как это исправить?Пожалуйста, дайте мне знать.

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы относительно моего запроса:).

1 Ответ

0 голосов
/ 02 января 2019

подтверждено работает

Приложение 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);

Приложение 3 как есть

РЕДАКТИРОВАТЬ:

из .net ReferenceSource:

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

комментарий говорит сам за себя ..;) если вы просто используете winapi, RootVisual не устанавливается ...

...