Окно для недавно запущенного процесса в C # появляется позади моих текущих открытых окон

2

У меня есть довольно простой код для открытия файлов с помощью объекта Process:

        var proc = new Process();
        proc.StartInfo.FileName = attachmentPath;
        proc.StartInfo.UseShellExecute = true;
        proc.Start();

Время от времени окно, открывающееся из этого процесса, начинает открываться за всеми моими открытыми в настоящее время окнами. Я не вижу какой-либо закономерности или последовательности, почему это происходит. У кого-нибудь есть идея, почему это происходит, или как я могу обойти это? Спасибо!

Теги:

1 ответ

1
Лучший ответ

Windows не поощряет приложения от кражи фокуса на некоторое время; правила вокруг него на самом деле не документированы, по-видимому, для предотвращения использования приложений.

Однако вы можете попробовать:

    var proc = new Process();
    proc.StartInfo.FileName = attachmentPath;
    proc.StartInfo.UseShellExecute = true;
    proc.Start();

    //Wait for window to spin up
    proc.WaitForInputIdle();
    BringWindowToTop(proc.MainWindowHandle);

Определить BringWindowToTop с p/invoke.

  • 0
    Правила для того, чтобы быть в состоянии установить фокус, задокументированы. См. Msdn.microsoft.com/en-us/library/ms632668%28VS.85%29.aspx
  • 0
    Это для SetForegroundWindow, не так много для окна нового процесса. Это хорошая ссылка, которая показывает, к чему стремится Microsoft.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню