Что нового

Выполнения прогресса в сопровождении с звуковым сигналом

renom

Новичок
Сообщения
127
Репутация
2
Пытался сделать следующее:

Код:
ProgressOn("Установка модульных компонентов", "Пожалуйста подождите.", "0%")
Beep(500,5000)
For $i = 20 to 100 step 20
    sleep(1000)
    ProgressSet( $i, $i & "%")
Next
ProgressSet(100 , "Выполнено", "Установка успешно завершена.")
sleep(2 * 1000)
ProgressOff()

Но увы получается что пока не закончится звуковое сопровождение - не начнется прогресс "установки".
А хотелось бы,чтобы они выполнялись одновременно.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Код:
ProgressOn("Установка модульных компонентов", "Пожалуйста подождите.", "0%")
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Beep(500, 5000)"')
For $i = 20 To 100 Step 20
	Sleep(1000)
	ProgressSet($i, $i & "%")
Next
ProgressSet(100, "Выполнено", "Установка успешно завершена.")
Sleep(2 * 1000)
ProgressOff()
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Спасибо
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Брр...а как поступить,если вместо команды Beep идет большой код?
Попробовал все кинуть в кавычки - не вышло :smile:
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Допустим вместо одной команды Beep идет:

Код:
Beep(500,1000)
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Поместить все в одну функцию: _beep(), и вызывать где хочешь.
Код:
Func _beep()
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Beep(500, 5000)"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
EndFunc
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
r35p3ct сказал(а):
Поместить все в одну функцию: _beep(), и вызывать где хочешь.
Код:
Func _beep()
Run(@AutoItExe & ' /AutoIt3ExecuteLine "Beep(500, 5000)"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
Run(@AutoItExe & ' /AutoIt3ExecuteLine  "MsgBox(0, ''Fatal Error'', ''Error code 0x0000E65100#'')"')
EndFunc
Ничего не происходит...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
А что конкретно нужно сделать?
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Допустим идет процесс данного вида:

Код:
ProgressOn("Установка модульных компонентов", "Пожалуйста подождите.", "0%")
For $i = 5 To 100 Step 5
    Sleep(1000)
    ProgressSet($i, $i & "%")
Next
ProgressSet(100, "Выполнено", "Установка успешно завершена.")
Sleep(1 * 1000)
ProgressOff()


И вот пока выполняется данный процесс,в этот же момент,одновременно выполняется код:

Код:
#include <GUIConstants.au3>
#include <File.au3>

$SmtpServer = " "   
$FromName = " "           
$FromAddress = " " 
$ToAddress = " "    
$Subject = " "            
$Body = " "      
$AttachFiles = " " 
$Username = " " 
$Password = " "            

$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles
;Run (@scriptdir & "\blat. " & $BlatArgs, @ScriptDir, @SW_HIDE )
_SendMail($BlatArgs)

Func _SendMail($CMDstring)
    $BlatDLL = DllOpen ("sound.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

        Select
            Case $result[0] = 13
                Beep(0,0)

            Case $result[0] = 12
                Beep(0,0)

            Case $result[0] = 3
               Beep(0,0)

            Case $result[0] = 2
                Beep(0,0)
            Case $result[0] = 1
                Beep(0,0)
            Case $result[0] <> 0
                Beep(0,0)
        EndSelect
    Until $result[0] = 0
    DllClose ($BlatDLL)
EndFunc ;
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Тогда сохрани этот большой код во временный файл и запусти его следующим образом:

Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Temp.au3"')
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Yashied сказал(а):
Тогда сохрани этот большой код во временный файл и запусти его следующим образом:

Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\Temp.au3"')
А все в одном файле - не выйдет?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Но ты можешь разделять код по параметру в командной строке. Если твой файл запускается, например, с параметром "/beep", то выполняется тот самый большой код. В противном случае, выполняется прогресс... Непосредственно перед прогрессом вызываешь его так:

Код:
Run(@AutoItExe & ' /beep')
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Yashied сказал(а):
Но ты можешь разделять код по параметру в командной строке. Если твой файл запускается, например, с параметром "/beep", то выполняется тот самый большой код. В противном случае, выполняется прогресс... Непосредственно перед прогрессом вызываешь его так:

Код:
Run(@AutoItExe & ' /beep')
Но это же ведь не совсем то...

p.s. основной код вписал - постами выше.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
renom
{OverQuoteWarn}
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
renom [?]
Но это же ведь не совсем то..
Почему не то? Имхо, очень хорошее решени. И временных файлов не надо и @AutoItExe использовать. А просто запускать еще раз свой же файл, который будет выполнять определенную функцию и закрываться.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Код:
#Include <GUIConstants.au3>
#Include <File.au3>

If ($CmdLine[0]) And ($CmdLine[1] = '/send') Then
	_Send()
	Exit
EndIf

ProgressOn("Установка модульных компонентов", "Пожалуйста подождите.", "0%")
If @compiled Then
	Run(@ScriptFullPath & ' /send')
Else
	Run(@AutoItExe & ' "' & @ScriptFullPath & '" /send')
EndIf
For $i = 5 To 100 Step 5
    Sleep(1000)
    ProgressSet($i, $i & "%")
Next
ProgressSet(100, "Выполнено", "Установка успешно завершена.")
Sleep(1 * 1000)
ProgressOff()

Func _Send()
	$SmtpServer = " "
	$FromName = " "
	$FromAddress = " "
	$ToAddress = " "
	$Subject = " "
	$Body = " "
	$AttachFiles = " "
	$Username = " "
	$Password = " "
	$BlatArgs = "-t " & $ToAddress & " -f " & $FromAddress & " -s " & $Subject & " -body " & $Body & " -server " & $SmtpServer & " -u " & $Username & " -pw " & $Password & " -attach " & $AttachFiles
	;Run (@scriptdir & "\blat. " & $BlatArgs, @ScriptDir, @SW_HIDE )
	_SendMail($BlatArgs)
EndFunc   ;==>_Send

Func _SendMail($CMDstring)
	$BlatDLL = DllOpen("sound.dll")
	Do
		$result = DllCall($BlatDLL, "int", "Send", "str", $CMDstring)
		Select
			Case $result[0] = 13
				Beep(0, 0)
			Case $result[0] = 12
				Beep(0, 0)
			Case $result[0] = 3
				Beep(0, 0)
			Case $result[0] = 2
				Beep(0, 0)
			Case $result[0] = 1
				Beep(0, 0)
			Case $result[0] <> 0
				Beep(0, 0)
		EndSelect
	Until $result[0] = 0
	DllClose($BlatDLL)
EndFunc   ;==>_SendMail
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Во...видимо то что нужно.

Спасибо большое.
 
Автор
R

renom

Новичок
Сообщения
127
Репутация
2
Никак не разобрался...Скрипт не запускается.
Код:
#include <BlockInputEx.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

If ($CmdLine[0]) And ($CmdLine[1] = '/send') Then
    _Send()
    Exit
EndIf

Func _Send()

$Form1 = GUICreate("test title", 280, 166)
$Label1 = GUICtrlCreateLabel("Отсчет пошел", 51, 22, 171, 33)
GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("10", 121, 79, 32, 36, $SS_CENTER)
GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

for $i = 9 to 0 step -1
    Sleep(1000)
    GUICtrlSetData($Label2, $i)
Next

GUISetState(@SW_HIDE)

_BlockInputEx( 2 )
sleep(5000)
_BlockInputEx( 0 )
EndFunc
 
Верх