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

475
Blauhirn

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

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

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

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

0

2 ответа на вопрос

0
Blauhirn

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

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

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

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