1 (изменено: fam888, 2013-10-27 17:10:00)

Тема: AHK: нужна простая команда на закрытие приложения

Предположим есть скрипт:
Run C:\Documents and Settings\Admin\Рабочий стол\1.ahk,

который запускает программу. Мне же нужен скрипт , который эту же программу закроет. Или, так же будет хорошо, если команда на закрытие этой программы будет внутри одного скрипта(при помощи горячей клавиши или другого условия). Подскажите как это сделать. Есть догадка, что необходимо конвертировать программу из ahk в exe и использовать, например, ExitApp, но пробовать не стал, поскольку не понимаю в чем разница.

2 (изменено: Indomito, 2013-10-27 19:10:01)

Re: AHK: нужна простая команда на закрытие приложения

Я не очень понял что надо закрывать, то ли твой скрипт, то ли внешнее приложение.
Если свой же скрипт, то вот простой код:

F1::
ExitApp 

Теперь закрытие внешнего приложения, тут немного сложнее, но не намного.

;==========Закрыть активное окно
CloseActiveWin:
 WinGetActiveTitle, Title
 if (fnWinClose(Title))
         return true
return false

;==========Завершаем процесс с именем Name.exe без активного окна
lEndTask:
DetectHiddenWindows, On
vWin := "Name.exe"
SetTitleMatchMode, 2
IfWinExist, %vWin%
  {
    vTxt := "Завершаем процесс Name.exe"
    GuiControl,, Msg, % vTxt
    Sleep, 1000
    WinClose
    ;Process, Close, %vWin%
    sleep 1500 ; Чуть подождём = 1,5 сек
     return true
  }
return false

;==========Функция закрытие окна приложения, если оно существует
fnWinClose(vWin)
{
SetTitleMatchMode, 2
IfWinExist, %vWin%
  {
    WinClose
    ;WinKill
    return true
  }
return false
}

Компилировать не нужно, т.е. необязательно, хотя разница есть, но не очень заметная... так скажем кое что нельзя выполнить из не компилированной программы/скрипта.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

3 (изменено: fam888, 2013-10-27 20:05:43)

Re: AHK: нужна простая команда на закрытие приложения

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

~XButton1::
#MaxThreadsPerHotkey
Process, Priority, , High
loop
{
PixelSearch, Px, Py, 1198, 946, 1199, 947, 0x80ff00, 0, fast
if ErrorLevel 
sendinput {}
Else
sendinput {WheelDown}
}

кстати спасибо за другие варианты, они мне очень пригодятся тоже.

4 (изменено: Indomito, 2013-10-27 20:40:39)

Re: AHK: нужна простая команда на закрытие приложения

Самое простое это добавить таймер с проверкой нужной клавиши, ну например такой.

SetTimer, lTimerKeyCloseApp, 120
return

lTimerKeyCloseApp:
  iTmp:=7
  while (!(GetKeyState("F1", "P")) && iTmp)
    {
       sleep 5
       iTmp--
    }
  if (iTmp)   
     {    
       SetTimer, lTimerKeyCloseApp, Off
       ExitApp
     }
return

вроде как то так.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

5

Re: AHK: нужна простая команда на закрытие приложения

Большое спасибо, попробую.

6

Re: AHK: нужна простая команда на закрытие приложения

Можно чуть сделать короче, но не уверен что будет работать корректно:

SetTimer, lTimerKeyCloseApp, 120
return

lTimerKeyCloseApp:
  iTmp:=7
  while (!(GetKeyState("F1", "P")) && (--iTmp))
       sleep 5
  if (iTmp)   
     {    
       SetTimer, lTimerKeyCloseApp, Off ; это не обязательно
       ExitApp
     }
return
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7

Re: AHK: нужна простая команда на закрытие приложения

fam888
Если разговор про то чтобы после нажатия кнопки для закрытия скрипта, сначала закончилась итеррация цикла, то:


loop  
{
    MsgBox,,, Начало итерации, 1
    MsgBox,,, Конец итерации, 1
} Until Exit
MsgBox,,, The End, 0.7 
ExitApp

2:: Exit := 1


Если надо закрывать по кнопке только во время цикла, то:


Label:
    loop = 1
    
    loop  10 
    {
        MsgBox,, % 10 - A_Index, Нажимай, 0.3 
    }  
    
    loop = 0
    MsgBox Не успел. Попробуй ещё.
    GoTo, Label

#If loop
2:: ExitApp
#If
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: нужна простая команда на закрытие приложения

Здравствуйте!
Написал и откпомпилировал по примеру выше такой скрипт, чтобы закрыть скайп на моем Win 8.1


; Shutting down the process with the name Skype.exe which is not having active window
lEndTask:
DetectHiddenWindows, On
vWin := "Skype.exe"
SetTitleMatchMode, 2
IfWinExist, %vWin%
  {
    vTxt := "Shutting down Skype.exe"
    GuiControl,, Msg, % vTxt
    Sleep, 1000
    WinClose
    ;Process, Close, %vWin%
    Sleep 4000
    return true
  }
return false

; Shutting down the application window if it exists

fnWinClose(vWin)
{
SetTitleMatchMode, 2
IfWinExist, %vWin%
  {
    WinClose
    ;WinKill
    return true
  }
return false
}

почему-то после запуска скайп не закрывается. Скажите, пожалуйста, почему

9

Re: AHK: нужна простая команда на закрытие приложения

Может, потому что точки в конце предложений забываете ставить?

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