Тема: AHK: Передача значения переменной между скриптами
Недавно наткнулся на такой вопрос.
Имея два скрипта, задав в первом скрипте переменную "bkw := 1".
Можно ли как -то отобразить эту переменную во втором скрипте, "msgbox, % bkw"?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Недавно наткнулся на такой вопрос.
Имея два скрипта, задав в первом скрипте переменную "bkw := 1".
Можно ли как -то отобразить эту переменную во втором скрипте, "msgbox, % bkw"?
Нельзя, но можно отправить значение переменной из одного скрипта в другой.
Можно записать переменную во внешнюю среду, а с дочернего скрипта прочитать её и отобразить.
belyankin12, можно, да только зачем?
Если второй скрипт - дочерний, то можно просто передать значение. А в другом случае ищите ответы в 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
}
Взято отсюда
teadrinker, я прост один из вариантов сказал. Ясное дело что у меня не самая топовая идея, но если автор не совсем шарит в АХК, всякие сложные фокусы могут не понравиться ему).
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться