Найти и активировать окно приложения

Предположим, что notepad.exe открывается, и это окно неактивно. Я напишу приложение, чтобы активировать его. Как сделать?

Обновление: Заголовок окна undefined. Таким образом, я не люблю использовать FindWindow, который основан на заголовке окна.

Мое приложение Winform С# 2.0. Спасибо.

Ответы

Ответ 1

Вам нужно будет P/вызвать SetForegroundWindow(). Process.MainWindowHandle может дать вам ручку, в которой вы нуждаетесь. Например:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program {
    static void Main(string[] args) {
        var prc = Process.GetProcessesByName("notepad");
        if (prc.Length > 0) {
            SetForegroundWindow(prc[0].MainWindowHandle);
        }
    }
    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
}

Обратите внимание на двусмысленность, если вы используете более одной копии "Блокнота".

Ответ 2

Вам необходимо выполнить PInvoke вызовы Windows API, такие как FindWindow и EnumWindows и GetWindowText (для названия). В идеале вы также можете использовать GeWindowThreadProcessId, чтобы вы могли привязать его к фактическому процессу.

Ответ 3

Вы должны использовать комбинацию из них -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden во время выполнения

и

Принесите другое окно процессов на передний план, если у него есть ShowInTaskbar = false

Вам нужно найти класс окна и выполнить поиск по нему. Подробнее об этом читайте здесь.

Только для информации, имя класса Notepad - "Блокнот" (без кавычек). Вы можете проверить его с помощью Spy ++.

Примечание. Вы не можете активировать окно приложения, если оно было запущено без окна. Подробнее читайте в API здесь.