Открыть окно за другим приложением - PullRequest
0 голосов
/ 27 февраля 2012

Я хочу открыть несколько окон (окно IE, почтовые окна Outlook, окна блокнота) нажатием кнопки в моем приложении.

Проблема: Когда я нажимаю на кнопку, и все эти приложения открываются одно за другим.Мое собственное приложение (на которое пользователь нажал) потеряно в беспорядке окна.

Я хочу открыть все эти окна позади моего приложения.Какие-либо предложения ?Любой стандартный API, который я могу использовать для достижения такого поведения?

Логика: я хочу сделать что-то вроде открытого окна с расположением окна = 2 в порядке Z окон.Таким образом, мое окно, которое активно, всегда будет сверху (z order = 1), когда открываются другие окна.

Любые указатели будут полезны.

Спасибо

Karephul

ОБНОВЛЕНИЕ: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx Я использовал этот PInvoke, чтобы установить окно моего приложения какверхний.тогда все остальные окна автоматически откроются за ним.После этого я убрал флаг самого верхнего окна, используя тот же PInvoke.Подробности в ссылке, которую я разместил.

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

У вас есть два способа: вызвать команду win32 SetForgroundWindow или переключить topmost.


Для переключения верхнего уровня выполните следующие действия. Это выведет окно вперед, но не сделает его самым верхним, что довольно раздражает.

// Launch applications (Process.Start(...))
TopMost = true;
TopMost = false;

Для вызова команды Win32

[DllImport ( "User32.dll")] [возвращение: MarshalAs (UnmanagedType.Bool)] static extern bool SetForegroundWindow (IntPtr hWnd);

...

// Launch applications (Process.Start(...))
SetForegroundWindow(this.Handle);

...
1 голос
/ 27 февраля 2012

Вы можете установить для свойства TopMost формы значение True.

Убедитесь, что вы разрешаете пользователям изменять это или только делать это в течение короткого периода времени, потому что это раздражает пользователей.

0 голосов
/ 27 февраля 2012

Если вы используете System.Diagnostics.Process Классы Запуск , вы можете установить переменные приложения для состояния процесса при запуске с использованием класса ProcessStartInfo и передачев переопределенный метод Start (ProcessStartInfo startInfo) в качестве параметра.Существует свойство ProcessStartInfo.WindowStyle, которое имеет тип ProcessWindowStyle , которое имеет 4 значения: «Обычное», «Скрытое», «Свернутое» и «Свернутое», установив значение «Свернутый», вы можете восстановить фокус и легко перенести на передний план.

Код от MSDN

    // Uses the ProcessStartInfo class to start new processes,
    // both in a minimized mode.
    void OpenWithStartInfo()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Minimized;

        Process.Start(startInfo);

        startInfo.Arguments = "www.northwindtraders.com";

        Process.Start(startInfo);
    }
0 голосов
/ 27 февраля 2012

Это может быть более навязчиво, чем вам нравится, но я случайно обнаружил во время взаимодействия с Office, что после открытия офисных приложений и файлов, которые вы можете выпустить

MessageBox.Show("All files have been opened.")

И это должно принести ваше приложениеокно сообщения) переднее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...