Установить активное окно - PullRequest
8 голосов
/ 22 июня 2011

Я пытаюсь создать приложение, которое выдает консоль HUD в стиле Quake. Я могу заставить его показать и скрыть окно, но я не могу понять, как установить его в качестве активного окна после его показа. Я использую вызовы Win API, чтобы показать и скрыть окно. Я пробовал SetForegroundWindow (IntPtr hWnd) и SetFocus (IntPtr hWnd) безрезультатно. У кого-нибудь есть идеи?

http://pastebin.com/DgtJJGiv

public void ShowApp()
{
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
    ShowWindow(h, SW_SHOW);
    //EnableWindow(h, true);
    isHidden = false;
        // set focus to console window

    SetForegroundWindow(h);
    System.Diagnostics.Debug.WriteLine(h);
}

Ответы [ 4 ]

3 голосов
/ 06 марта 2012

Я нашел ответ здесь: Как показать форму спереди в C #

Подходы winAPI не работали правильно для меня, но это сделало:

form.TopMost = true;
form.TopMost = false;

Изначально я устанавливал для TopMost только значение true, но у меня возникли проблемы с отображением диалоговых окон за формой. Похоже, что установка TopMost в значение true вытягивает форму вперед и удерживает ее там. Установка его в false не отодвигает его назад, но позволяет отображать другие формы спереди. У меня все еще были проблемы с фокусом, поэтому я в итоге выбрал следующее:

form.Activate();
1 голос
/ 22 июня 2011

Вы можете использовать SetActiveWindow метод winAPI. Надеюсь, это поможет ...

1 голос
/ 22 июня 2011

Попробуйте это (работает для меня):

public static void ShowApp()
{
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
    ShowWindow(h, ShowWindowCommands.Show);
    SetForegroundWindow(h);
    SetFocus(h);
    System.Diagnostics.Debug.WriteLine(h);
}
0 голосов
/ 22 июня 2011

Есть ли причина, по которой вы не можете реализовать собственное окно консоли? Я имею в виду простую форму с текстовым полем, установленным в правильном стиле. Вы, вероятно, имеете больший контроль над тем, как он работает, чем пытаетесь использовать процесс cmd.

Просто мысль.

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