Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: asdfzxcv
Дата сообщения: 07.07.2008 10:09
Спасибо неимоверное не думал что это возможно,
If Int($aParse[9]) - вот это интересно!!! я в уме не мог подумать что в переменной как-то можно указать паттерн прохода (в данном случа 9 считая с 0 получается как раз 10).
Вижу что всё работает прекрасно сикунд за 20 перемолотил 100 мегобайтный файл а вот умом не мойму $aParse[9] как это работает)
респект Maza Faka & XpycTMD
Автор: Maza Faka
Дата сообщения: 07.07.2008 11:18
asdfzxcv
Привет!

Цитата:
If Int($aParse[9]) - вот это интересно!!! я в уме не мог подумать что в переменной как-то можно указать паттерн прохода (в данном случа 9 считая с 0 получается как раз 10).

Не совсем так, в этой функции
Код: $aParse = StringRegExp($ReadLine, "([0-9a-zA-Z]*,\s*)", 3)
Автор: ViSiToR
Дата сообщения: 07.07.2008 11:48
Maza Faka 12:18 07-07-2008
Цитата:
было бы неплохо добавить проверку на размерность массива

Тогда в этом случае нет необходимости проверять If @error....
А ещё лучше, вообще без массива это сделать:


Код: $hFileRead = FileOpen(@ScriptDir & "\test.log", 0) ;открываем лог-файл из которого нужно выбрать строки
If $hFileRead = -1 Then Exit

$hFileWrite = FileOpen(@ScriptDir & "\result.log", 2) ;открываем лог-файл в который будем сохранять выбранные строки

While 1
$sReadLine = FileReadLine($hFileRead)
If @error = -1 Then Exit

$sParse = StringRegExpReplace($sReadLine, ".*, (.*),.*$", "\1")
If Int($sParse) > 10 Then FileWriteLine($hFileWrite, $sReadLine)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)
Автор: Maza Faka
Дата сообщения: 07.07.2008 12:45
ViSiToR

Цитата:
А ещё лучше, вообще без массива это сделать:

Да, ты прав, просто у меня никак не получалось пропарсить строку с помощью StringRegExpReplace()
Автор: asdfzxcv
Дата сообщения: 08.07.2008 10:06
у меня проц 2400 пенёк
Смотрите как интересно получается:

While 1
$ReadLine = FileReadLine($hFileRead)
If @error = -1 Then Exit

(Получается в данном месте когда тектовый файл лог подходит к концу цикл делает выход. Я подумал, а как же его направить в конец алгоритма, что бы он закрыл файлы FileClose($hFileRead) FileClose($hFileWrite) ).

$aParse = StringRegExp($ReadLine, "(\s[0-9]*,)", 3)
    If @error Then ContinueLoop
If Int($aParse[2]) > 10000 Then FileWriteLine($hFileWrite, $ReadLine)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)

Не критично конечно, интересно просто стало когда в конец листинга хотел добавить сообщение о том что скрипт выполнен понял что он до туда не доходит.

А ещё вопрос, я в начало кода скрипта вставил такую комманду
Run(@ComSpec & " /c " & 'copy *.log all.log')
Она собирает все лог файлы в один большой, но она не успевает дойти до конца как общий код начинает уже разбирать конечный лог файл, я вставил комманду ProcessWaitClose("cmd.exe") тогда он ждёт завершения а затем продолжает основной алгоритм выборки. У этого способа есть существенный недостаток, если запущенна ещё одна cmd то выполнятся код дальше не будет.
Как можно сделать по другому?
Автор: Amoraller
Дата сообщения: 08.07.2008 10:12
НА счёт закрытия файла, писать не
If @error = -1 Then Exit , а
If @error = -1 Then Exitloop,
тогда прога будет быходить из цикла и закрываать оба файла,
А на счёт процесса, делать это не через cmd, а по средством Автоита, после закрытия файла. Или же отлавливать PID процесса....

$process=Run(@ComSpec & " /c " & 'copy *.log all.log')
...
...
ProcessWaitClose ( $process)
Автор: Maza Faka
Дата сообщения: 08.07.2008 10:28
asdfzxcv

Цитата:
интересно просто стало когда в конец листинга хотел добавить сообщение о том что скрипт выполнен понял что он до туда не доходит.

Как ответил Amoraller вместо If @error = -1 Then Exit нужно вcтавить If @error = -1 Then Exitloop и перед закрытием файла вставить

Код:
FileWriteLine($hFileWrite, "Script done successful")
Автор: Loopback
Дата сообщения: 08.07.2008 10:39

Цитата:
(Получается в данном месте когда тектовый файл лог подходит к концу цикл делает выход. Я подумал, а как же его направить в конец алгоритма, что бы он закрыл файлы FileClose($hFileRead) FileClose($hFileWrite) ) и в место exit поставил exitloop всё вроде стало ок. Правильно ли я сделал?

Всё правильно. Как вариант, еще можно воспользоваться специальной функцией OnAutoitExit() и закрывающие функции поместить в нее.

Код: Func OnAutoitExit()
FileClose($hFileRead)
FileClose($hFileWrite)
EndFunc
Автор: asdfzxcv
Дата сообщения: 08.07.2008 12:02
супер, всё получилось, как я сам про runwite не вспомнил, читал же.
Автор: zero1632
Дата сообщения: 08.07.2008 23:46
Подскажите, как сделать корректнее правку 6 байт после установки нужного приложения, для лечения его от жадности. Читать весь файл побайтно и писать другой файл, а вместьо вместо него нужные байты - это единственное решение?
Автор: ViSiToR
Дата сообщения: 08.07.2008 23:53
zero1632 00:46 09-07-2008
Цитата:
для лечения его от жадности

Я так понял планируется сделать кряк? Тогда ты не туда попал, тем более что AutoIt тут не самое подходящее средство
Автор: timsky
Дата сообщения: 09.07.2008 01:25
zero1632
CodeFusion тебе в помошь. Мега-тулза
Автор: timsky
Дата сообщения: 09.07.2008 05:12
Накатал свой первый скрипт:

Цитата:
Run("app.exe")

Do
    Sleep (1000)
    $r = WinExists ("Application", "")
Until $r =0

Do
    $k = WinExists ("Application v.1.1", "")
    $i = WinExists ("Updates", "")
    If $i > 0 Then
    WinActivate ("Updates", "")
    ControlEnable ("Updates", "", "TTBYButton2")
    EndIf
    Sleep (1000)
Until $k = 0

По идее должен запускаться ЕХЕ, после чего прога ждет окна с заголовком Updates, в котором нужно активировать кнопку до тех пор, пока окно с заголовком Application v.1.1 не будет закрыто. Лоадер короче говоря.

Все работает до момента ожидания окна Updates. Вот тут что-то не то. Кнопка не активируется, хотя если закрыть приложение, то Лоадер тоже закрывается, значит второй цикл Do срабатывает. Пробовал заменить вложеный в него If на While, чего только не перепробовал - не помогает.
Первая версия лоадера, которая просто запускает прогу и ждет появления окна Updates работает прекрасно:


Цитата:
    Run("app.exe")
While 1

$i = WinExists ("Updates", "")
    If $i > 0 Then
    WinActivate ("Updates", "")
    ControlEnable ( "Updates", "", "TTBYButton2")
    EndIf
    Sleep (1000)
WEnd

Почему? Хочется чтобы при закрытии аппликухи лоадер отрубался тоже
Автор: ViSiToR
Дата сообщения: 09.07.2008 06:37
timsky 06:12 09-07-2008
Цитата:
должен запускаться ЕХЕ, после чего прога ждет окна с заголовком Updates, в котором нужно активировать кнопку до тех пор, пока окно с заголовком Application v.1.1 не будет закрыто.


Так будет проще:


Код: Run("app.exe")

WinWaitClose("Application") ;Это вместо первого цикла

;Пока существует окно с заголовком "Application v.1.1", проверяем в цикле существование другого окна, с заголовком "Updates".

While WinExists("Application v.1.1")

;Если существует, активируем его, ждём активирования, и дисейблим кнопку с классом TTBYButton2
If WinExists("Updates") Then
WinActivate("Updates")
WinWaitActive("Updates")
ControlEnable("Updates", "", "TTBYButton2")
EndIf

Sleep(1000)
WEnd
Автор: Maza Faka
Дата сообщения: 09.07.2008 06:57
timsky
Попробуй так:

Код: Run("app.exe")

WinWait("Application")
WinWait("Updates")

While 1
If Not WinExists("Application v.1.1") Then ExitLoop

If
WinExists("Updates") Then
WinActivate("Updates")
ControlEnable ("Updates", "", "TTBYButton2")
EndIf

Sleep(1000)
WEnd
Автор: timsky
Дата сообщения: 09.07.2008 16:56
ViSiToR
Не работает тоже. Странно, но все кроме активации кнопки работает, хотя если это делать не вложенным циклом, то все ок...

Maza Faka
Сработало!

Всем огроменное спасибо!!!
Автор: arr1val
Дата сообщения: 09.07.2008 18:33
Есть такой кодик, функция у него: поиск и перемещение/копирование нужной информации

Код:
#include <GuiConstants.au3>
#include <Math.au3>

$n=37
$j=$n-1
dim $box[$n]
$font="Tahoma"
$main = GUICreate("Название",350,550,-1,-1, $WS_POPUPWINDOW,$WS_EX_DLGMODALFRAME)
GUISetBkColor (0xFFFFFF)

If FileExists(@ScriptDir & "\vip.ini") then
$IP = IniReadSection (@ScriptDir & "\vip.ini", "IP")
$DIR = IniReadSection (@ScriptDir & "\vip.ini", "DIR")
EndIf

func mm($a, $b)


Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "\<CashProject \<Winnt \<шаблон \<Program">nul && MkDir "%i" "U:\"' & $b & '"\Removed\%~pi"', '', @SW_HIDE)

Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "exe\>">nul && move "%i" "U:\"' & $b & '"\Removed\%~pnxi"', '', @SW_HIDE)


EndFunc




GUICtrlCreateLabel ("Название", 115,20,150,30)
GUICtrlSetFont (-1,16, 550, -1, $font)

$but_2 = GUICtrlCreateButton ("Выход", 225, 500, 100, 20, $BS_DEFPUSHBUTTON)
$but_1 = GUICtrlCreateButton ("Move it", 20, 500, 100, 20, $BS_DEFPUSHBUTTON)
$but_3 = GUICtrlCreateButton ("Copy it", 122, 500, 100, 20, $BS_DEFPUSHBUTTON)
$but_4 = GUICtrlCreateButton ("Check All", 122, 450, 100, 20, $BS_DEFPUSHBUTTON)


GUICtrlCreateLabel ('',100,540,240,1,BitOr($SS_SIMPLE,$SS_SUNKEN))
GUICtrlCreateLabel ("© Все права защищены.", 10,535,150)
GUICtrlSetState(-1,$GUI_DISABLE)
GUICtrlSetFont (-1,6, 550, -1, $font)


GuiCtrlCreateTab(10, 65, 325, 465)

GuiCtrlCreateTabItem("Списочег")


GUICtrlCreateGroup ("", 15, 85, 315, 325)
$treeTwo = GuiCtrlCreateTreeView(20, 100, 300, 300, $TVS_CHECKBOXES)
GUICtrlSetFont (-1,8, 550, -1, $font)
$box[1] = GuiCtrlCreateTreeViewItem("1", $treeTwo)
$box[31] = GuiCtrlCreateTreeViewItem("31", $treeTwo)
$box[2] = GuiCtrlCreateTreeViewItem("2", $treeTwo)
$box[3] = GuiCtrlCreateTreeViewItem("3", $treeTwo)
$box[4] = GuiCtrlCreateTreeViewItem("4", $treeTwo)
$box[5] = GuiCtrlCreateTreeViewItem("5", $treeTwo)
$box[6] = GuiCtrlCreateTreeViewItem("6", $treeTwo)
$box[7] = GuiCtrlCreateTreeViewItem("7", $treeTwo)
$box[8] = GuiCtrlCreateTreeViewItem("8", $treeTwo)
$box[9] = GuiCtrlCreateTreeViewItem("9", $treeTwo)
$box[10] = GuiCtrlCreateTreeViewItem("10", $treeTwo)
$box[11] = GuiCtrlCreateTreeViewItem("11", $treeTwo)
$box[12] = GuiCtrlCreateTreeViewItem("12", $treeTwo)
$box[13] = GuiCtrlCreateTreeViewItem("13", $treeTwo)
$box[14] = GuiCtrlCreateTreeViewItem("14", $treeTwo)
$box[15] = GuiCtrlCreateTreeViewItem("15", $treeTwo)
$box[16] = GuiCtrlCreateTreeViewItem("16", $treeTwo)
$box[17] = GuiCtrlCreateTreeViewItem("17", $treeTwo)
$box[18] = GuiCtrlCreateTreeViewItem("18", $treeTwo)
$box[19] = GuiCtrlCreateTreeViewItem("19", $treeTwo)
$box[20] = GuiCtrlCreateTreeViewItem("20", $treeTwo)
$box[21] = GuiCtrlCreateTreeViewItem("21", $treeTwo)
$box[22] = GuiCtrlCreateTreeViewItem("22", $treeTwo)
$box[23] = GuiCtrlCreateTreeViewItem("23", $treeTwo)
$box[24] = GuiCtrlCreateTreeViewItem("24", $treeTwo)
$box[25] = GuiCtrlCreateTreeViewItem("25", $treeTwo)
$box[26] = GuiCtrlCreateTreeViewItem("26", $treeTwo)
$box[27] = GuiCtrlCreateTreeViewItem("27", $treeTwo)
$box[28] = GuiCtrlCreateTreeViewItem("28", $treeTwo)
$box[29] = GuiCtrlCreateTreeViewItem("29", $treeTwo)
$box[30] = GuiCtrlCreateTreeViewItem("30", $treeTwo)



GuiCtrlCreateTabItem("Списочег2")

GUICtrlCreateGroup ("", 15, 85, 315, 325)
$treeTwo = GuiCtrlCreateTreeView(20, 100, 300, 300, $TVS_CHECKBOXES)
GUICtrlSetFont (-1,8, 550, -1, $font)
$box[32] = GuiCtrlCreateTreeViewItem("32", $treeTwo)
$box[33] = GuiCtrlCreateTreeViewItem("33", $treeTwo)
$box[34] = GuiCtrlCreateTreeViewItem("34", $treeTwo)
$box[35] = GuiCtrlCreateTreeViewItem("35", $treeTwo)
$box[36] = GuiCtrlCreateTreeViewItem("36", $treeTwo)


GuiCtrlCreateTabItem("")

GUISetState()

func ins($i)
for $e = 1 to $j
if $i = $e then

mm($IP[$i][1], $DIR[$i][1])

EndIf
next


EndFunc

;func ins2($i)


;EndFunc

While 1
$msg = GUIGetMsg()

If $msg = $but_1 Then
For $i=1 to $j
If GUICtrlRead($box[$i]) = 4 or GUICtrlRead($box[$i]) = 260 Then
Else
ins($i)
EndIf
next
EndIf


If $msg = $but_3 Then
For $i=1 to $j
If GUICtrlRead($box[$i]) = 4 or GUICtrlRead($box[$i]) = 260 Then
Else
ins2($i)
EndIf
next
EndIf




If $msg = $but_2 Then
ExitLoop
EndIf

If $msg = $but_4 Then
For $i = 1 to $j
GUICtrlSetState ( $box[$i], $GUI_CHECKED)
Next
EndIf

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
Автор: timsky
Дата сообщения: 10.07.2008 02:55
Может кто-нибудь накидать скриптик, который будет в hosts (c:\WINDOWS\system32\drivers\etc\hosts) добавлять перенос строки, а затем вставлять нужную мне строку типа: 127.0.0.1 site.com
Плиз.
Мне сейчас как раз нужно научиться работать с текстом в файлах.. будет наглядный пример
Автор: Maza Faka
Дата сообщения: 10.07.2008 08:04
arr1val

Цитата:
не могу догнать, как сделать так, чтобы под "1" "2" и т.д. можно было подбивать несколько ипов и соответственно путей копирования. Отметил я допустим бокс 1, а за ним висит не один путь, а 5 к примеру....

Непонятно, что именно тебе нужно. Давай пример покороче и вопрос поподробней.

timsky

Цитата:
добавлять перенос строки, а затем вставлять нужную мне строку


Код:
FileWriteLine("c:\hosts", @CRLF & "127.0.0.1 site.com")
Автор: XpycTMD
Дата сообщения: 10.07.2008 08:50
Есть скрипт:

Код: #include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Dim $Label[6], $hLine[6]

$Form1 = GUICreate("Form1", 633, 454, 507, 183, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))

$vLine = GUICtrlCreateGraphic(155, 75, 1, 195)
GUICtrlSetBkColor(-1, 0x000000)

Local $LabelTop = 95, $hLineTop = 120

For $i = 1 To 5
$Label[$i] = GUICtrlCreateLabel("Label1", 20, $LabelTop, 131, 20, $WS_BORDER)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKHEIGHT)

$hLine[$i] = GUICtrlCreateGraphic(6, $hLineTop, 300, 1)
GUICtrlSetBkColor(-1, 0x000000)

$LabelTop += 30
$hLineTop += 30
Next

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: arr1val
Дата сообщения: 10.07.2008 10:03
Maza Faka
Сделал указанную выше менюшку. Которая выполняет операцию по перемещению файлов, а потом понял что получается очень много пунктов по той системе как я сделал. Вот и хочу узнать можно ли как то несколько заданных в инишнике переменных "подстроить" под один чекбокс. Т.е. вкратце, сейчас получается один чекбокс = одна подставляемая переменная, а хочу 1 чекбокс = несколько подставляемых переменных.
Автор: Maza Faka
Дата сообщения: 10.07.2008 10:43
XpycTMD
А что мешает использовать Label вместо Graphic?

Код: #include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

;Opt("GUIResizeMode", 1)

Dim $Label[6], $hLine[6]

$Form1 = GUICreate("Form1", 633, 454, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, _
$WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, _
$WS_CLIPSIBLINGS, $WS_SIZEBOX))

$vLine = GUICtrlCreateLabel("", 155, 75, 1, 195)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlSetResizing(-1, BitOR($GUI_DOCKAUTO, $GUI_DOCKTOP, $GUI_DOCKHEIGHT))

Local $LabelTop = 95, $hLineTop = 120

For $i = 1 To 5
$Label[$i] = GUICtrlCreateLabel("Label1", 20, $LabelTop, 131, 20, $WS_BORDER)
GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT))

$hLine[$i] = GUICtrlCreateGraphic(6, $hLineTop, 300, 1)
GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT))
GUICtrlSetBkColor(-1, 0x000000)

$LabelTop += 30
$hLineTop += 30
Next

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: timsky
Дата сообщения: 10.07.2008 11:54
Maza Faka
Спасибо работает
Что-то я с просонья не до конца сформулировал вопрос... но замутил откат уже сам
Автор: arr1val
Дата сообщения: 10.07.2008 12:36
Maza Faka
Пользователь я и есть, для себя делаю. А есть еще вариант, без инпута ?
Автор: XpycTMD
Дата сообщения: 10.07.2008 12:51
Maza Faka
Как то не додумался Спасибо за подсказку
Но щас линия сдвигается долековато, а мне надо что бы он была рядом с Label
Автор: arr1val
Дата сообщения: 10.07.2008 13:01
Maza Faka
Че то совсем заспамился ) Попробую вопрос покороче задать:
Как сделать так, чтобы значения из инишника пронумерованные допустим 1.1,1.2 и т.д. подставлялись по очередно в функцию при отмеченном чекбоксе "1", 2.1,2.2 соответственно при чекбоксе "2" ?
Автор: Maza Faka
Дата сообщения: 10.07.2008 14:06
XpycTMD

Цитата:
Но щас линия сдвигается долековато, а мне надо что бы он была рядом с Label

Тогда регистрируй CallBack функцию WM_SIZE и "двигай" контрол по событию.

arr1val

Цитата:
Как сделать так, чтобы значения из инишника пронумерованные допустим 1.1,1.2 и т.д. подставлялись по очередно в функцию при отмеченном чекбоксе "1", 2.1,2.2 соответственно при чекбоксе "2" ?

Да зачем тебе чекбоксы нужны? Сделай без них, отслеживай нажатие кнопки "Copy it", вызывай функцию в которой будешь парсить строку из input-control и копируй.
Автор: arr1val
Дата сообщения: 10.07.2008 15:29
Maza Faka
Чекбоксы нужны потому, что есть порядка 50 обьектов, за каждым из них 3-7 айпишников. Если делать по твоему методу, то мне прийдется помнить их названия или номера, правильно же я понимаю ?
Автор: XpycTMD
Дата сообщения: 10.07.2008 16:38
Maza Faka 15:06 10-07-2008
Цитата:
Тогда регистрируй CallBack функцию WM_SIZE и "двигай" контрол по событию.

а не подскажеш как это сделать, а тоя не очень в это разбираюсь
Автор: arr1val
Дата сообщения: 10.07.2008 16:54
Maza Faka
"...либо задавать список компьютеров через запятую (1,2,3 и т.д.). А затем обрабатывать эти строки соответсвующими функциями (StringRegExp; StringSplit и т.д.)"

Не мог ли поподробнее обьяснить, допустим, как мне подставлять значения масиву разделяя их к примеру знаком | ?

Т.е. имеем такую штуковину:

Код: func mm($a, $b)

Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "exe\>">nul && copy "%i" "U:\"' & $b & '"\Removed\%~pnxi"', '', @SW_HIDE)

EndFunc

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.