Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] HotKeySet() для одновременного управления несколькими скриптами (http://forum.oszone.net/showthread.php?t=148825)

Lyuk 25-08-2009 11:37 1202618

HotKeySet() для одновременного управления несколькими скриптами
 
Один скрипт запускает другой (или несколько), как сделать чтобы по горячей клавише все скрипты вставали на паузу. Пауза HotKeySet("{PAUSE}", "TogglePause") срабатывает только в первом скрипте, я так понимаю хоткей захватывается им, а в остальных работает только если назначить другую кнопку. Как сделать на одной кнопке ?

FlatX007 25-08-2009 12:54 1202696

Ну проще всего принажатиии кнопки "паузы" внести данные в INI файл.
Другие скрипты будут считывать данные из этого INI файла. Считывать можно этим AdlibEnable

Lyuk 25-08-2009 13:21 1202722

Вариант с INI файлом не совсем подходит, так как в момент нажатия паузы запущенные скрипты будут чего нибудь считать или ожидать или искать в цикле (которых много разных ) , и необходимо будет из всех циклов считывать этот INI файл что замедлит эти циклы (да и переписывать их надо будет). HotKeySet тем и хорош что позволяет вызвать функцию из любого места скрипта.

Medic84 25-08-2009 14:18 1202770

Ты не понял. AdlibEnable работает сам по себе. Это замкнутый цикл, который вызывается каждые 100 мс (можно другое время задать) и собственно и служит для проверки чего либо. Мне кажется это хороший вариант...

FlatX007 25-08-2009 14:33 1202783

Да да это хороший вариант.

Незабывем про кнопку ... ;)

Creat0R 25-08-2009 17:05 1202921

Ну зачем же 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


Lyuk 25-08-2009 17:17 1202938

Спасибо, работает, если бы AdlibEnable ещё бы неприостанавливал скрипт было бы вообще замечательно :) .

Eщё подскажите пожалуйста как вместо INI прикрутить События (Event), где на русском можно почитать про CreateEvent(), SetEvent() и их параметры или может быть пример приведёте.

Creat0R 25-08-2009 17:23 1202944

А ещё как вариант, проверять в цикле других скриптов через _IsPressed() :)


Время: 17:34.

Время: 17:34.
© OSzone.net 2001-