1

Тема: AHK : Два процесса в из одного файла?

Нужно создать два независимых процесса из одного файла *.ahk(потом *.exe).
Можно это осуществить?

В одном осуществить задуманное никак не получается. И там  и там нужны временами паузы, а иногда максимальная скорость реагирования. Можно создать два скрипта *.ahk, но как потом их сконвертировать в один *.exe?

2

Re: AHK : Два процесса в из одного файла?

но как потом их сконвертировать в один *.exe?

Зачем? Поток будет один.

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

3

Re: AHK : Два процесса в из одного файла?

Next пишет:

Нужно создать два независимых процесса из одного файла *.ahk(потом *.exe). Можно это осуществить?

Next пишет:

Можно создать два скрипта *.ahk, но как потом их сконвертировать в один *.exe?

На который вопрос отвечать?

4

Re: AHK : Два процесса в из одного файла?

На все!
  Мне нужны два независимых процесса(потока?), но запускаться они должны из одного сконвертированного файла *.exe.
  Возможно ли это?

5

Re: AHK : Два процесса в из одного файла?

Ну так запускай им другой скрипт.

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

6

Re: AHK : Два процесса в из одного файла?

Другой скрипт - это ещё один файл. А можно сделать всё в одном?

7

Re: AHK : Два процесса в из одного файла?

Нужно из одного файла запустить два независимых разных процесса или два независимых одинаковых процесса?

8

Re: AHK : Два процесса в из одного файла?

This

9

Re: AHK : Два процесса в из одного файла?

Irbis
Это создание файла.

Другой скрипт - это ещё один файл. А можно сделать всё в одном?

Да можно. Пишешь две подпрограммы. #SingleInstance Off. Если такой же процесс не запущен, запускай 1 подпрограмму при старте, если запущен то вторую.

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

10

Re: AHK : Два процесса в из одного файла?

ypppu пишет:

Нужно из одного файла запустить два независимых разных процесса или два независимых одинаковых процесса?

  Разных.

11

Re: AHK : Два процесса в из одного файла?

В посте #9 указана подходящая методика

#SingleInstance off
if 1 = twice
   proc2()
else {
   Run, %A_ScriptFullPath% twice
   proc1()
}
Return

proc1()
{
   MsgBox Первый!
}

proc2()
{
   MsgBox Второй!
}

12

Re: AHK : Два процесса в из одного файла?

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

13

Re: AHK : Два процесса в из одного файла?

Что-то я пока не понял как должен работать код из 11. Из *.ahk запускается два скрипта, а после компиляции и запуска *.exe, в диспетчере только один процесс видно, да и тот потом исчезает.

14 (изменено: serzh82saratov, 2013-10-23 01:22:29)

Re: 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()  { 
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,333
}

~Esc:: 
    ExitApp


+ Да и ещё при старте без параметра, надо наверное закрыть остальные:


#SingleInstance off

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

proc1()  { 
    CloseAllSame()
    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
}

CloseAllSame()  {   
    CurPID := DllCall("GetCurrentProcessId")
    WinGet, List, List, ahk_exe %A_ScriptFullPath%   ;  только для компилированного
    Loop % List
    {
        WinGet, PID, PID, % "ahk_id " List%A_Index%
        If (PID != CurPID) 
            Process, Close, %PID%
    }
}

~Esc:: 
    ExitApp

+ А лучше так:


#SingleInstance off

OnMessage( DllCall("RegisterWindowMessage", "Str", "WM_HIGHLANDER"), "Receive_WM_HIGHLANDER")
Param = %1%
IsFunc(Param) ? %Param%() : (CloseAllSame(), 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
} 

CloseAllSame()   {
    WM_HIGHLANDER := DllCall("RegisterWindowMessage", "Str", "WM_HIGHLANDER")
    PostMessage, WM_HIGHLANDER, 0, A_ScriptHWND,, ahk_id 0xFFFF 
}

Receive_WM_HIGHLANDER(wParam, lParam)   {
    If (lParam <> A_ScriptHWND)
        ExitApp
    return true
}

~Esc:: 
    ExitApp

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

15

Re: AHK : Два процесса в из одного файла?

А лучше так:
  Я правильно понимаю, что это "стартер" для двух других скриптов?

16

Re: AHK : Два процесса в из одного файла?

Next
Не понял вопрос.

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

17

Re: AHK : Два процесса в из одного файла?

Где должен располагаться код двух вышеупомянутых скриптов?

18 (изменено: serzh82saratov, 2013-10-23 16:45:41)

Re: AHK : Два процесса в из одного файла?

Это полный код скрипта. Их не надо объединять, это просто три варианта одного и того же.
Запускаешь один любой из них, и делаешь выводы.

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

19

Re: AHK : Два процесса в из одного файла?

Я о "своих" двух речь веду. Ну вот создал я два скрипта. odin.ahk и dva.ahk. А потом беру один из ваших вариантов ... и?

20 (изменено: serzh82saratov, 2013-10-23 18:16:13)

Re: AHK : Два процесса в из одного файла?

Так, понятнее?



#SingleInstance off
 
Param = %1%
IsFunc(Param) ? %Param%() : proc1() 
Return
 
; \|/ \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/ 
 

proc1()  {  
    Run, %A_ScriptFullPath% proc2 
    ; содержимое odin.ahk
}

proc2()  { 
    ; содержимое dva.ahk
} 
 
 
; /|\ /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\ 


+ Если не понятно с функциями, можно также с метками:

#SingleInstance off
 
Param = %1% 
GoTo % IsLabel(Param) ? Param : "odin_ahk"

; \|/ \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/ 


odin_ahk:
    Run, "%A_ScriptFullPath%" dva_ahk
    MsgBox содержимое odin.ahk
    Return

dva_ahk:
    MsgBox содержимое dva.ahk
    Return
 
 
; /|\ /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\  /|\
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK : Два процесса в из одного файла?

Next пишет:

Что-то я пока не понял как должен работать код из 11. Из *.ahk запускается два скрипта, а после компиляции и запуска *.exe, в диспетчере только один процесс видно, да и тот потом исчезает.

Если так смущает иконка в трее, можно для второй и последующих запущенных "копий" скрыть иконку

proc2()
{
   Menu, Tray, NoIcon 
   ; ... dva.ahk
}

После компиляции скрипт из #11 работает так же точно, пока не закрыт ни один из MsgBox, будут оба процесса.

22

Re: AHK : Два процесса в из одного файла?

Irbis пишет:

This

And that

23

Re: AHK : Два процесса в из одного файла?

Проверил как сумел:

#SingleInstance off
 
Param = %1%
IsFunc(Param) ? %Param%() : proc1() 
Return
 
; \|/ \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/  \|/ 
 

proc1()  {  
   Run, %A_ScriptFullPath% proc2 
   ; содержимое odin.ahk
   loop,100
      {
      ToolTip, % A_MSec,700,700,1
      sleep, 777
      }
}

proc2()  { 
    ; содержимое dva.ahk
    loop,10000
      {
      ToolTip, % A_MSec,700,730,2      
      }
} 

   Отлично работает, независимо друг от друга. Два одноименный процесса.  Спасибо!
   Осталось разобраться с иконками и управлением через трей. Пока только один процесс  убивается через "Exit".

24 (изменено: serzh82saratov, 2014-07-08 10:25:30)

Re: AHK : Два процесса в из одного файла?


#SingleInstance off
OnMessage( DllCall("RegisterWindowMessage", "Str", "WM_HIGHLANDER"), "Receive_WM_HIGHLANDER")
OnExit Exit
Param = %1%
IsFunc(Param) ? %Param%() : (CloseAllSame(), proc1())

Return

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

proc2()  { 
    Menu, Tray, NoIcon 
    loop
        ToolTip % A_ThisFunc "`n" A_TickCount "`nProcessId = " DllCall("GetCurrentProcessId"),111,222 
} 

CloseAllSame()   {
    WM_HIGHLANDER := DllCall("RegisterWindowMessage", "Str", "WM_HIGHLANDER")
    PostMessage, WM_HIGHLANDER, 0, A_ScriptHWND,, ahk_id 0xFFFF 
 
}

Receive_WM_HIGHLANDER(wParam, lParam)   {
    If (lParam <> A_ScriptHWND)
        ExitApp
    return true
}

Exit:  
    If A_ExitReason = Menu
        CloseAllSame() 
    ExitApp
    
~Esc:: ExitApp

Вот получше решение.

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