Автор Тема: [Процессы] Команда выхода из программы (не taskkill)  (Прочитано 522 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
Интересует возможно ли послать программе/процессу команду выхода?

ПС. Убийство процесса очень сильно не подходит.
К примеру при завершении Windows программы выходят, а не убиваются процессы. Для этого нужно использовать WinApi или есть что-либо попроще?
Русскую Землю ногами пиная,
Помни фашист про 9 Мая!

Русское сообщество AutoIt


Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2688
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0

http://autoit-script.ru/index.php?topic=22441.msg131124#msg131124

а чем системный инструмент taskkill не нравится?
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
joiner  [?]
Цитировать
а чем системный инструмент taskkill не нравится?
Потому что после taskkill (и вообще какое-либо убийство процесса) у программы не запоминаются сохранения/позиции окна/и т.д.

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3782
  • Репутация: 998
    • Награды
  • Версия AutoIt: 3.3.14.0
БлагоѨръ  [?]
Цитировать
у программы не запоминаются сохранения/позиции окна/и т.д.
Значит это GUI-приложение и достаточно закрыть его главное окно
Код: AutoIt [Выделить]

Русское сообщество AutoIt

Re: [Процессы] Команда выхода из программы (не taskkill)
« Ответ #3 Отправлен: Март 11, 2018, 19:00:36 »

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI  [?]
Цитировать
начит это GUI-приложение и достаточно закрыть его главное окно
Не, такое совсем не катит, потому что у меня много приложений, которые при таком действии сворачиваются в трей.

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3782
  • Репутация: 998
    • Награды
  • Версия AutoIt: 3.3.14.0
БлагоѨръ  [?]
Цитировать
при таком действии сворачиваются в трей
Значит нужно использовать для выхода средства самого приложения - пункт главного меню или меню трея или что там у приложения предусмотрено.

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI  [?]
Цитировать
Значит нужно использовать для выхода средства самого приложения
Вот к этому и создал тему. То бишь нельзя методами Windows, так как она это делает при завершении или перезагрузке?

ПС. Потому как через меню трея это очень неудобно.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2688
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
БлагоѨръ  [?]
Цитировать
у программы не запоминаются сохранения/позиции окна/и т.д.
запоминает. потому и написал.
taskkill /pid 1234
без флага "принудительно"
завершил главный процесс хрома. запустил хром, окно появилось в тех же координатах и с теми же размерами. при этом хром не выводил сообщение, что можно восстановить вкладки, как это бывает при принудительном завершении.


Добавлено: Март 11, 2018, 21:15:06
либо так
Код: AutoIt [Выделить]
 #include <WinAPI.au3>
 #include <WindowsConstants.au3>
_WinAPI_PostMessage($hWnd,$WM_CLOSE,0,0)

« Последнее редактирование: Март 11, 2018, 21:15:06 от joiner, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: [Процессы] Команда выхода из программы (не taskkill)
« Ответ #7 Отправлен: Март 11, 2018, 21:08:14 »

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
joiner  [?]
Цитировать
запоминает. потому и написал.
Да, немного не так описал. Оно запоминает те положения и прочее, которое было перед запуском той, или иной программы. К примеру я запустил Total Commander и открыл диск D, потом закрыл его, опять открыл и перешёл на диск E и воспользовался убийством процесса. И вот в таком случае, оно откроет его не на диске E, а на диске D.

ПС. И так по аналогии с большинством программ.
В случае с Chrome-ом - запустил, у меня там открыто 8 вкладок, закрываю 4 из них, убиваю процесс, запускаю снова - Chrome, там открыта одна вкладка с белой страницей, говорит, что он был завершён некорректно и отображает всплывающую подсказку и с восстановлением, нажимаю "Восстановить" и восстанавливаются не 4 вкладки, а 8.
И такой "гемморой" с подавляющий большинством программ. По этом причине и создал тему.

Что делает _WinAPI_PostMessage прочитал, а что делают переменные? Убивают или завершают?

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3782
  • Репутация: 998
    • Награды
  • Версия AutoIt: 3.3.14.0
БлагоѨръ  [?]
Цитировать
как она это делает при завершении или перезагрузке
Код: AutoIt [Выделить]
#RequireAdmin

#include <SendMessage.au3>
#include <WindowsConstants.au3>

$hWnd = WinGetHandle("Title")
$PID = WinGetProcess($hWnd)
If _SendMessage($hWnd, $WM_QUERYENDSESSION) Then
  _SendMessage($hWnd, $WM_ENDSESSION, True)
  If Not ProcessWaitClose($PID, 3) Then
    _SendMessage($hWnd, $WM_CLOSE)
    If Not ProcessWaitClose($PID, 3) Then
      _SendMessage($hWnd, $WM_DESTROY)
      If Not ProcessWaitClose($PID, 3) Then
        ProcessClose($PID)
      EndIf
    EndIf
  EndIf
Else
  MsgBox(0, "", "Приложение отказалось завершаться")
EndIf


Перехват и блокировка завершения работы Windows

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2688
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
БлагоѨръ  [?]
Цитировать
Что делает _WinAPI_PostMessage прочитал, а что делают переменные? Убивают или завершают?
отправляет сообщение приложение, что оно должно завершиться
если завершение приложения подразумевает сохранение данных, то будет выведено сообщение. так что, однозначно просто не завершить приложение


Добавлено: Март 11, 2018, 23:29:58
БлагоѨръ  [?]
Цитировать
В случае с Chrome-ом - запустил, у меня там открыто 8 вкладок, закрываю 4 из них, убиваю процесс, запускаю снова - Chrome, там открыта одна вкладка с белой страницей, го
завершать нужно основной процесс. в случае с хромом, в диспетчере задач он записан первым

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
joiner  [?]
Цитировать
то будет выведено сообщение. так что, однозначно просто не завершить приложение
Ну это хорошо. Если редактирую чего-то в к примеру в Sublime.
Цитировать
завершать нужно основной процесс. в случае с хромом, в диспетчере задач он записан первым
У меня портативный и пользуюсь я Process Hacker-ом, убил через "Terminate Tree" (то бишь завершить дерево) на процессе ChromePortable.exe


Добавлено: Март 12, 2018, 00:50:59
InnI  [?]
Цитировать
Код: AutoIt

А как-бы этот код сделать для множества процессов?

ПС. Сейчас у меня к примеру в цикле, вот так
(нажмите для показа/скрытия)

БлагоДарю за ссылку.

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3782
  • Репутация: 998
    • Награды
  • Версия AutoIt: 3.3.14.0
БлагоѨръ  [?]
Цитировать
этот код сделать для множества процессов
Оформите код в виде функции.
Для каждого элемента вашего массива процессов через _WinAPI_EnumProcessWindows определяете главное окно и передаёте его в функцию.
Или можно проще. Создайте массив заголовков окон и вызывайте функцию в цикле для каждого элемента массива.

Оффлайн БлагоѨръ [?]

  • НОД Украина
  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Русь Великая, Очнись! Поднимись с колен Родная!
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI  [?]
Цитировать
Или можно проще. Создайте массив заголовков окон и вызывайте функцию в цикле для каждого элемента массива.
БлагоДарю за помощь, буду пробовать.

Русское сообщество AutoIt

Re: [Процессы] Команда выхода из программы (не taskkill)
« Ответ #13 Отправлен: Март 12, 2018, 03:20:26 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
3377 Просмотров
Последний ответ Февраль 09, 2012, 19:25:23
от madmasles
4 Ответов
3083 Просмотров
Последний ответ Август 08, 2012, 02:45:59
от Yashied
2 Ответов
2937 Просмотров
Последний ответ Февраль 15, 2013, 07:59:59
от Belfigor
0 Ответов
1379 Просмотров
Последний ответ Февраль 14, 2013, 17:29:30
от madmasles
8 Ответов
2197 Просмотров
Последний ответ Март 20, 2014, 11:08:07
от madmasles
3 Ответов
1595 Просмотров
Последний ответ Декабрь 03, 2014, 21:27:11
от BlackRock
2 Ответов
787 Просмотров
Последний ответ Июнь 25, 2015, 10:49:05
от inververs
3 Ответов
752 Просмотров
Последний ответ Апрель 19, 2017, 11:55:14
от Maximill
4 Ответов
521 Просмотров
Последний ответ Октябрь 03, 2017, 15:21:23
от Rouzenrot
2 Ответов
582 Просмотров
Последний ответ Октябрь 06, 2017, 13:37:59
от ololo1215