Вывести на передний план неактивное окно

У меня есть два приложения WPF. Оба они имеют окно со свойством Topmost, установленным на true. Окно первого приложения является полноэкранным окном, а второе приложение занимает только часть экрана. Важно также то, что второе приложение не может быть активировано (активация была заблокирована следующим кодом):

private const int GWL_EXSTYLE = -20;
private const int WS_EX_NOACTIVATE = 0x08000000;

[DllImport("user32.dll")]
public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex,int dwNewLong);
[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr hWnd,int nIndex);

protected override void OnSourceInitialized(EventArgs e)
{
    WindowInteropHelper helper = new WindowInteropHelper(window);
    SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
}

Я пытаюсь вывести второе приложение на передний план, когда пользователь нажимает кнопку, расположенную в первом приложении. Я попытался добиться этого с помощью SetForegroundWindow и ShowWindow, но это не работает. У кого-нибудь есть решение этой проблемы?


person Hawex    schedule 21.11.2018    source источник


Ответы (1)


Пытаться

yourSpecificWindow.Activate();

если это не поможет, также включите

yourSpecificWindow.TopMost = true;
yourSpecificWindow.Focus();
person mahlatse    schedule 21.11.2018
comment
Спасибо за ответ, к сожалению забыл сказать об одной важной вещи - у меня открывается второе окно не в том же приложении, я запускаю его через Process.Start(), поэтому так не могу. Обновил мой вопрос. - person Hawex; 22.11.2018
comment
Тогда вы, возможно, вызываете второе приложение с аргументами командной строки, используя их для вызова вышеуказанных методов? - person mahlatse; 22.11.2018
comment
Все равно не работает, т.к. активация окна заблокирована. - person Hawex; 23.11.2018
comment
даже если вы вызываете другое приложение с параметрами командной строки? - person mahlatse; 23.11.2018
comment
Просто для ясности: когда я запускаю второе приложение, оно открывается поверх экрана, все в порядке. После этого, когда я нажимаю на первое приложение, второе идет под ним. Я пытаюсь повторно активировать его (отправить снова наверх), как я уже говорил, но ничего не работает. В качестве обходного пути на данный момент я просто закрываю второе приложение и снова включаю его, когда мне нужно его повторно активировать. - person Hawex; 23.11.2018
comment
Вы разработали оба приложения? - person mahlatse; 23.11.2018
comment
Да, я разрабатываю оба приложения - person Hawex; 23.11.2018
comment
Затем это становится проще, если вы можете в любой момент использовать только один экземпляр вашего второго приложения, а затем использовать объект мьютекса, когда вы нажимаете запуск процесса, проверьте, работает ли ваше приложение, если да, выведите его на передний план и установите его как активный , - person mahlatse; 23.11.2018
comment
mahlatse, моя проблема в том, что я не знаю, как вывести его на передний план - методы Activate(), Focus(), ShowWindow(), SetForegroundWindow() не работают в этом конкретном случае. - person Hawex; 23.11.2018