Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты
Вот что получаеться, но при компиляции вываливаеться с ощибкой, подскажи пожалуйста что я напутал?
#include <GUIConstants.au3>
;Получаем переменные Opera AC
$AC_OPERA = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_OPERA")
$AC_SOURCH = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_SOURCH")
While 1
$msg = GuiGetMsg()
If $msg = $GUI_EVENT_CLOSE
Or $msg = $Close Then
ExitLoop
ElseIf $msg = $Start Then
GUISetState(@SW_HIDE)
TrayTip("Идет копирование файлов","Дождитесь окончания копирования файлов",1,1)
$FirstPath=GUICtrlRead($Input)
$SecondPath=GUICtrlRead($Output)
$Form1 = GUICreate("AForm1", 659, 352, 214, 146)
$Pic1 = GUICtrlCreatePic("D:\Project\Soft\Opera$\Create\WizModernImage-IS.BMP", 8, 0, 153, 345)
GUICtrlCreateLabel("Источник", 176, 8, 52, 17)
$Input = GUICtrlCreateInput("AInput1", 176, 24, 425, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Получатель", 176, 56, 63, 17)
$Output = GUICtrlCreateInput("AInput2", 176, 72, 425, 21, -1, $WS_EX_CLIENTEDGE)
$Bookmaarks = GUICtrlCreateCheckbox("ACheckbox1", 184, 112, 97, 17)
$Notes = GUICtrlCreateCheckbox("ACheckbox2", 184, 136, 97, 17)
$cookies = GUICtrlCreateCheckbox("ACheckbox3", 184, 160, 97, 17)
$wand = GUICtrlCreateCheckbox("ACheckbox4", 184, 184, 97, 17)
$vlink4 = GUICtrlCreateCheckbox("ACheckbox5", 184, 208, 97, 17)
$global = GUICtrlCreateCheckbox("ACheckbox6", 184, 232, 97, 17)
$download = GUICtrlCreateCheckbox("ACheckbox7", 184, 256, 97, 17)
$cache = GUICtrlCreateCheckbox("ACheckbox8", 184, 280, 97, 17)
$Start = GUICtrlCreateButton("AButton1", 328, 312, 113, 25)
$Close = GUICtrlCreateButton("AButton2", 544, 312, 105, 25)
GUICtrlCreateLabel("Закладки", 288, 112, 315, 17)
GUICtrlCreateLabel("Заметки", 288, 136, 315, 17)
GUICtrlCreateLabel("Куки", 288, 160, 315, 17)
GUICtrlCreateLabel("Пароли жезла", 288, 184, 315, 17)
GUICtrlCreateLabel("Набранные адреса", 288, 208, 315, 17)
GUICtrlCreateLabel("История посещений", 288, 232, 315, 17)
GUICtrlCreateLabel("История закачек", 288, 256, 315, 17)
GUICtrlCreateLabel("Кеш", 288, 280, 313, 17)
GUISetState(@SW_SHOW)
If GUICtrlRead($Bookmaarks) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\opera6.adr", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($Notes) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\notes.adr", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($cookies) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\cookies4.dat", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($wand) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\wand.dat", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($global) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\global.dat", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($download) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\download.dat", "$SecondPath\profile\",1)
EndIf
If GUICtrlRead($cache) = 1 Then
DirCreate("$SecondPath")
DirCopy("$FirstPath\profile\cache4\", "$SecondPath\profile\cache4\",1)
EndIf
ExitLoop
EndIf
Wеnd
Всем доброго времени суток!
У меня возникла следущая проблема:
Я создал скрипт, который вызывает окно где можно выбрать каталог, и затем скрипт вписывает результат выбора в файл.
Вот его состав:
$var = FileSelectFolder("Вибирите каталог...", "")
If @error Then
Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(292,"?","Вы уверенны")
Select
Case $iMsgBoxAnswer = 6;Yes
Case $iMsgBoxAnswer = 7;No
EndSelect
Else
$var = StringReplace($var, "|", @CRLF)
MsgBox(4096,"","You chose " & $var)
FileWrite ( "file.tmp", $var )
EndIf
Теперь вопрос:
Как я могу сделать так, что если в том окне, которое появится после нажатия на 'Отмена' (в первом окне), пользователь нажимает в нём 'Нет', то будет запущено первое окно снова. Т.е нужно как-то вернуться на метку, которая будет стоять перед выводом первого окна.
P.S:
Я знаю что существует команда Wend и она как-то связанна с командой While = - Но как ей пользоваться, т.е как её подставлять в скрипт, я беспонятия http://smilies.sofrayt.com/^/aiw/dont-know.gif
Есть ещё вопрос:
Можно ли каким-то образом, конвертировать скрипт Bath (файла *.bat), в скрипт AutoIT?
bogomolv
06-07-2006, 21:33
SyCraft
Вот что получаеться, но при компиляции вываливаеться с ощибкой, подскажи пожалуйста что я напутал?
Насажал ошибок, причем не только в каждом слове этого сообщения, но и в скрипте :)
В частности, неправильно пишешь имена переменных внутри строки:
вместо "$FirstPath\profile\notes.adr",
нужно писать $FirstPath&"\profile\notes.adr"
или "$FirstPath$\profile\notes.adr" (в последнем случае нужно задать Opt("ExpandVarStrings",1)).
Creat0R
1) Нужная тебе конструкция While... Wend подробно и с примерами описана в AutoIt Help. Лучше, чем там, тебе никто не объяснит.
2) Конверторов скриптов Bath в скрипт AutoIT нет и не будет.
bogomolv
1) Нужная тебе конструкция While... Wend подробно и с примерами описана в AutoIt Help.
Вот пример который описан в справке:
Пример
$i = 0
While $i <= 10
MsgBox(0, "Значение $i равно:", $i)
$i = $i + 1
WEnd
С этого примера, и с описании которые в справке, мне трудно понять, каким образом в моём скрипте, будет возвращено управление на метку в начало скрипта?! я пробовал так, но не работает, пишет ошибка в команде wend:
While $iMsgBoxAnswer = 7
$var = FileSelectFolder("Select a folder.", "")
If @error Then
Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(292,"Msg","you sure?")
Select
Case $iMsgBoxAnswer = 6 ;Yes
Case $iMsgBoxAnswer = 7 ;No
EndSelect
Wend
Else
$var = StringReplace($var, "|", @CRLF)
MsgBox(64,".....","Вы выбрали: " & $var)
FileWrite ( "c.tmp", $var )
EndIf
Тут, где команда While $iMsgBoxAnswer = 7, нужно чобыы туда происходил переход в том случае, если была нажата кнопка No
Лучше, чем там, тебе никто не объяснит.
А может всё-таки ты сможешь лучше объяснить? плиз? http://www.softboard.ru/style_emoticons/default/blush2.gif - очень очень нужно.
Ну вроде все исправил.. но тепрь такая проблема.. после нежатии кнопки начала копирования, копирование не происходит, просто выскакивает информационное окно о начале процеса все..
Не подскажите где я вновь учудил?
#include <GUIConstants.au3>
;Получаем переменные Opera AC
$AC_OPERA = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_OPERA")
$AC_SOURCH = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_SOURCH")
$Form1 = GUICreate("AForm1", 659, 352, 214, 146)
$Pic1 = GUICtrlCreatePic("D:\Project\Soft\Opera$\Create\WizModernImage-IS.BMP", 8, 0, 153, 345)
$Bookmaarks = GUICtrlCreateCheckbox("Закладки", 184, 112, 97, 17)
$Notes = GUICtrlCreateCheckbox("Заметки", 184, 136, 97, 17)
$cookies = GUICtrlCreateCheckbox("Куки", 184, 160, 97, 17)
$wand = GUICtrlCreateCheckbox("Пароли жезла", 184, 184, 97, 17)
$vlink4 = GUICtrlCreateCheckbox("Набранные адреса", 184, 208, 97, 17)
$global = GUICtrlCreateCheckbox("История посещений", 184, 232, 97, 17)
$download = GUICtrlCreateCheckbox("История закачек", 184, 256, 97, 17)
$cache = GUICtrlCreateCheckbox("Кеш", 184, 280, 97, 17)
GUISetState(@SW_SHOW)
$Start = GUICtrlCreateButton("Go", 328, 312, 113, 25)
$Close = GUICtrlCreateButton("Exit", 544, 312, 105, 25)
GUICtrlCreateLabel("Источник", 176, 8, 52, 17)
$Input = GUICtrlCreateInput($AC_SOURCH, 176, 24, 425, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Получатель", 176, 56, 63, 17)
$Output = GUICtrlCreateInput($AC_OPERA, 176, 72, 425, 21, -1, $WS_EX_CLIENTEDGE)
$SecondPath=GUICtrlRead($Output)
$FirstPath=GUICtrlRead($Input)
While 1
$msg = GuiGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then
Exit
ElseIf $msg = $Start Then
MsgBox("Идет копирование файлов","Дождитесь окончания копирования файлов", "Дождитесь окончания копирования файлов",1)
EndIf
Opt("ExpandVarStrings",1)
If GUICtrlRead($Bookmaarks) = 1 Then
FileCopy("$FirstPath$\profile\opera6.adr", "$SecondPath$\profile\*.*",1)
EndIf
If GUICtrlRead($Notes) = 1 Then
FileCopy("$FirstPath$\profile\notes.adr", "$SecondPath$\profile\*.*",1)
EndIf
If GUICtrlRead($cookies) = 1 Then
FileCopy("$FirstPath$\profile\cookies4.dat", "$SecondPath$\profile\*.*",1)
EndIf
If GUICtrlRead($wand) = 1 Then
FileCopy("$FirstPath$\profile\wand.dat", "$SecondPath$\profile\*.*",1)
EndIf
If GUICtrlRead($global) = 1 Then
FileCopy("$FirstPath$\profile\global.dat", "$SecondPath$\profile\*.*",1)
EndIf
If GUICtrlRead($download) = 1 Then
FileCopy("$FirstPath$\profile\download.dat", "$SecondPath$\profile\*.*",1)
If GUICtrlRead($cache) = 1 Then
DirCopy("$FirstPath$\profile\cache4\", "$SecondPath$\profile\cache4",1)
EndIf
EndIf
WEnd
bogomolv
07-07-2006, 08:33
Creat0R
Ты не понимаешь суть базового понятия "цикл".
+
Несколько раз перечитал твое
Как я могу сделать так, что если в том окне, которое появится после нажатия на 'Отмена' (в первом окне), пользователь нажимает в нём 'Нет', то будет запущено первое окно снова. Т.е нужно как-то вернуться на метку, которая будет стоять перед выводом первого окна.
В твоем описании задачи все окна "первые"...
Поэтому могут лишь подправить твой скрипт:
While 1
$var = FileSelectFolder("Select a folder.", "")
If NOT @error Then
$iMsgBoxAnswer = MsgBox(292,"Msg","you sure?")
Select
Case $iMsgBoxAnswer = 6 ;Yes
$var = StringReplace($var, "|", @CRLF)
MsgBox(64,".....","Вы выбрали: " & $var)
FileWrite ( "c.tmp", $var )
Exit
Case $iMsgBoxAnswer = 7 ;No
Case Else
Exit
EndSelect
Else
Exit
EndIf
Wend
SyCraft
Не подскажите где я вновь учудил?
Везде:
1. У оператора MsgBox другой синтаксис MsgBox(0,"", "",1)
2. Считывать значения редактируемых переменных нужно в цикле
While 1
$msg = GuiGetMsg()
$SecondPath = GUICtrlRead($Output)
$FirstPath = GUICtrlRead($Input)
...
3. Следи за условными переходами! У тебя $cache будет копироваться только, если копируется $download!
Сделай так:
While 1
...
If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then
Exit
ElseIf $msg = $Start Then
MsgBox(0,"Идет копирование файлов","Дождитесь окончания копирования файлов",1)
If GUICtrlRead($Bookmaarks) = 1 Then
...
EndIf
...
EndIf
WEnd
4. Учись отлаживать свои скрипты сам! Мне очень помогает вставка в проверяемое место MsgBox(0,"", "",1).
Например, в твой скрипт я вставил вместо FileCopy("$FirstPath$\profile\opera6.adr", "$SecondPath$\profile\*.*",1)
проверку MsgBox(0,"","$FirstPath$\profile\opera6.adr TO $FirstPath$\profile\*.*").
Тут же все твои косяки вылезли наружу.
5. Много мелких недочетов. В частности, зачем циклишь объявление опции Opt("ExpandVarStrings",1)? Обычно это делается в начале скрипта.
bogomolv
Спасибо, ты уж не взыщи просто я далек от программирования и только учусь!!!
Спасибо тебе!
bogomolv
Огромное тебе спасибо! Всё так как и нужно было! :bye:
Я кажется понял суть работы команд Wend и While - Всё что находится между ними, будет выполняться до тех пор, пока значение одной из команд будет ровно 0 (или любое другое кроме 1 - если есть такого), но как я понял, это в случае если у команды While присутствует значение 1 (While = 1). А какие ещё есть возможности её использования?
У меня есть пару вопросов:
1) Как осуществлять поиск существующего пути\каталога, и затем произвести определённое действие?
Т.е, вот например команда $search = FileFindFirstFile("file.tmp"), произведёт поиск файла file.tmp.
А если сделать так:
$search = FileFindFirstFile("File.tmp")
If $search = -1 Then
MsgBox(0, "Error", "File was not found")
Exit
EndIf
То в случае если файл не найден, будет выведенно сообщение.
Но мне вообще-то нужно, чтобы был поиск не файла, а каталога\пути (или даже будет лучше, если значения $var). Примерно так я себе это представляю:
$search = FileFindFirstFile("$var")
If $search = -1 Then
Тут нужно перейти в начало файла (думаю вместо этой строки поставить просто wend, а в строке выше, поменять -1 на 0, так?)
2) Как во время выполнения сценария, можно спрятать окно другого-запущенного приложения? (в данном случае - *.bat файл). Т.е чтобы сам скрипт, какой то командой, скрыл запущенное окно командной строки. Или хотябы сделать так, чтобы запущенное окно (Bath файла) самим скриптом AutoIt, было скрыто в момент его (батника) запуска!
Dirk Diggler
07-07-2006, 11:52
в хелпе все написано. Ох, батенька, взяли бы какую-нть книжку по информатике для 9 класса.
Dirk Diggler
в хелпе все написано.
Не всё, и не понятно! :no: (уж извените) - а книжка по информатике чем мне поможет? как правильно восспринимать информацию с хелпов? думаю тут ни это нужно... мне нужна практика (ведь как известно, одна лишь практика даёт желаемые результаты почти в любом деле - а в програмировании тем более)... читать и понимать написанное, я умею, вот если бы написанно было кем-то не очень ленивым (или занятым?) чувалеком, было бы легче понимать. Ясное дело, что тем кто уже знает толк в этом деле (да и в любом другом), легче рассуждать и утверждать, что в хелпе, и в факе, и ещё где, написанно всё понятно - хотя для такого, можно сказать - чайника в сфере программирования как я сам, то что там пишут, и так как это пишут, далеко не понятно! (по крайней мере не всё!).
Имхо, справку, которую переделали на русский, как будто с помощью словаря переделывали. Не то чтобы автор этой справки не знает английского, или программирования в AutoIt, я вовсе этого не утверждаю, просто считаю что можно было бы приложить немного больше усилии, ради такой весчи - как помощь по AutoIt'у!).
P.S:
Извеняюсь за офтоп! (если он таков есть).
Dirk Diggler
08-07-2006, 00:27
книжка поможет освоить базовые понятия программирования.
2ALL Написал тут скрипт VBS-> AU3. Ничего особенного, просто закатывает VBS в AU3, а тот пишет его в темп и запускает. Какую длину потянет - не проверял. Да и всякие ситуации хэндлятся не особо. Но мне достаточно, я более доделывать не буду. Работает из командной строки
script.au3 vbsname.vbs Au3name.au3
при отсутсвии параметров или только второго запросит соот-но оба или один в виде виндового диалога. Запрос на перезапись не дает.
Global $filename
Global $vbs
Global $vbshandle
Global $au3handle
Global $au3filename
Global $Line
Global $error
$func = 'Func RunVBS( $vbs) ' & @CRLF _
& ' Local $batname= "temp"& @MIN & @SEC & ".bat" ' & @CRLF _
& ' Local $vbsname= "temp"& @MIN & @SEC & ".vbs" ' & @CRLF _
& ' FileDelete(@TempDir & "\" & $vbsname) ' & @CRLF _
& ' FileWrite(@TempDir & "\" & $vbsname , $vbs) ' & @CRLF _
& ' FileWrite(@TempDir & "\" & $batname, $vbsname) ' & @CRLF _
& ' sleep(1000) ' & @CRLF _
& ' RunWait( @ComSpec &' & " ' /c" & ' "' & "'& @TempDir & '\' & $batname &" & "'" & '"' & "'" & ',@TempDir,@SW_HIDE) ' & @CRLF _
& ' FileDelete(@TempDir & "\" & $vbsname ) ' & @CRLF _
& ' FileDelete(@TempDir & "\" & $batname) ' & @CRLF _
& ' EndFunc'
If $cmdline[0] =0 Then
$filename = FileOpenDialog("Choose vbs", @HomeDrive,"VBScript (*.vbs)", 1)
if @error = 1 Then
MsgBox(0,"Error","Wrong filename or file error")
Exit
EndIf
Else
$filename = $cmdline[1]
EndIf
$vbshandle =FileOpen($filename,0)
If $vbshandle = -1 Then
MsgBox(0,"Error","vbs file read error")
Exit
EndIf
if $cmdline[0]>1 Then
$au3filename = $cmdline[2]
Else
$au3filename = FileSaveDialog("Enter au3 filename", @HomeDrive,"AutoIt3 (*.au3)",0, "vbs.au3")
if @error = 1 Then
MsgBox(0,"Error","Wrong filename or file error")
Exit
EndIf
EndIf
$au3handle =FileOpen($au3filename,2)
If $au3handle = -1 Then
MsgBox(0,"Error","Au3 file write error")
Exit
EndIf
$Line = " $vbsscript = '" & FileReadLine($vbshandle)
FileWrite($au3handle, $Line)
SetError(0)
While $error <> -1
$Line = FileReadLine($vbshandle)
$error = @error
if ($error <> -1) And StringStripWS($Line,8) <> "" Then
FileWrite($au3handle, "' & @CRLF _ " & @CRLF)
EndIf
if StringStripWS($Line,8) <> "" Then
$Line = "& '" & $Line
Else
ContinueLoop
EndIf
FileWrite($au3handle, $Line)
WEnd
FileWrite($au3handle,"'")
FileWrite($au3handle,@CRLF & @CRLF)
FileWrite($au3handle,"RunVBS($vbsscript)")
FileWrite($au3handle,@CRLF & @CRLF)
FileWrite($au3handle,$func)
FileClose($vbshandle)
FileClose($au3handle)
bogomolv
08-07-2006, 07:15
Creat0R
Думаю вместо этой строки поставить просто wend, а в строке выше, поменять -1 на 0, так?
Ну так ставь! Вместо пустых простыней и споров, лучше бы двадцать раз перепопробовал все свои варианты. Глядишь бы, и понял, что Wend без While не бывает, да и много чего другого полезного узнал.
Как во время выполнения сценария, можно спрятать окно другого-запущенного приложения?
Shows, hides, minimizes, maximizes, or restores a window - WinSetState ( "title", "text", flag )
"Всему лучшему в себе я обязан книгам". А.М.Горький
Creat0R
Имхо, справку, которую переделали на русский, как будто с помощью словаря переделывали. Не то чтобы автор этой справки не знает английского, или программирования в AutoIt, я вовсе этого не утверждаю, просто считаю что можно было бы приложить немного больше усилии, ради такой весчи - как помощь по AutoIt'у!
Не удержался, так как считаю что сдесь ты не прав. Я не задаю сдесь кучу вопросов потому, что русификация справки ВЕЛИКОЛЕПНА! Может быть не идеал, но по сравнению с другими русификациями что я видел сделано очень хорошо. По крайней мере большинство вопросов решалось именно путем перечитывания справки.
PS А тебе действительно поможет учебник для начинающих, так как само понятие циклов, условных переходов и т.д. одинаково для всех языков и начинать нужно с изучения основ.
Попробовал решить проблему с выводом из CMD как предлогал bogomolv в 120 посте. Во первых если копировать код из инета то он не работает т.к. изменяется строка в $a1 надо брать именно по ECHO, но у меня и она не заработала пока не взял эту строку из GUI самого скрипта. Более того есть большое подозрение что на Win с MUI эта строка будет другой и вообще памятуя о проблемах с кодировками сделал запрос при запуске скрипта. Теперь $a1 будет генерироваться при запуске скрипта под каждой виндой заново.
#include <Constants.au3>
#NoTrayIcon
$f = "C:\test.txt"
$aa = FileRead($f, FileGetSize($f))
$a2 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
$cmdRun = Run(@ComSpec & " /c ECHO " & $a2, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$a1 = StdoutRead($cmdRun, -1)
For $i = 1 To StringLen($aa)
$k = StringInStr($a1, StringMid($aa, $i, 1))
If $k>0 Then $aa = StringReplace($aa, $i, StringMid($a2, $k, 1))
Next
msgbox(0,'',$aa)
P.S. Метод предложенный VelDmi в 121 посте не сработал при выводе в GUI скрипта.
Хотя здесь и писалось хочу напомнить что StdoutRead работает только в последних беттах.
P.P.S. bogomolv, VelDmi смотрел форум на сайте разработчиков, не нашёл таких решений как у Вас, хотя конечно все посты не читал но поиск поюзал основательно. Было бы неплохо закинуть код туда.
Creat0R хелп не ругай коли чайник. Я сам полный самовар в программировании, как здесь советовали пробую сотни вариантов кода и методом научного тыка пытаюсь разобраться. ИМХО читать не люблю особенно учебники. А объяснять основы программирования справка не обязанна. Если мозги текут отпишись в PM гуру, здесь люди отзывчивые помогут. А вообще для того чтобы писать листинги на чистом листе уходят годы обучения. Так что если не готов закажи нужную весч у знающих людей. Кстати справочку человек переводил бесплатно и нужно сказать спасибо за человекачасы и применённые знания.
Извените не удержался.
bogomolv
"Всему лучшему в себе я обязан книгам". А.М.Горький
А есть книги по AutoIt'у? (Хорошо, т.е понятно написанны).
ANGRO
хелп не ругай коли чайник.
Я и не ругал хелп. Конечно же огромное спасибо автору справки, просто я лично не узнал в ней то что мне нужно (также как и из справки которая сделана на английском) - Кстати, я если и возмущён по поводу этой справки, так это только по поводу того, что она не сильно информативна (та что на английском).
P.S:
А у автора этой справки, прошу искринние извинения, у меня небыло намеринии оскорблять, или ругать работу кого либо! -Просто как сказал ANGRO, я есть Чайник в сфере программирования (или самовар ;) )
Решил собрать на основе кода из 196 поста что нить полезное так сказать для проверки в драйв тесте.
Почему-то получился пинг :biggrin: .
#include <GUIConstants.au3>
#include <Constants.au3>
#NoTrayIcon
Opt("GUICloseOnESC", 0)
GUICreate("Пинг", 372, 304)
;GuiSetIcon("11.ico", 0)
$Edit1 = GUICtrlCreateEdit("", 2, 2, 370, 251, $ES_READONLY + $WS_VSCROLL, $WS_EX_CLIENTEDGE)
GUICtrlSetFont ($Edit1,10, 550, 0, "Lucida Console")
GuiCtrlSetBkColor($Edit1,0xf5f5f5)
GuiCtrlSetCursor($Edit1,2)
GuiCtrlCreateLabel("Домен или IP", 42, 257, 112, 20)
GuiCtrlCreateLabel("Кол-во запросов", 141, 257, 90, 20)
$Quant = GUICtrlCreateInput("5", 140, 279, 90, 20)
$Host = GUICtrlCreateInput("www.ru", 26, 279, 112, 20)
$Button_1 = GUICtrlCreateButton("Пинг", 240, 257, 105, 43)
;------------------------------------------------
$a2 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
$cmdRun = Run(@ComSpec & " /c ECHO " & $a2, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$a1 = StdoutRead($cmdRun, -1)
;------------------------------------------------
GUISetState(@SW_SHOW)
; GUI BUTTON PROCESSING
Do
$msgP = GUIGetMsg()
Select
Case $msgP = $Button_1
$ip = GUICtrlRead($Host)
$Quantity = GUICtrlRead($Quant)
$PingI = Run(@ComSpec & " /c ping.exe -n " & $Quantity & " " & $ip, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$aa = StdoutRead($PingI, -1)
If @error = -1 Then ExitLoop
;-------------------------------------
For $i = 1 To StringLen($aa)
$k = StringInStr($a1, StringMid($aa, $i, 1))
If $k>0 Then $aa = StringReplace($aa, $i, StringMid($a2, $k, 1))
Next
;-------------------------------------
GUICtrlSetData($Edit1, StringStripWS($aa, 1) & @crlf, 1)
Wend
EndSelect
Until $msgP = $GUI_EVENT_CLOSE
Еслиб кто ещё прикрутил сюда кнопку стоп, а то я не додумался как выслать Control-C и главное куда.
Кто-то может мне помочь со следующей задачей:
Нужно запустить прогрессБар, и чтобы он автоматом закрылся, в тот момент как завершит свою работу определённый запущенный процесс в системе (а точнее запущеный скрипт *.bat файла) - и если возможно, то чтобы в окне прогресс бара, была видна бегущая надпись, с текстом который я выберу. (если нет, то хотябы поместить этот текст обычно, как в MsgBox).
Возможно таке осуществить?
Есть ещё вопрос:
При запуске диалога для выбора файла, возвращается значение в переменную $var (что-то в этом роде):
$var = FileOpenDialog("Выбирите архив...", "", "Zip (*.zip)")
Но когда я пытаюсь записать результат в файл:
FileWrite("c.tmp", $var)
То файл (c.tmp) сохраняется в том каталоге, где и был выбран архив.
Следовательно вопрос: Как мне осуществить сохранение файла (c.tmp), в текущем каталоге? т.е в том каталоге где и находится сам скрипт. Но чтобы ненужно было указывать полный путь, так как запускаться скрипт будет постоянно с разных мест.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.