Найти и активировать окно приложения
Предположим, что 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 здесь.