1

Тема: AHK: Передача значения переменной между скриптами

Недавно наткнулся на такой вопрос.
Имея два скрипта, задав в первом скрипте переменную "bkw := 1".
Можно ли как -то отобразить эту переменную во втором скрипте, "msgbox, % bkw"?

2

Re: AHK: Передача значения переменной между скриптами

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

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

3 (изменено: belyankin12, 2017-08-13 22:10:37)

Re: AHK: Передача значения переменной между скриптами

Можно записать переменную во внешнюю среду, а с дочернего скрипта прочитать её и отобразить.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

4

Re: AHK: Передача значения переменной между скриптами

belyankin12, можно, да только зачем?

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

5 (изменено: MandarinKa02, 2017-08-13 22:28:50)

Re: AHK: Передача значения переменной между скриптами

Если второй скрипт - дочерний, то можно просто передать значение. А в другом случае ищите ответы в SendMessage.

+ Дочерний скрипт

ScriptManage := {}                       ; создаём объект для управления скриптами
ScriptManage.Run := Func("RunScript")    ; создаём несколько методов
ScriptManage.Terminate := Func("TerminateScript")
ScriptManage.Send := Func("SendStringToScript")
OnExit, OnExit

Gui, +LastFound
Gui, Add, Edit, x10 vEdit, Это строчка, которая будет передана дочернему скрипту.
Gui, Add, Button, x+-79 y+10 w80 gButton, Send
Gui, Add, Button, gButton x10 yp wp Default, Run
GuiControl, Focus, Run
Gui, Show, % "y" A_ScreenHeight//3, Это главный скрипт:

Loop
{
   WinSetTitle, % "Это главный скрипт: " mod(A_Index, 100)
   Sleep, 100
}
return


GuiClose:
OnExit:
   for k, v in ScriptManage
      if k is integer
         ScriptManage.Terminate(k)
   ExitApp

Button:
   if (A_GuiControl = "Run")
      ScriptManage.Run(1)   ; единица означает, что запускаем первый скрипт
                            ; у нас он один, но может быть сколько угодно
   if (A_GuiControl = "Terminate")
      ScriptManage.Terminate(1)
   
   if (A_GuiControl = "Send")
      ScriptManage.Send(1)
   
   if (A_GuiControl != "Send")
      GuiControl,, % A_GuiControl, % A_GuiControl = "Run" ? "Terminate" : "Run"
   return

RunScript(this, n)   ; здесь this — вызывающий объект, n — номер скрипта, который будем запускать
{
   ;*********************** это текст скрипта, который будем запускать ************************
   Text1 =  
   (%    ; опция "%", чтобы процент читался как литерал
      #NoTrayIcon 
      Gui, +AlwaysOnTop +ToolWindow
      Gui, Color, Gray
      Gui, Add, Progress, hwndhControl Border Background606060 x20 y20 w350 h50  
      Gui, Show, % "NA w390 h90 y" A_ScreenHeight//3 + 120

      Gui, 2:+Parent%hControl% -Caption +Lastfound
      Gui, 2:Color, 606060
      Gui, 2:Font, s21 cFFAA00, Verdana
      Gui, 2:Add, Text, x350 y6, Можно отправить сюда текст из главного скрипта!
      Gui, 2:Show, NA x0 y0
      WinGetPos,,, Width 

      OnMessage(0xC, "WM_SETTEXT")
      Loop
      { 
          Gui, 2:Show, % "NA y0 x" i := i < -Width ? 0 : i - 1 
          Sleep 10
      }
      return

      GuiClose:
         FileDelete, % A_ScriptFullPath
         ExitApp

      WM_SETTEXT(wp, lp)
      {
         global
         Text := StrGet(lp)
         Gui, 2:New, +Parent%hControl% -Caption +Lastfound
         Gui, 2:Color, 606060
         Gui, 2:Font, s21 cFFAA00, Verdana
         Gui, 2:Add, Text, x350 y6, % Text
         Gui, 2:Show, NA x0 y0
         i := 0
         WinGetPos,,, Width
         return 0
      }
   )
   ;******************************** ; конец текста скрипта ***********************************

   FilePath := A_Temp "\_MyScript_" A_TickCount ".ahk"
   FileAppend, % Text%n%, % FilePath
   Run, % FilePath,,, PID
   this[n] := {Path: FilePath, PID: PID}  ; сохраняем путь к файлу дочернего скрипта и его PID
}                                         ; в соответствующих ключах вызывающего объекта

TerminateScript(this, n)
{
   Critical
   Process, Close, % this[n].PID
   Process, WaitClose, % this[n].PID
   FileDelete, % this[n].Path
}

SendStringToScript(this, n)
{
   GuiControlGet, Text,, Edit1
   SendMessage, WM_SETTEXT := 0xC,, &Text,, % "ahk_pid " this[n].PID
}

Взято отсюда

6

Re: AHK: Передача значения переменной между скриптами

teadrinker, я прост один из вариантов сказал. Ясное дело что у меня не самая топовая идея, но если автор не совсем шарит в АХК, всякие сложные фокусы могут не понравиться ему).

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.