Есть ли способ закрыть программу, которая в данный момент находится в фокусе, из командной строки?
Я запускаю программу голосового управления, которая выполняет команды в фоновом режиме. Единственный известный мне способ сделать это — использовать команду 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)