Показать полную графическую версию : [решено] HotKeySet() для одновременного управления несколькими скриптами
Один скрипт запускает другой (или несколько), как сделать чтобы по горячей клавише все скрипты вставали на паузу. Пауза HotKeySet("{PAUSE}", "TogglePause") срабатывает только в первом скрипте, я так понимаю хоткей захватывается им, а в остальных работает только если назначить другую кнопку. Как сделать на одной кнопке ?
FlatX007
25-08-2009, 12:54
Ну проще всего принажатиии кнопки "паузы" внести данные в INI файл.
Другие скрипты будут считывать данные из этого INI файла. Считывать можно этим AdlibEnable
Вариант с INI файлом не совсем подходит, так как в момент нажатия паузы запущенные скрипты будут чего нибудь считать или ожидать или искать в цикле (которых много разных ) , и необходимо будет из всех циклов считывать этот INI файл что замедлит эти циклы (да и переписывать их надо будет). HotKeySet тем и хорош что позволяет вызвать функцию из любого места скрипта.
Ты не понял. AdlibEnable работает сам по себе. Это замкнутый цикл, который вызывается каждые 100 мс (можно другое время задать) и собственно и служит для проверки чего либо. Мне кажется это хороший вариант...
FlatX007
25-08-2009, 14:33
Да да это хороший вариант.
Незабывем про кнопку ... ;)
Ну зачем же Ini, можно устроить интеракцию через GUI окно:
#include <GuiConstants.au3>
Global $iPaused = False
HotKeySet("{Pause}", "_TogglePause")
$hGUI = GUICreate("Test Script", 300, 200, 510)
$Button = GUICtrlCreateButton("Button", 20, 40, 60, 20)
GUISetState(@SW_SHOW, $hGUI)
_RunScript_Proc("Child Script")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _RunScript_Proc($sTitle)
$sScript = _
'#NoTrayIcon' & @CRLF & _
'#include <GuiConstants.au3>' & @CRLF & _
'Global $iPaused = False' & @CRLF & _
'' & @CRLF & _
'GUICreate("' & $sTitle & '", 300, 200, 200)' & @CRLF & _
'$nInteract_Edit = GUICtrlCreateEdit("", -100, -100, 50, 20)' & @CRLF & _
'' & @CRLF & _
'GUISetState(@SW_SHOW)' & @CRLF & _
'' & @CRLF & _
'While 1' & @CRLF & _
' Switch GUIGetMsg()' & @CRLF & _
' Case $GUI_EVENT_CLOSE' & @CRLF & _
' Exit' & @CRLF & _
' EndSwitch' & @CRLF & _
' ' & @CRLF & _
' If GUICtrlRead($nInteract_Edit) <> "" Then' & @CRLF & _
' GUICtrlSetData($nInteract_Edit, "")' & @CRLF & _
' _TogglePause()' & @CRLF & _
' EndIf' & @CRLF & _
'WEnd' & @CRLF & _
'' & @CRLF & _
'Func _TogglePause()' & @CRLF & _
' $iPaused = Not $iPaused' & @CRLF & _
' ' & @CRLF & _
' MsgBox(64, "", "_TogglePause from [' & $sTitle & '] script: " & $iPaused)' & @CRLF & _
' ' & @CRLF & _
' While $iPaused' & @CRLF & _
' Sleep(10)' & @CRLF & _
' If GUICtrlRead($nInteract_Edit) <> "" Then ExitLoop' & @CRLF & _
' WEnd' & @CRLF & _
'EndFunc' & @CRLF
$hFile = FileOpen(@TempDir & "\~Au3_Script.tmp", 2)
FileWrite($hFile, $sScript)
FileClose($hFile)
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\~Au3_Script.tmp"')
EndFunc
Func _TogglePause()
$iPaused = Not $iPaused
ControlSetText("Child Script", "", "Edit1", "_TogglePause")
Sleep(100)
MsgBox(64, "", "_TogglePause from [" & WinGetTitle($hGUI) & "] script: " & $iPaused)
While $iPaused
Sleep(10)
WEnd
EndFunc
Спасибо, работает, если бы AdlibEnable ещё бы неприостанавливал скрипт было бы вообще замечательно :) .
Eщё подскажите пожалуйста как вместо INI прикрутить События (Event), где на русском можно почитать про CreateEvent(), SetEvent() и их параметры или может быть пример приведёте.
А ещё как вариант, проверять в цикле других скриптов через _IsPressed() :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.