Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Завершить приложение

Ответить
Настройки темы
Завершить приложение

Аватара для А_н_д_р_ей

Старожил


Сообщения: 459
Благодарности: 27


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте.
Очень нужен код AutoIt который будет корректно завершать приложение. Чтобы закрывал процесс - programm.exe выгружал его из памяти, и сам AutoIt завершался/выгружался из памяти. Вот.

-------
Подпись отключена.


Отправлено: 14:39, 24-06-2014

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


А_н_д_р_ей,
У разных приложений корректность завершения разная. Конкретики бы хотелось.

Отправлено: 15:32, 24-06-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для А_н_д_р_ей

Старожил


Сообщения: 459
Благодарности: 27

Профиль | Отправить PM | Цитировать


Цитата madmasles:
У разных приложений корректность завершения разная. Конкретики бы хотелось. »
это будет обозреватель firefox

-------
Подпись отключена.


Отправлено: 17:33, 24-06-2014 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата А_н_д_р_ей:
это будет обозреватель firefox »
Для нее есть FF.au3 (V0.6.0.1b-10)

На autoit-script.ru есть Стол заказов

Последний раз редактировалось madmasles, 24-06-2014 в 23:21.


Отправлено: 19:10, 24-06-2014 | #4


Старожил


Сообщения: 168
Благодарности: 40

Профиль | Отправить PM | Цитировать


Вариант попроще
Код: Выделить весь код
Global $title 

If ProcessExists("firefox.exe") Then
    $title = _Process2Win("firefox.exe")
    WinClose($title)
EndIf

Func _Process2Win($pid) 
    If IsString($pid) Then $pid = ProcessExists($pid) 
    If $pid = 0 Then Return -1 
    $list = WinList() 
    For $i = 1 To $list[0][0] 
        If $list[$i][0] <> "" AND BitAnd(WinGetState($list[$i][1]),2) Then 
            $wpid = WinGetProcess($list[$i][0]) 
            If $wpid = $pid Then Return $list[$i][0] 
        EndIf 
    Next 
    Return -1 
EndFunc
Без taskkill.exe, практически то же самое, что нажать на крестик.

-------
ОЗ

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:00, 30-06-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата oz84:
Без taskkill.exe, практически то же самое, что нажать на крестик. »
Только это совсем не то, что нужно. Ибо:
Цитата:
If multiple windows match the criteria, the window that was most recently active is closed.
И закрывать все найденные окна тоже не верно — нужно закрывать именно приложение.

Посему как-то так:
Код: Выделить весь код
#include <WindowsConstants.au3>
#include <WinAPI.au3>

_WinAPI_PostMessage(WinGetHandle("[CLASS:MozillaWindowClass; REGEXPTITLE:.* - Mozilla Firefox]"), $WM_QUIT, 0, 0)

Отправлено: 10:30, 30-06-2014 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата Iska:
Посему как-то так: »
А если окон Firefox больше одного?
Проверил, все окна закрываются, только я оставил один класс ([CLASS:MozillaWindowClass]). Единственный минус (существенный), если в момент запуска скрипта открыто диалоговое окно, например, Настройки ([CLASS:MozillaDialogClass]), то Firefox намертво зависает (у меня).

Последний раз редактировалось madmasles, 30-06-2014 в 19:37.


Отправлено: 19:17, 30-06-2014 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата madmasles:
А если окон Firefox больше одного? »
Именно поэтому пользуем не WinClose(). Если закрывать «пооконно» — то, при следующем открытии Firefox (если установлено «Показать окна и вкладки, открытые в прошлый раз»), все его окна, окромя последнего будут потеряны.

Цитата madmasles:
Единственный минус (существенный), если в момент запуска скрипта открыто диалоговое окно, например, Настройки ([CLASS:MozillaDialogClass]), то Firefox намертво зависает (у меня). »
Я не проверял, но не сомневаюсь. С модальными диалогами тяжко работать — надо предусматривать все возможные «чихи». Сюда же идут запросы по закрытию приложений, запросы сохранения содержимого и т.п.

Отправлено: 02:15, 01-07-2014 | #8


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Цитата Iska:
Сюда же идут запросы по закрытию приложений, запросы сохранения содержимого и т.п. »
ИМХО, надо изучать FF.au3 (V0.6.0.1b-10) для того, чтобы действительно корректно закрывать Firefox.

Отправлено: 02:25, 01-07-2014 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


А там нечего изучать — делается опосредованный вызов внутренней функции Firefox «goQuitApplication()», всё содержимое которой:
Код: Выделить весь код
function goQuitApplication()
{
  if (!canQuitApplication())
    return false;

  var appStartup = Components.classes['@mozilla.org/toolkit/app-startup;1'].
                     getService(Components.interfaces.nsIAppStartup);

  appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit);
  return true;
}
(см.: chrome://global/content/globalOverlay.js).

Отправлено: 09:35, 01-07-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Завершить приложение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Win32 API - Как завершить поток процесса .exe? rainzek Программирование и базы данных 1 10-03-2014 13:10
CMD/BAT - завершить корректно консольное приложение Shtazer Скриптовые языки администрирования Windows 4 15-01-2012 16:18
как завершить процесс в вин98 slaine Microsoft Windows 95/98/Me (архив) 2 29-12-2006 15:00
Как завершить приложение, которого нет в списке Ctrl-Alt-Del? Do Not Disturb Microsoft Windows 95/98/Me (архив) 8 21-06-2006 10:18
Как корректно завершить программу bilytur Программирование и базы данных 6 02-04-2004 13:59




 
Переход