Как отобразить окно WPF от другого процесса? - PullRequest
1 голос
/ 14 мая 2019

У меня есть программа WPF, которую нужно скрывать (не закрывать) при нажатии кнопки 'X'.

Параллельно существует программа ac #, которая на определенной кнопке должна отображать ее.

Отлично работает скрытие программы WPF.Проблема в том, что при попытке отобразить его из другого процесса c # окно WPF отображается черным (как будто сама форма все еще скрыта, пока отображается окно).

Есть идеи?

Пробовализменение флагов в функции ShowWindow (), без помощи.Попытка не скрыть окно WPF, но изменить видимость, тот же результат.

Код WPF для скрытия главного окна:

void MainWindow_Closing(object sender, CancelEventArgs e)
{
    e.Cancel = true;
    Hide();

}

c # код:

var myHandle= UIWin32.FindWindow(null, "My title");
UIWin32.ShowWindow(myHandle, UIWin32.Win32Flags.SW_SHOW);
UIWin32.ShowWindow(myHandle, UIWin32.Win32Flags.SW_RESTORE);
UIWin32.SetForegroundWindow(myHandle);

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

При просмотре справочного источника для Window.Hide () выясняется, что Hide оба устанавливает для свойства Visibility окна значение Visibility.Hidden и скрывает исходное окно окна с помощью ShowWindow(..., SW_HIDE).

Использование ShowWindow(myHandle, SW_HIDE) показывает исходное окно, но свойство Visibility по-прежнему Visibility.Hidden, поэтому ничего не рисуется. Ничто в классе Window, кажется, не проверяет внешнее отображение окна.

Однако класс Window будет реагировать на сообщение WM_ACTIVATE, которое сгенерирует SetForegroundWindow(); когда это произойдет, он вызовет метод OnActivated(). Поэтому следующий код сбросит Visibility в окне WPF при его активации:

protected override void OnActivated(EventArgs e)
{
    base.OnActivated(e);
    Show();
}
0 голосов
/ 22 мая 2019

После ShowWindow вы можете использовать функцию MoveWindow с флагом перерисовки следующим образом:

MoveWindow(handle,0,0,width,height,true);

Подпись:

[DllImport("User32.dll")]
extern bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...