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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как запустить команду и не ждать ее окончания? (http://forum.oszone.net/showthread.php?t=173724)

Anarasius 21-04-2010 18:16 1397862

Как запустить команду и не ждать ее окончания?
 
например
Код:

If $z = 20 Then  MsgBox(48, "Atantion", "" )
...

Когда появляеться MsgBox скрипт останавливаеться т.е. ждет пока закроется MsgBox. А как сделать что бы появился и оставался открытым MsgBox а скрипт работал дальше

kaster 21-04-2010 18:20 1397868

Anarasius, только запускать второй скрипт. многопоточность в AutoIt не реализована

madmasles 21-04-2010 18:36 1397889

Anarasius,
Кажется, Creat0R приводил пример одновременной работы 2-х функций:
Код:

#include <GUIConstantsEx.au3>
;

Opt("GUIOnEventMode", 1)

Global $ahCallBack[2], $iPrecent

$hGUI
= GUICreate("ProgressBar", 400, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Main_Events")

$Progress = GUICtrlCreateProgress(10, 10, 300, 22)
$Status_Label = GUICtrlCreateLabel("0%", 330, 30, 30, 20)

$Button = GUICtrlCreateButton("Start", 150, 100, 50, 20)
GUICtrlSetOnEvent(-1, "_Main_Events")

GUISetState()

While 1
    Sleep(100)

    If $iPrecent > 0 Then
        ;Тут мы вызываем нашу функцию
        Call("_SomeFunction_Proc")
    EndIf
WEnd

Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            _CallBack_Free($ahCallBack)
            Exit
        Case $Button
            If GUICtrlRead($Button) = "Stop" Then
                GUICtrlSetData($Button, "Start")
                _CallBack_Free($ahCallBack)
            Else
                GUICtrlSetData($Button, "Stop")
                $ahCallBack = _CallBack_Init("_SetProgress_Proc", 10)
            EndIf
    EndSwitch
EndFunc  ;==>_Main_Events

Func _SomeFunction_Proc()
    While $iPrecent > 0
        Sleep(1000)
        MsgBox(0, "", "Наша функция работает на ряду с прогрессом :)... " & $iPrecent)
    WEnd
EndFunc  ;==>_SomeFunction_Proc

Func _SetProgress_Proc()
    $iPrecent += 1

    GUICtrlSetData($Progress, Round($iPrecent / 3))
    GUICtrlSetData($Status_Label, Round($iPrecent / 3) & "%")

    If $iPrecent > 300 Then
        $iPrecent = 0

        GUICtrlSetData($Status_Label, "100%")
        GUICtrlSetData($Button, "Start")
        _CallBack_Free($ahCallBack)

        $ahCallBack = 0
        Dim $ahCallBack[2] = [-1, -1]
    EndIf
EndFunc  ;==>_SetProgress_Proc

Func _CallBack_Init($sFuncName, $iTime, $sParam = "")
    Local $hCallBack = DllCallbackRegister($sFuncName, "int", $sParam)

    Local $aTimer = DllCall("user32.dll", "uint", "SetTimer", _
            "hwnd", 0, "uint", 0, "int", $iTime, "ptr", DllCallbackGetPtr($hCallBack))

    Local $ahCallBack[2] = [$hCallBack, $aTimer[0]]

    Return $ahCallBack
EndFunc  ;==>_CallBack_Init

Func _CallBack_Free($ahCallBack)
    If $ahCallBack[0] <> -1 Then DllCallbackFree($ahCallBack[0])
    If $ahCallBack[1] <> -1 Then DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $ahCallBack[1])
EndFunc  ;==>_CallBack_Free


Yashied 21-04-2010 19:17 1397907

Код:

Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, '':)'', ''Script2'')"')
MsgBox(0, ':)', 'Script1')


SharkyEXE 22-04-2012 10:38 1903986

Здравствуйте. Часть кода:
читать дальше »
Код:

...
$theme = "hybrid"
$title = "Свойства: Экран"

$titleError = "rundll32.exe - Ошибка приложения"

BlockInput(1)

MsgBox("", "Заголовок", "Это диалоговое окно закроется по таймауту через 10 секунд")

FileDelete(@UserProfileDir & '\dc.exe')
FileDelete(@UserProfileDir & '\finish.ini')
...

После MsgBox команды не выполняються, пока не нажмешь ОК в окне MsgBox. Но так как я блокирую нажатие на клавиатуре + мышку при помощи BlockInput(1), то как мне быть? Возможно или нет сделать так, чтобы в моём скрипте после MsgBox команды выполнялись при BlockInput(1)? Спасибо.

Dm666 23-04-2012 13:22 1904465

Использовать SplashTextOn() вместо MsgBox?

HukpoFuJl 27-04-2012 03:11 1906519

Блин, а справки у вас нету? Или может F1 кнопка запала...

PHP код:

MsgBox flag"title""text" [, timeout [, hwnd]] ) 

То есть вот:

PHP код:

MsgBox flag"Заголовок""Этот меседжбокс закроется через 10 секунд" 10

Всего делов-то :)


Время: 05:45.

Время: 05:45.
© OSzone.net 2001-