Tosyk
Новичок
- Сообщения
- 206
- Репутация
- 0
Что я пытаюсь выполнить?
Ускорить выполнение скрипта
Как я это пытался/ась выполнить?
сделал скрипт, вот он:
однако же мой старый скрипт для этого действия работает сразу, без паузы. вот он:
Что я ожидаю от выполненных действии?
чтобы когда я нажимаю на Start скрипт бы не подвисал на пару секунд, а выполнялся моментально
Что происходит на самом деле?
после нажатия на кнопку Start окно какое-то время думает и только потом начинает обрабатывать файлы.
p.s.: конвертирование происходит через этот файл: https://drive.google.com/file/d/1vI8oNmvdQLtA7AikkGJvPplHXFwnidVZ/view?usp=sharing
Ускорить выполнение скрипта
Как я это пытался/ась выполнить?
сделал скрипт, вот он:
Код:
#include <File.au3>
;~ #include <MsgBoxConstants.au3>
#Include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
AutoItSetOption("MustDeclareVars", 1)
HotKeySet("{ESC}", "Terminate")
Local $i
Local $sSourceFile, $sDestFile, $sRunWait, $sParams, $iMax, $sNewFileName, $Form1, $ProgressBar1, $Label, $Progress, $Progress1, $gamVal, $CheckKeepAlpha, $v1
Local $sDrive, $sFolder, $sFileName, $sExt
Local $sIMConv = 'magick.exe', $sIMPathFull = 'C:\Program Files\ImageMagick\', $sIMPath = FileGetShortName($sIMPathFull & $sIMConv) ; path to image magick tools
Local $Exts = "tga|jpg|bmp|dds|png|tif|jpeg", $sPattern = "\.(?i:" & $Exts & ")" ; supported input file extensions
Local $ExtOutput = "png"
If $CmdLine[0] <> 0 Then
If FileExists($sIMPath) Then
ProcessFiles()
Else
MsgBox(0, $sIMConv & " not found", "File [" & $sIMPathFull & $sIMConv & "] not found" & @CRLF)
ConsoleWrite("Download Image Magick: " & $sIMConv & " to use this tool." & @CRLF)
EndIf
Else
MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf
Func ProcessFiles()
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Converting files...", 300, 185, -1, -1);, $WS_POPUP) ;, $WS_EX_TOOLWINDOW)
Local $Group1 = GUICtrlCreateGroup("Set gamma", 8, 5, 284, 56)
$gamVal = GUICtrlCreateInput("1.3", 20, 28, 260, 22)
$CheckKeepAlpha = GUICtrlCreateCheckbox("Keep alpha channel", 20, 68, 200, 17)
$Label = GUICtrlCreateLabel("", 20, 94, 220, 20, $SS_LEFT) ;, $WS_EX_TOPMOST)
$Progress1 = CreateProgress(20, 115, 260, 20)
Local $Button1 = GUICtrlCreateButton("Start", 206, 150, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button1
ExitLoop
EndSwitch
WEnd
For $i = 1 To $CmdLine[0]
$sSourceFile = $CmdLine[$i]
_PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
GUICtrlSetData($ProgressBar1, ($i / $CmdLine[0]) * 100)
If FileExists($sSourceFile) Then
If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
Settings() ; function of settings
ConsoleWrite("Full converting path: " & $sRunWait & @LF)
RunWait(@ComSpec & ' /c ' & $sRunWait, '', @SW_HIDE)
Else
ProgressOff()
MsgBox(0, "Incorrect extension", "Extension of file [" & $sFileName & "] is [" & $sExt & "] and not in [" & $Exts & "]" & @CRLF)
ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
EndIf
Else
ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
EndIf
UpdateProgress($Progress1, ($i / $CmdLine[0]) * 100)
GUICtrlSetData($Label, $sFileName & $sExt)
Sleep(650)
Next
GUICtrlSetData($Label, "Converting complete")
Sleep(1000)
EndFunc ;==>ProcessFiles
Func Settings()
If _IsChecked($CheckKeepAlpha) Then
$v1 = ' '
Else
$v1 = ' ' & '-alpha off' & ' '
EndIf
$sSourceFile = '"' & $sSourceFile & '"'
$sParams = '-gamma' & ' ' & GUICtrlRead($gamVal) & ',' & GUICtrlRead($gamVal) & ',' & GUICtrlRead($gamVal) & $v1 & '-colorspace sRGB'
$sNewFileName = ($sFileName & '.' & $ExtOutput)
$sDestFile = '"' & $sDrive & StringTrimRight($sFolder, 1) & '\' & $sNewFileName & '"'
$sRunWait = $sIMPath & " " & $sSourceFile & " " & $sParams & " " & $sDestFile
EndFunc ;==>Settings
;---------------------------------------------------------------
;- Enhanced Progress widget
;---------------------------------------------------------------
Func CreateProgress($x, $y, $w, $h, $Label="")
Dim $Progress[2]
$Progress[0] = GuiCtrlCreateProgress($x, $y, $w, $h) ; this is progress bar
$Progress[1] = GuiCtrlCreateLabel($Label, $x+0, $y-21, '', '', $SS_RIGHT) ; this is percentage label
GUICtrlSetFont($Progress[1], 11, 500, 0, "")
GUICtrlSetBkColor($Progress[1], $GUI_BKCOLOR_TRANSPARENT)
Return $Progress
EndFunc
Func UpdateProgress($ProgressID, $Percent, $Label="")
GUICtrlSetData($ProgressID[0], $Percent)
GUICtrlSetData($ProgressID[1], $Label & Round($Percent, 1) & "%")
EndFunc
Func _IsChecked($idControlID)
Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_IsChecked
Func Terminate()
Exit
EndFunc ;==>Terminate
Exit(0)
однако же мой старый скрипт для этого действия работает сразу, без паузы. вот он:
Код:
#Include <File.au3>
AutoItSetOption("MustDeclareVars", 1)
Local $i
Local $sSourceFile, $sDestFile
Local $sDrive, $sFolder, $sFileName, $sExt
Local $sPattern = "\.(?i:tga|jpg|bmp|dds|png|tif|jpeg)"
If $CmdLine[0] <> 0 Then
If FileExists("C:\Program Files\ImageMagick\convert.exe") Then
ProgressOn("Converting", "", "0%")
For $i = 1 To $CmdLine[0]
$sSourceFile = $CmdLine[$i]
ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")
If FileExists($sSourceFile) Then
_PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
$sDestFile = _PathMake($sDrive, $sFolder, $sFileName, ".png")
RunWait("""" & "C:\Program Files\ImageMagick\convert.exe "" """ & $sSourceFile & """ -gamma 1.3,1.3,1.3 -colorspace sRGB """ & $sDestFile & """", "", @SW_HIDE)
Else
ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
EndIf
Else
ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
EndIf
Next
ProgressSet(100 , "Converting complete", "100%")
Sleep(1000)
ProgressOff()
EndIf
Else
MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf
Exit(0)
Что я ожидаю от выполненных действии?
чтобы когда я нажимаю на Start скрипт бы не подвисал на пару секунд, а выполнялся моментально
Что происходит на самом деле?
после нажатия на кнопку Start окно какое-то время думает и только потом начинает обрабатывать файлы.
p.s.: конвертирование происходит через этот файл: https://drive.google.com/file/d/1vI8oNmvdQLtA7AikkGJvPplHXFwnidVZ/view?usp=sharing