Как показать окно wpf из другого процесса
Я создал 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 с двумя кнопками "Показать приложение 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 ответ
Подтвердил работу
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 не устанавливается...