Как закрыть окно по его имени? - PullRequest
15 голосов
/ 12 февраля 2012

Я хочу закрыть окно с каким-либо именем (любое приложение, например, калькулятор и т. Д.). Как это сделать в C #? Импорт функций WinAPI?

Ответы [ 2 ]

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

Да, вы должны импортировать функции Windows API: FindWindow(), SendMessage()WM_CLOSE константа.

Собственные определения функций Windows API:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

/// <summary>
/// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
/// </summary>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

const UInt32 WM_CLOSE = 0x0010;

Код клиента:

IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
if (windowPtr == IntPtr.Zero)
{
    Console.WriteLine("Window not found");
    return;
}

SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
1 голос
/ 30 ноября 2015

Вы пытаетесь закрыть окна, принадлежащие другим процессам.Это не то, что вы можете предположить, будет надежно.Во-первых, у вас нет этих окон, поэтому у вас на самом деле нет никаких автоматических прав для работы с окнами других процессов.

Как показывает другой ответ, вы можете попробовать отправить WM_CLOSEк окну, но с оговоркой, что другой процесс на самом деле не имеет права соблюдать его.Ответом на WM_CLOSE может быть что угодно для принятия и чистого отключения для полного отказа.В последнем случае у вас действительно нет выбора.Это не твой процесс.Между ними, как вы видели, могут быть какие-то промежуточные окна, диалоговые окна и т. Д., С которыми вам придется бороться.

Так чего же вы здесь добиваетесь?Почему вы пытаетесь закрыть окна, принадлежащие другим процессам?Это может помочь уточнить, какова цель.

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