Слегка модифицировал этот вариант. У меня на некоторых скриптах продолжали выполняться запущенные функции и результат типа двоил. Было заметно при выводе, напр, в консоль. И не только. Решил так:
Func _out()
Local $aData = _WinAPI_EnumChildProcess(_WinAPI_GetParentProcess())
ProcessClose($aData[1][1])
EndFunc
Это ничего не решает,Решил так
$aData[1][1]
будет возвращать имя текущего процесса, уже тогда лучше брать $aData[1][0]
(PID процесса), но тут не нужны WinAPI, достаточно просто использовать @AutoItPID
.StringRegExp(@AutoItExe, '\\([^\\]+)$', 3)[0]
#pragma compile(AutoItExecuteAllowed, True)
_HotKeySetMyKiller('^q')
MsgBox(64, @ScriptName, 'Press <CTRL + Q> to kill me!')
Func _HotKeySetMyKiller($sHotkey = '{ESC}')
Local $sKiller_File = @TempDir & '\~MyKiller.tmp'
Local $sSrc = _
'#NoTrayIcon' & @CRLF & _
'HotKeySet("' & $sHotkey & '", "_Kill")' & @CRLF & _
'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
' Sleep(10)' & @CRLF & _
'WEnd' & @CRLF & _
'FileDelete("' & $sKiller_File & '")' & @CRLF & _
'Func _Kill()' & @CRLF & _
' ProcessClose(' & @AutoItPID & ')' & @CRLF & _
'EndFunc'
Local $hFile = FileOpen($sKiller_File, 2)
FileWrite($hFile, $sSrc)
FileClose($hFile)
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sKiller_File & '"')
EndFunc
Не могу разобраться. Должно быть прибивание процесса по нажатию Cntrl+Q? Если да, то у меня почему-то не работает. По ESC закрывается окно сообщения и все, скрипт продолжает работать (если после функции было прописано что-то ещё). Или вместо @AutoItPID нужно было подставлять свой процесс?Можно сделать вот такой "хук" чтобы позволить прибивать собственный процесс по г. клавише:
Да, собственного процесса (тот откуда эта функция запущена).Должно быть прибивание процесса по нажатию Cntrl+Q?
Забыл указать, что это сработает только су меня почему-то не работает
#pragma compile(AutoItExecuteAllowed, True)
, по умолчанию (если не указано) оно включено.Странно. Оставил только ваш код. Ради контроля вписал вывод в консоль $sKiller_File. Окошко с надписью 'Press <CTRL + Q> to kill me!' появляется. При этом в консоли выводится путь $sKiller_File. Значит функция запущена, но на на это сочетание не реагирует. И в заглавии окошка правильно имя скрипта отображает.Да, собственного процесса
Обновлённый?Оставил только ваш код
#pragma compile(AutoItExecuteAllowed, True)
.Как бы да. Вообще-то и в первом же варианте у вас оно так и было. Специально сравнивал строки.Обновлённый?
Перепроверил на работе. Пока стоял язык ввода по умолчанию не англ, сочетание не срабатывало. Поставил по умолчанию язык ввода англ и все заработало.Обновлённый?
Странно. Оставил только ваш код. Ради контроля вписал вывод в консоль $sKiller_File. Окошко с надписью 'Press <CTRL + Q> to kill me!' появляется. При этом в консоли выводится путь $sKiller_File. Значит функция запущена, но на на это сочетание не реагирует. И в заглавии окошка правильно имя скрипта отображает.
Опять же, ради эксперимента пробовал делать вызов функции и как у вас до появления окошка, и после. Менял сочетание и с маленькой q и с большой Q
Пробовал присвоить $sHotkey = '{ESC}' вместо esc $sHotkey = '{^q}' - тоже без результата.
HotKeySet('{ESC}', 'End')
While Sleep(100)
WEnd
Func End()
Exit
EndFunc