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

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

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

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

2 ответа2

0

Вот скрипт 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
        }
    }
}
0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .