1

Тема: AHK: Корректно закрыть explorer.exe

Доброго! После убийства типа "Process, Close,  explorer.exe" он автоматически перезапускается. Вопрос: как его "нормально" закрыть?

2

Re: AHK: Корректно закрыть explorer.exe

http://www.forum.script-coding.com/view … hp?id=3887
Но вообще-то процесс не должен запускаться заново.

3

Re: AHK: Корректно закрыть explorer.exe

Это я читал. Работает. Можно ли такое реализовать средствами AHK (только конечно не с помощью эмуляции мыши)?

4

Re: AHK: Корректно закрыть explorer.exe

ypppu пишет:

Но вообще-то процесс не должен запускаться заново.

OFF: У меня на Windows XP SP3 по команде, приведённой в первом посте темы — перезапускается . В случае «снятия» процесса «ручками», например, через «Process Explorer» — Проводник не перезапускается.

5

Re: AHK: Корректно закрыть explorer.exe

Sasha-box, Вам обязательно AHK?

Пока не разбирался в деталях, но наблюдаю такое поведение: когда explorer.exe завершается с «Reason»==«0» — головная служба пользовательской сессии WinLogon вновь запускает Проводник. Если завершить «explorer.exe» с «Reason»==«1» (так, кстати, поступает и «Process Explorer») — Проводник не перезапускается. То есть, следующий скрипт завершит Проводник, а WinLogon его вновь запустит:

Option Explicit

Dim objSWbemServicesEx

Dim collSWbemObjectSet
Dim objSWbemObjectEx

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process", "WQL", 0)

If collSWbemObjectSet.Count > 0 Then
    For Each objSWbemObjectEx In collSWbemObjectSet
        'WScript.Echo objSWbemObjectEx.Caption
        
        If objSWbemObjectEx.Caption = "explorer.exe" Then
            objSWbemObjectEx.Terminate 0
        End If
    Next
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0

Стоит поменять в:

objSWbemObjectEx.Terminate 0

«0» на единицу — получаем требуемое поведение — Проводник не перезапускается при завершении процесса «explorer.exe».

Как я понимаю, чтобы добиться такого же поведения в AHK — надо работать непосредственно с WinAPI.

6

Re: AHK: Корректно закрыть explorer.exe

На AHK можно так:

!1::Run, taskkill /f /im explorer.exe,, hide
!2::Run, explorer

Alt + 1 — принудительное завершение explorer.exe
Alt + 2 — перезапуск

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Корректно закрыть explorer.exe

teadrinker, а как насчёт:

BOOL TerminateProcess(
  HANDLE hProcess,
  UINT uExitCode
);

8

Re: AHK: Корректно закрыть explorer.exe

Так нужно ещё hProcess узнать!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: teadrinker, 2009-12-21 19:00:17)

Re: AHK: Корректно закрыть explorer.exe

alexii пишет:

teadrinker, а как насчёт:

BOOL TerminateProcess(
  HANDLE hProcess,
  UINT uExitCode
);

Process, Exist, Explorer.exe
PID := ErrorLevel 
h_process := DllCall("OpenProcess", UInt, 0x1, Int, 0, UInt, PID)   ; PROCESS_TERMINATE = 0x1
DllCall("TerminateProcess", UInt, h_process, UInt, 0) 
DllCall("CloseHandle", h_process)

Попробовал так — перезапускается.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Корректно закрыть explorer.exe

Нормально. Меняем «0» на «1»:

Process, Exist, Explorer.exe
PID := ErrorLevel 
h_process := DllCall("OpenProcess", UInt, 0x1, Int, 0, UInt, PID)   ; PROCESS_TERMINATE = 0x1
DllCall("TerminateProcess", UInt, h_process, UInt, 1) 
DllCall("CloseHandle", h_process)

работает без перезапуска.

11

Re: AHK: Корректно закрыть explorer.exe

Точно!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Корректно закрыть explorer.exe

Спасибо! Добавил в Коллекцию: AHK: Завершение процесса explorer.exe (без перезапуска Проводника).

13

Re: AHK: Корректно закрыть explorer.exe

alexii пишет:

Автор идеи — teadrinker.

Ну, тут Вы поскромничали!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Корректно закрыть explorer.exe

Большое спасибо за помощь!!!

15 (изменено: teadrinker, 2009-12-22 03:38:18)

Re: AHK: Корректно закрыть explorer.exe

Ошибочка закралась (UInt в последней строчке), исправьте в Коллекции:

Process, Exist, Explorer.exe
PID := ErrorLevel 
h_process := DllCall("OpenProcess", UInt, 0x1, Int, 0, UInt, PID)   ; PROCESS_TERMINATE = 0x1
DllCall("TerminateProcess", UInt, h_process, UInt, 1) 
DllCall("CloseHandle", UInt, h_process)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Корректно закрыть explorer.exe

teadrinker пишет:

Ошибочка закралась (UInt в последней строчке), исправьте в Коллекции:

Спасибо! Сделано.

17

Re: AHK: Корректно закрыть explorer.exe

Подскажите пожалуйста мне нужно завершать активный процесс так как это делается через диспетчер задач, но конечно мне нужно поставить это на комбинацию клавиш, это возможно? У меня "Process, Close" не работает без указания процесса.

18

Re: AHK: Корректно закрыть explorer.exe

Активный процесс -что это? Процесс, чей поток выполняется в данный момент в первом ядре процессора, считая с левого верхнего угла? :-)
Если имеется в виду активное приложение, то WinKill Вам в помощь.

19

Re: AHK: Корректно закрыть explorer.exe

WinKill делает это медленно и в блокноте выдает запрос на сохранение, мне нужно именно завершение процесса с возможной потерей данных. Да верно активное приложение.

20

Re: AHK: Корректно закрыть explorer.exe

#F4::   ; Win+F4
   WinGet, p, PID, A
   Process, Close, %p%
Return

21

Re: AHK: Корректно закрыть explorer.exe

Irbis пишет:
#F4::   ; Win+F4
   WinGet, p, PID, A
   Process, Close, %p%
Return

Огромное спасибо!

22

Re: AHK: Корректно закрыть explorer.exe

Пожалуйста.

23

Re: AHK: Корректно закрыть explorer.exe

Irbis пишет:
#F4::   ; Win+F4
   WinGet, p, PID, A
   Process, Close, %p%
Return

Почему то не работает с некоторыми полноэкранными приложениями, типо игр.

24

Re: AHK: Корректно закрыть explorer.exe

Наверное игра перехватывает сообщение о нажатие клавиши и оно просто не доходит до твоего скрипта.. Попробуй другое сочетание клавиш в качестве хоткея.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

25

Re: AHK: Корректно закрыть explorer.exe

Mikki пишет:

Наверное игра перехватывает сообщение о нажатие клавиши и оно просто не доходит до твоего скрипта.. Попробуй другое сочетание клавиш в качестве хоткея.

Нет, это работает и игра не перехватывает:

#F4::
    Process, Close, arma2oa.exe
return

а это не работает ни в арме ни в бэтмане.

#F4::
    WinGet, p, PID, A
    Process, Close, %p%
Return

Мне нужно для многих приложений, и каждое записывать, кнопок не хватит.

26

Re: AHK: Корректно закрыть explorer.exe

Проверь, какой процесс и заголовок окна у приложения, которое не закрывается подобным образом:

#F4::   ; Win+F4
   WinGet, p, ProcessName, A
   WinGetTitle, t, A
   MsgBox % "Process: " p "`nTitle: " t
Return

27

Re: AHK: Корректно закрыть explorer.exe

Irbis пишет:

Проверь, какой процесс и заголовок окна у приложения, которое не закрывается подобным образом:

#F4::   ; Win+F4
   WinGet, p, ProcessName, A
   WinGetTitle, t, A
   MsgBox % "Process: " p "`nTitle: " t
Return

Нечего не происходит, с блокнотом работает, а с играми нет.

28

Re: AHK: Корректно закрыть explorer.exe

1st пишет:

Нечего не происходит...

Замените именное название (F4) на скан-код (sc3E).

29

Re: AHK: Корректно закрыть explorer.exe

Grey пишет:
1st пишет:

Нечего не происходит...

Замените именное название (F4) на скан-код (sc3E).

#sc3E:: ;Win+F4
    WinGet, p, PID, A
    Process, Close, %p%
Return

Работает, спасибо!