Как я могу закрыть пиджин через команду?

Проблема была описана по адресу https://developer.pidgin.im/ticket/9698.

В Linux я могу попросить pidgin закрыть через pkill pidgin или же kill [pid], Затем программа позаботится об этом и отключится. Windows не работает таким образом. WM_CLOSE сигнал будет только закрыть окно, а не процесс (так же, как когда вы нажмете x сам).

Как мне закрыть пиджин через команду?

Мотивация. Похоже, что многим серверам XMPP нужно, чтобы клиенты активно прощались, чтобы понять, что они не в сети. Другими словами, нет keep-alive пакеты необходимы или нет тайм-аутов (и если, довольно задерживается). Обычно это не является большой проблемой, потому что мы запускаем и покидаем наших клиентов соответственно (считая завершение работы как выход). Тем не менее, если кто-то идет в suspend / hibernate В этом режиме подключение к сети внезапно пропало - у pidgin нет шансов сказать: "Привет, выход в автономный режим". Итак, мне нужен скрипт для автоматического корректного закрытия pidgin (чтобы он выполнялся непосредственно перед приостановкой).

2 ответа

Утилита, которую вы хотите taskkill.exe, которая является программой командной строки, встроенной в ОС Windows (примерно аналогично kill в Unix-подобных системах) и находится в системном каталоге (C:\Windows\System32\taskkill.exe). По умолчанию он запрашивает (но не заставляет) программы завершать работу и не использует оконные сообщения.

Бежать taskkill /? из командной строки (cmd или же powershell) для получения информации об использовании, но основная команда, которую вы хотите, это taskkill /im pidgin.exe (обратите внимание, что расширение необходимо для имени образа программы, которую нужно убить). НЕ передавайте /f отметьте здесь, так как это принудительно завершит программу (аналогично kill -9) без предоставления времени для выполнения какой-либо очистки (хотя это полезно для программ, которые вы хотите немедленно убить, или которые зависают и не отвечают на обычные запросы на закрытие).

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

Вот скрипт AutoHotkey, который эмулирует следующие шаги пользователя:

  • Откройте главное окно, если оно еще не открыто
  • Отправить Ctrl-Q, чтобы пиджин вышел

,

pidginMainWindowTitle := "Buddy List"

process, exist, pidgin.exe
if(ErrorLevel!=0) {
    ; Pidgin process is running -> close it
    if(!winExist(pidginMainWindowTitle)) {
        ; ..but main window is not.
        ; determine full pidgin path
        winGet, pidginPath, ProcessPath, ahk_exe pidgin.exe
        if(pidginPath=="") {
            msgbox, Process path empty?
            exitapp
        }
        ; run pidgin again: will open main window
        run %pidginProcessPath%
        ; wait for the window max. 2 seconds
        winWait, %pidginMainWindowTitle%,, 2
        if(ErrorLevel==1) {
            msgbox, Couldn't start main window
            exitapp
        }
        ; send exit key combo to pidgin main window
        controlSend,, ^q, %pidginMainWindowTitle%
        ; wait for the process to close max. 2 seconds
        process, WaitClose, pidgin.exe, 2
        if(ErrorLevel) {
            msgbox, Couldn't exit pidgin gracefully
            exitapp
        }
    }
}
Другие вопросы по тегам