1 (изменено: Dworkin, 2014-07-08 01:55:43)

Тема: AHK: одновременно закрыть несколько потоков

Здрасте. Вот код:

#SingleInstance off

Param = %1%
IsFunc(Param) ? %Param%() : proc1() 
Return


proc1()  {  

    Run, %A_ScriptFullPath% proc2 
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " 

DllCall("GetCurrentProcessId"),111,111
}

proc2()  {

    Run, %A_ScriptFullPath% proc3
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " 

DllCall("GetCurrentProcessId"),111,222
}

proc3()  {
Hotkey, F2, ExitAll ; закрывает все сразу
}

ExitAll:
exitapp
return

Если нажимать кнопку F2 то закрывается всего один процесс(поток). Скажите пожалуйста как сделать что бы можно было закрыть сразу все процессы(потоки)?

2

Re: AHK: одновременно закрыть несколько потоков

Это не потоки, а именно разные процессы.

#SingleInstance off
global ChildPid
Param = %1%
IsFunc(Param) ? %Param%() : proc1() 
Return


proc1()  {  
    Run, %A_ScriptFullPath% proc2,,, ChildPid
    Hotkey, F2, CloseAll, On
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,111
}

proc2()  {
    OnMessage(DllCall("RegisterWindowMessage", Str, "CloseScript"), "CloseScript")
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,222
}

CloseScript()
{
    ExitApp
}

CloseAll:
DetectHiddenWindows, On
PostMessage, DllCall("RegisterWindowMessage", Str, "CloseScript"),,,, ahk_pid %ChildPid%
exitapp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: одновременно закрыть несколько потоков

Спасибо

4 (изменено: serzh82saratov, 2014-07-08 10:18:15)

Re: AHK: одновременно закрыть несколько потоков

Но это только для двух скриптов сработает.
Dworkin вообще в той теме откуда этот код, есть решения вашего вопроса.
Если предположить, что скриптов может быть и больше 2, а также что закрытие любого из них, закрывает все остальные - это удобно, а перезапуск любого из них, перезапускает все остальные, то можно немного доработать одно из тех решений:


#SingleInstance Off
WM_CloseMyScript := DllCall("RegisterWindowMessage", "Str", "CloseAHKScripts")
OnMessage(WM_CloseMyScript, "WM_CloseMyScript")
OnExit, CloseAll
Param = %1%
If Param =
    PostMessage, WM_CloseMyScript, 0, A_ScriptHWND,, ahk_id 0xFFFF
IsFunc(Param) ? %Param%() : proc1() 
Return
 
proc1()  {  
    Run, %A_ScriptFullPath% proc2  
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,111
}

proc2()  {
    Run, %A_ScriptFullPath% proc3
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,222
}

proc3()  { 
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,333
}  


WM_CloseMyScript(wParam, lParam)   { 
    If (lParam != A_ScriptHWND)  {
        OnExit
        ExitApp
    }
    return true
}

F2::
CloseAll:
    PostMessage, WM_CloseMyScript, 0, A_ScriptHWND,, ahk_id 0xFFFF
    ExitApp
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: одновременно закрыть несколько потоков

Спасибо. Это даже лучше. Да у меня больше чем 2-3 процесса.

6

Re: AHK: одновременно закрыть несколько потоков

Хм...я только заметил что если где-то написать exitapp то закрывает все процессы. Дело в том что у меня некоторые процессы закрываются после выполнения определенных действий, а остальные работают. Можно как-то сделать что бы если закрывать через трей то закрываются все процессы или если нажать например F2, а если написать в процессе exitapp то закрывается только этот процесс, а другие не трогает?

7

Re: AHK: одновременно закрыть несколько потоков

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

8

Re: AHK: одновременно закрыть несколько потоков

Спасибо еще раз)