Закрытие активной программы из командной строки

Закрытие активной программы из командной строки

Есть ли способ закрыть программу, которая в данный момент находится в фокусе, из командной строки?

Я запускаю программу голосового управления, которая выполняет команды в фоновом режиме. Единственный известный мне способ сделать это — использовать команду taskkill, которая требует от меня ввести определенное имя процесса. Я хочу, чтобы она убивала любой процесс, который в данный момент находится в фокусе, так что если сфокусирован Firefox, он убивает его, а если сфокусирован Notepad, он убивает его.

Я использую Win 10, если это актуально.

решение1

К сожалению, нет связи между командной средой и GUI. Когда вы используете taskkillдля завершения приложения, он действует напроцесс, а не окно. Это важное различие, потому что убивая процесс, вы делаете это принудительно; так же, как если бы он аварийно завершился. Это, вероятно, не то, что вы хотите делать большую часть времени.

Обычно нажатие Alt+ F4закрывает текущее окно (или Escдиалоговое окно, если это окно). Это сочетание клавиш эквивалентно выбору Файл -> Выйти в строке меню или нажатию кнопки Закрыть в строке заголовка.

Чтобы сделать это из командной строки, вам понадобится скрипт, который может определить активное окно и отправить ему нажатия клавиш. Это можно сделать с помощью PowerShell. Windows Script Host (т. е. VBScript или JavaScript) тоже может это сделать. Но для этого потребуются некоторые навыки программирования. Программы вроде AutoHotKey или KiXtart — еще один вариант.

По сути, вы вызываете скрипт из командной строки через программу голосового управления.

Обратите внимание, что приложение выполнит обычную процедуру закрытия (например, предложит вам сохранить работу и т. д.), так что это не принудительное завершение, как это обычно taskkillбывает.

решение2

Есть ли способ закрыть любую программу, которая в данный момент находится в фокусе, через оболочку Windows?

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

Ранее сфокусированная программа (окно) потеряет фокус.

Насколько мне известно, в оболочке Windows нет команды, которая бы закрываларанеецеленаправленная программа.

решение3

АвтоИтможет сделать это. Всего несколько команд. Ищите:

$pid=WinGetProcess([ACTIVE])
ProcessClose($pid)

Связанный контент