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

» AutoIT

Автор: ViSiToR
Дата сообщения: 18.12.2006 00:18
Denis_Kokyev


Цитата:
как это в AutoIt прикрутить

Попробуй так (переменной $SID по идее должно присвоится значение из переменной %%a в ком. строке) :


Код: $SID = RunWait(@ComSpec & ' /c for /f "usebackq tokens=*" %%a in (`"psgetsid | find "S-""`) do exit %%a', '', @SW_HIDE)
Автор: Denis_Kokyev
Дата сообщения: 18.12.2006 01:22
ViSiToR
Да я так пробовал - но резульат = 1. То ли первая цифра, то ли что то
ещё...
Добавлено:
Подредактировал скрипт, в соответствии с полученными последними знаниями
Автор: mikar
Дата сообщения: 21.12.2006 07:08
AutoIt 3.2.2.0 RC2 beta

Цитата:
Latest Changes:
- Added: StringRegExp() and StringRegExpReplace() regular expression support (Perl compatible)
- Added: Regular expression support for Window title matching
- Added: ShellExecute() and ShellExecuteWait() functions
- Added: #RequireAdmin for UAC/Windows Vista
- Added: Windows vista help file entry
- Added: GuiCtrlSetState() $GUI_DROPNOTACCEPTED
Автор: RVM_aka_Vasil
Дата сообщения: 22.12.2006 09:45
ViSiToR

Отвечаю по порядку. Поскольку заголовки у всех окон разные, я так понимаю ControlClick работать не будет. Морровинд запускается в двух режимах - оконном и полноэкранном. MouseClick в игре не работает, мышь ведет себя хаотично (я об этом уже писал на странице 2 этого топика).

И все-таки AutoIT с Морровиндом частично дружит. Вот такой скрипт, например, работает:

Opt("SendKeyDelay", 500)
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")
Send("{ENTER}")

Клавиша {ENTER} настроена на удар оружием. Но работает этот скрипт как-то нестабильно. То есть главный герой машет оружием не всегда с той периодичностью, которая в скрипте прописана. Иногда паузы до 2 секунд бывают. Да и количество взмахов иногда 5-10 ограничивается. Наверное, мощности компа не хватает...
Автор: ViSiToR
Дата сообщения: 22.12.2006 19:00
RVM_aka_Vasil

Цитата:
заголовки у всех окон разные

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


Код: Opt("WinTitleMatchMode", 4)
Автор: RVM_aka_Vasil
Дата сообщения: 23.12.2006 10:14
ViSiToR

Заголовки окон по имени персонажей, с которыми общается ГГ. То есть АБСОЛЮТНО разные.
Автор: MrCyclik
Дата сообщения: 01.02.2007 19:51
Возвращаясь к вопросу об оболочке.
Я написал простенькую. Прошу не судить строго. Я, правда, позаимствовал кусочек кода у LEX1 для загрузки Мерлина. Познаний работы с форумом нет (как поместить rar не знаю), поэтому вставляю куски так...
"Маленькое" пояснение:
Можно разнести программы по разным вкладкам, для удобства, т.к. в куче можно что-то и не поставить. Оболочка предусматривает растановку галочек по умолчанию.
Иногда скрипт написан и добавлен в файлы оболочки, но его забыли скомпилировать (каюсь, грешен). Тогда вылетит сообщение при запуске оболочки об отсутствии exe'шников (лучше оболочку запускать до ее записи на диск ), но checkbox'ы все равно будут... А при инсталяции отсутствующие exe-файлы будут проигнорированы...
Принято как умолчание:
1 - название файлов установщиков - "Setup.exe"; должен существовать
2 - файл подсказки - "~.txt"; может существовать
3 - файл "Default.ini" отвечает за установку приоритета установки программ, чем ближе запись (относительный или абсольтный путь до setup.exe) к началу файла, тем раньше программа установится. Так же он отвечает, устанавливать ли программу по умолчанию или нет ("true" - после запуска оболочки на соответствующем checkbox'е будет стоять галочка, что либо иное - нет)
4 - файл "Panels.ini" отвечает за вкладки и их содержимое.
ВНИМАНИЕ:
1 - все записи из "Default.ini" должны быть в файле "Panels.ini" и наоборот. Это определяет наличие всех checkbox'ов и их правильную расстановку, а следовательно и установленные приложения
2 - оболочка не устанавливает программы. Она лишь запускает файлы setup.exe, которые собственно и производят установку
3 - оболочка ждет завершения работы предыдущего exe'шника и лишь потом запускает следующий. Если exe'шник "завис" по какой-либо причине, то его надо завершить вручную. Поэтому проверьте каждый скрипт на "зависание" на чистой и "свежей" операционке (VMware Workstation рулит
4 - некоторые программы при запуске иногда меняют свои заголовки. Например, "Nero 7 - мастер установки" вместо "Nero 7 Ultra Edition - мастер установки"
5 - содержимое файла "Settings.ini" посмотрите сами, там все описано.
Данная оболочка облегчит жизнь пользователю, который переставляет или ставит OS не только себе, но и другим (как эти другие иногда задалбливают ).
P.S. Благодаря приоритету установки программ можно расставить ярлыки в нужном порядке


[more=Сама оболочка]
#include <Array.au3>
#include <GUIConstants.au3>
#include <file.au3>

AutoItSetOption("TrayIconHide", 1); Скрытие иконки в трее
$Title = "Инсталлятор-р-р"; Надпись на форме

Dim $Ins[1], $Def[1], $Pan[1], $Check[1], $Count[1];
Dim $CheckCount, $CheckHeight, $CheckWidth, $CheckCheckWidth, $CheckCheckHeight, $CheckTabHeight, $CheckTabWidth, $TabFormWidth, $TabFormHeight;
OpenDefault($Ins, $Def, 'Default.ini'); Открытие файла устанавливать ли по умолчанию (программы устанавливаются по порядку сверху-вниз)
OpenPanels($Pan, $Check, $Count, "Panels.ini"); Открытие файла вкладок (список вкладок и программ на них)
OpenSettings($CheckCount, $CheckHeight, $CheckWidth, $CheckCheckWidth, $CheckCheckHeight, $CheckTabHeight, $CheckTabWidth, $TabFormHeight, $TabFormWidth, "Settings.ini"); Открытие файла расстояния элементов на форме
Dim $Panels[1], $CheckBox[1];
$n=GetMaxCheck($Count, $CheckCount); Количество checkbox'ов по вертикали

$TabWidth=$CheckCheckWidth*($CheckCount-1)+$CheckWidth*$CheckCount+$CheckTabWidth*2; Ширина панели
$TabHeight=$CheckCheckHeight*($n-1)+$CheckTabHeight*2+$n*$CheckHeight; Высота панели
Select ; Получаем размер панели для checkbox'ов
    Case $CheckCount=1
        $h=4*($CheckCheckHeight+2*$CheckHeight);
    Case $CheckCount=2
        $h=2*($CheckCheckHeight+2*$CheckHeight);
    Case $CheckCount=3
        $h=2*($CheckCheckHeight+2*$CheckHeight);
    Case $CheckCount>3
        $h=1*($CheckCheckHeight+2*$CheckHeight);
EndSelect;
$FormHeight=$TabHeight+$TabFormHeight*2+$h; Высота формы
$FormWidth=$TabWidth+$TabFormWidth*2; Ширина формы

GUICreate($Title, $FormWidth, $FormHeight); Создание формы

GUICtrlCreateTab($TabFormWidth, $TabFormHeight, $TabWidth, $TabHeight); Создание панели
For $i=1 To UBound($Pan)-1
    _ArrayAdd($Panels, GUICtrlCreateTabItem($Pan[$i])); Создание вкладок
    For $j=$Count[$i] To $Count[$i+1]-1
        $h=Div($j-$Count[$i], $CheckCount);
        $h=$TabFormHeight+$CheckTabHeight+$h*($CheckCheckHeight+$CheckHeight)+10;
        $w=Mod($j-$Count[$i], $CheckCount);
        $w=$TabFormWidth+$CheckTabWidth+$w*($CheckCheckWidth+$CheckWidth);
        _ArrayAdd($CheckBox, GUICtrlCreateCheckbox(GetFolder($Check[$j]), $w, $h, $CheckWidth, $CheckHeight));
        $str=StringFormat("%s%s%s%s", @ScriptDir, "\", $Check[$j], "\~.txt");
        If FileExists($str) Then
            $str=Load($str); Загрузка описания
            GUICtrlSetTip($CheckBox[$j], $str); Добавление описания
        EndIf;
    Next;
Next;
GUICtrlCreateTabitem (""); Завершение создания вкладок

$left=$TabFormWidth+$CheckTabWidth; Определение левой границы первой кнопки
$top=$TabHeight+$TabFormHeight+$CheckCheckHeight; Определение верхней границы певой кнопки
Select ; Создание кнопок
    Case $CheckCount=1
        $left=$TabFormWidth+$CheckTabWidth;
        $SelAll=GUICtrlCreateButton("Выделить все", $left, $top, $CheckWidth, 2*$CheckHeight);
        $SelNone=GUICtrlCreateButton("Выделить ничего", $left, $top+2*$CheckHeight+$CheckCheckHeight, $CheckWidth, 2*$CheckHeight);
        $Default=GUICtrlCreateButton("По умолчанию", $left, $top+2*(2*$CheckHeight+$CheckCheckHeight), $CheckWidth, 2*$CheckHeight);
        $Install=GUICtrlCreateButton("Установить", $left, $top+3*(2*$CheckHeight+$CheckCheckHeight), $CheckWidth, 2*$CheckHeight);
    Case $CheckCount=2
        $left=$TabFormWidth+$CheckTabWidth;
        $SelAll=GUICtrlCreateButton("Выделить все", $left, $top, $CheckWidth, 2*$CheckHeight);
        $SelNone=GUICtrlCreateButton("Выделить ничего", $left+$CheckCheckWidth+$CheckWidth, $top, $CheckWidth, 2*$CheckHeight);        
        $Default=GUICtrlCreateButton("По умолчанию", $left, $top+2*$CheckHeight+$CheckCheckHeight, $CheckWidth, 2*$CheckHeight);
        $Install=GUICtrlCreateButton("Установить", $left+$CheckCheckWidth+$CheckWidth, $top+2*$CheckHeight+$CheckCheckHeight, $CheckWidth, 2*$CheckHeight);
    Case $CheckCount=3
        $left=$TabFormWidth+$CheckTabWidth;
        $SelAll=GUICtrlCreateButton("Выделить все", $left, $top, $CheckWidth, 2*$CheckHeight);
        $SelNone=GUICtrlCreateButton("Выделить ничего", $left+$CheckCheckWidth+$CheckWidth, $top, $CheckWidth, 2*$CheckHeight);        
        $Default=GUICtrlCreateButton("По умолчанию", $left+2*($CheckCheckWidth+$CheckWidth), $top, $CheckWidth, 2*$CheckHeight);
        $Install=GUICtrlCreateButton("Установить", $left+$CheckCheckWidth+$CheckWidth, $top+2*$CheckHeight+$CheckCheckHeight, $CheckWidth, 2*$CheckHeight);
    Case $CheckCount>3
        $SelAll=GUICtrlCreateButton("Выделить все", $FormWidth-($left+$CheckWidth+3*($CheckCheckWidth+$CheckWidth)), $top, $CheckWidth, 2*$CheckHeight);
        $SelNone=GUICtrlCreateButton("Выделить ничего", $FormWidth-($left+$CheckWidth+2*($CheckCheckWidth+$CheckWidth)), $top, $CheckWidth, 2*$CheckHeight);        
        $Default=GUICtrlCreateButton("По умолчанию", $FormWidth-($left+$CheckWidth+$CheckCheckWidth+$CheckWidth), $top, $CheckWidth, 2*$CheckHeight);
        $Install=GUICtrlCreateButton("Установить", $FormWidth-($left+$CheckWidth), $top, $CheckWidth, 2*$CheckHeight);
EndSelect;
    
GUISetState (@SW_SHOW); Показываем форму
SetDef($Check, $Ins, $Def, $CheckBox); Расставляем галочки

Dim $figure = "merlin", $Char, $AgentControl;
LoadChar($figure, $Char, $AgentControl);
$Char.MoveTo(900,615);
$Char.Show;
$Char.Play("Greet");
$Char.Speak("Здраствуйте.");
$Char.Play("RestPose");
$Char.Speak("Вы запустили " & $Title & ". ");
$Char.Speak("Выберите устанавливаемые программы. ");
$Char.Speak("Нажмите Установить и подождите окончания установки программ.");
$Char.Speak("Я исчезну, когда установка закончится.");

$DoInstall=0;
Dim $ms[UBound($CheckBox)];
Do; Обработка событий нажатий на кнопки
$msg = GUIGetMsg();
    Select
        Case $msg=$SelAll
            For $i=1 to UBound($CheckBox)-1
                GUICtrlSetState($CheckBox[$i],$GUI_CHECKED);
            Next
        Case $msg=$SelNone
            For $i=1 to UBound($CheckBox)-1
                GUICtrlSetState($CheckBox[$i],$GUI_UNCHECKED);
            Next
        Case $msg=$Default
            SetDef($Check, $Ins, $Def, $CheckBox);
        Case $msg=$Install
            $msg = $GUI_EVENT_CLOSE;
            $DoInstall=1;
            For $i=1 to UBound($CheckBox)-1
                $ms[$i]=GUICtrlRead($CheckBox[$i]);
            Next;
    EndSelect;
Until $msg = $GUI_EVENT_CLOSE;

GUISetState(@SW_HIDE); Скрываем форму
If $DoInstall=1 Then; Собственно сама установка
    For $i=1 To UBound($CheckBox)-1
        For $j=1 To UBound($CheckBox)-1
            If ($Ins[$i]=$Check[$j]) And ($ms[$j]=1) Then
                ;$Char.Speak("Началась установка " & GetFolder($Ins));
                if FileExists($Check[$j] & "\setup.exe") Then RunWait($Check[$j] & "\setup.exe");
            EndIf;
        Next;
    Next;
EndIf;

UnLoadChar($figure, $Char, $AgentControl); Выгрузка помощника

Exit

Func OpenDefault(ByRef $Ins, ByRef $Def, $str);
    $msg="";
    $n=_FileCountLines($str);
    $f=FileOpen($str,0);
    For $i=1 To $n/2
        $a=FileReadLine($f, 2*$i-1);
        If Not FileExists($a & "\setup.exe") Then $msg=$msg & "Not found: " & $a & @CRLF;
        $b=FileReadLine($f, 2*$i);
        _ArrayAdd($Ins, $a);
        _ArrayAdd($Def, $b);
    Next;
    FileClose($f);
    If StringLen($msg)>0 Then MsgBox(16, "Error!", $msg);
EndFunc;

Func OpenPanels(ByRef $Pan, ByRef $Check, ByRef $Count, $str);
    $Count[0]=0;
    $n=_FileCountLines($str);
    $f=FileOpen($str, 0);
    For $i=1 To $n
        $a=FileReadLine($f, $i);
        $j=StringInStr($a, ";");
        If $j=1 Then
            _ArrayAdd($Pan, StringRight($a,StringLen($a)-1));
            _ArrayAdd($Count, UBound($Check));
        Else
            _ArrayAdd($Check, $a);
        EndIf;
    Next;
    _ArrayAdd($Count, UBound($Check));
EndFunc;

Func GetHex($str, ByRef $name, ByRef $val);
    $i=StringInStr($str, "=");
    $name=StringLeft($str, $i-1);
    $val=StringRight($str, StringLen($str)-$i);
EndFunc;

Func OpenSettings(ByRef $CheckCount, ByRef $CheckHeight, ByRef $CheckWidth, ByRef $CheckCheckWidth, ByRef $CheckCheckHeight, ByRef $CheckTabHeight, ByRef $CheckTabWidth, ByRef $TabFormHeight, ByRef $TabFormWidth, $str);
    Dim $name, $val;
    $n=_FileCountLines($str);
    $f=FileOpen($str, 0);
    For $i=1 To $n
        $a=FileReadLine($f, $i);
        If (StringInStr($a, ";")=0) And (StringIsSpace($a)=0) Then
            GetHex($a, $name, $val);
            Select
                Case $name="CheckCount"
                    $CheckCount=$val;
                Case $name="CheckHeight"
                    $CheckHeight=$val;
                Case $name="CheckWidth"
                    $CheckWidth=$val;
                Case $name="CheckCheckWidth"
                    $CheckCheckWidth=$val;
                Case $name="CheckCheckHeight"
                    $CheckCheckHeight=$val;
                Case $name="CheckTabHeight"
                    $CheckTabHeight=$val;
                Case $name="CheckTabWidth"
                    $CheckTabWidth=$val;
                Case $name="TabForm"
                    $TabForm=$val;
                Case $name="TabFormHeight"
                    $TabFormHeight=$val;
                Case $name="TabFormWidth"
                    $TabFormWidth=$val;
                Case Else
                    Sleep(10);
            EndSelect;
        EndIf;
    Next;
EndFunc;

Func Load($str);
    $n=_FileCountLines($str);
    $f=FileOpen($str, 0);
    $b=FileReadLine($f, 1);
    For $i=2 To $n
        $b=StringFormat("%s%s%s", $b, @CRLF, FileReadLine($f, $i));
    Next;
    Return $b;
EndFunc;

Func Div($a, $b);
    Return ($a-Mod($a, $b))/$b;
EndFunc;

Func GetMaxCheck($Count, $CheckCount);
    $n=0;
    For $i=1 To UBound($Count)-1
        If $n<$Count[$i]-$Count[$i-1] Then
            $n=$Count[$i]-$Count[$i-1];
        EndIf;
    Next;
    If Mod($n, $CheckCount)=0 Then
        $n=Div($n, $CheckCount);
    Else
        $n=Div($n, $CheckCount)+1;
    EndIf;
    Return $n;
EndFunc;

Func GetDef($name, $Ins, $Def);
    For $i=1 To UBound($Ins)-1
        If StringInStr($name, $Ins[$i])<>0 Then
            Return $Def[$i];
        EndIf
    Next
EndFunc;

Func GetFolder($name);
    $n=StringInStr($name, "\");
    $str=StringRight($name, StringLen($name)-$n);
    While StringInStr($str, "\")<>0
        $n=StringInStr($str, "\");
        $str=StringRight($str, StringLen($str)-$n);
    WEnd;
    Return $str;
EndFunc;

Func SetDef($Check, $Ins, $Def, $CheckBox);
    For $i=1 To UBound($Check)-1
        If StringInStr(StringLower(GetDef($Check[$i], $Ins, $Def)),"true")<>0 Then
            GUICtrlSetState($CheckBox[$i],$GUI_CHECKED);
        EndIf;
    Next;
EndFunc;

Func LoadChar($figure, ByRef $Char, ByRef $AgentControl);
    Opt("ExpandEnvStrings", 1);
    $Path = "%WINDIR%\MSAGENT\CHARS\" & $figure & ".ACS";
    
    $AgentControl = ObjCreate("Agent.Control.1");
    $SinkObject=ObjEvent($AgentControl, "event_");
    If Isobj($AgentControl) Then $AgentControl.Connected = True;

    $AgentControl.Characters.Load($figure, $Path) ;
    $Char = $AgentControl.Characters($figure);
EndFunc;

Func UnLoadChar($figure, ByRef $Char, ByRef $AgentControl);
    ;$Char.Play("Exit");
    $Char.Play("Greet");
    ;$Char.Speak("Изволю откланяться.");
    $Char.Play("RestPose");
    Sleep(1500);
    $Char.Hide;
    $Char.StopAll;
    $AgentControl.Characters.Unload($figure);
EndFunc;
[/more]
    
[more=Файл Panels.ini]
;CD
CD\ReCD\Ahead Nero7
CD\ReCD\UltraISO 8.00.139
;DirectX
DirectX
;Drivers
Drivers\NVidia 2.03 WinXP
Drivers\Realtek Audio v3.51
Drivers\Sven Multimedia 800
;Архиваторы
Архиваторы\WinRAR 3.51
;Кодеки
Кодеки\ACE MegaCoDecSPack 6.00
Кодеки\VP
;Музыка
Музыка\QCD
Музыка\WinAmp
;Офисные программы
Офисные программы\OFFICE 2003 RUS
Офисные программы\Notepad++ 3.8
;Настройка системы
Tweaker\TweakXP Pro 4.0.6
System Updates & Utils\Русский
;Сети
Сети\Brousers\Opera 9.0
Сети\Интернет скачка файлов\Teleport Pro 1.42
Сети\Почта\Thunderbird 1.5
;Другое
PDFCreator 0.9.0
Punto Switcher 2.8
Uninstall Tool 1.6
[/more]

[more=Файл Default.ini]
Офисные программы\OFFICE 2003 RUS
true
Офисные программы\Notepad++ 3.8
true
Drivers\NVidia 2.03 WinXP
true
Drivers\Realtek Audio v3.51
true
Drivers\Sven Multimedia 800
true
Кодеки\ACE MegaCoDecSPack 6.00
true
Кодеки\VP
true
CD\ReCD\Ahead Nero7
true
DirectX
true
Музыка\QCD
true
Музыка\WinAmp
true
Архиваторы\WinRAR 3.51
true
Uninstall Tool 1.6
true
Сети\Интернет скачка файлов\Teleport Pro 1.42
true
System Updates & Utils\Русский
true
Сети\Brousers\Opera 9.0
true
Сети\Почта\Thunderbird 1.5
true
Tweaker\TweakXP Pro 4.0.6
true
Punto Switcher 2.8
true
PDFCreator 0.9.0
true
CD\ReCD\UltraISO 8.00.139
true
[/more]

[more=Файл Settings.ini]
;Количество столбцов флажков
CheckCount=2

;Высота флажков
CheckHeight=15

;Ширина флажков
CheckWidth=200

;Расстояние между флажками по горизонтали
CheckCheckWidth=10

;Расстояние между флажками по вертикали
CheckCheckHeight=10

;расстояние между флажком и панелью по горизонтали
CheckTabWidth=15

;расстояние между флажком и панелью по вертикали
CheckTabHeight=23

;Расстояние между панелью и краем формы по горизонтали
TabFormWidth=15

;Расстояние между панелью и краем формы по вертикали
TabFormHeight=15
[/more]
Автор: kpuk
Дата сообщения: 01.02.2007 23:00
MrCyclik
Спряц код под тэг [more]
И напиши плиз что эта прога должна делать??
Автор: MrCyclik
Дата сообщения: 02.02.2007 07:48
Создай новый проэкт AutoIt3. В него внеси код оболочки и сохрани его.
Там, где сохранил, создай файлы Panels.ini, Default.ini и Settings.ini. Вставь в них содержимое выше.
Скомпилируй проэкт и запусти его. Так все будет понятнее.
P.S. Что прога делает написано выше. Почитай повнимательнее.
P.S.S. Кто-нибудь знает как определить высоту многострочных вкладок, а то при создании Tab'а со стилем TCS_MULTILINE checkbox'ы налезают на вкладки, а этого хотелось бы избежать на автомате, а не ручным редактированием новай переменной (их и так много)?
Автор: kpuk
Дата сообщения: 09.02.2007 20:06
Вот какое дело!
1. Сделал прогу. В ней надо нажимать комюинацию клавиш для вывода инфы.
Но вот проблема. Если эти клавиши зажать то происходит переполнение буфера и прога вываливается. Опции SendKeyDelay и SendKeyDownDelay ставлю 5000 - не помогает. как быть.

2. Как щаставить SplashTextOn сообщение показываться поверх тяжёлых приложений (например какаянить "тяжёлая" игра)
Автор: ViSiToR
Дата сообщения: 10.02.2007 03:26
kpuk

Цитата:
Сделал прогу

Хотябы покажи кусок кода где вываливается (код функции которая вызывается клавишами) -что выводится при сбое?


Цитата:
Как щаставить SplashTextOn сообщение показываться поверх тяжёлых приложений

Параметры команды оставляешь по умолчанию? думаю только сворачиванием игры, или даже можно попробовать поменять атрибут окна игры на “не поверх” остальных окон (WinSetOnTop("Title", "Text", 0)).
Автор: ViSiToR
Дата сообщения: 12.02.2007 21:36
На офф. форуме нашёл скрипт, который конвертирует VBS в Au3 - очень хороший получился скрипт!

Добавлено:
А шапку можно включить? я тут собрал не мало материяла на эту тему, жалко только что мало кто в ней участвует - может нужно подбодрить народ хорошей горячей шапочкой?
Автор: Dobrii
Дата сообщения: 29.03.2007 12:04
Есть строка вида
07/19:21:27 RED "02" test 17 BLUE 27 ЭРM
Если есть в строке 3 слова идущие друг за другом нужно получить 1.
В данном случае: RED test BLUE - должно выдать 1.

Можно это сделать с помощью StringRegExp и регулярных выражений?
Автор: ViSiToR
Дата сообщения: 29.03.2007 14:18
Dobrii


Цитата:
Можно это сделать с помощью StringRegExp и регулярных выражений?

StringRegExp это и есть регулярные выражения


Код: $String = '07/19:21:27 RED "02" test 17 BLUE 27 ЭРM'

If StringRegExp($String, '(?i)RED(.*)test(.*)BLUE') Then MsgBox(64, "", "Слова 'RED' 'test' и 'BLUE' идут подряд")
Автор: Dobrii
Дата сообщения: 29.03.2007 21:28
Огромное спасибо, попробую.
Автор: lom1on
Дата сообщения: 09.04.2007 17:43
нужна помощь в усовершенствовании скрипта, собственно вот он:

Цитата:
while 1
MouseClick("left", 1164, 490, 1, 5)
sleep(3000)
WEnd

т.е. кликает по определенной кнопке каждые 30 секунд
нужно что бы допустим через 30 минут покликал по другим кнопкам, координаты я задам. и потом опять на след 30 минут продолжил выполнять это

Цитата:
while 1
MouseClick("left", 1164, 490, 1, 5)
sleep(3000)
WEnd

Автор: ViSiToR
Дата сообщения: 09.04.2007 18:17
lom1on

Цитата:
кликает по определенной кнопке каждые 30 секунд

Каждые 3 секунды

Вот пример:


Код:
$TimerInit = TimerInit()
While 1
MouseClick("left", 1164, 490, 1, 5)
Sleep(30000)
If TimerDiff($TimerInit) >= (6000 * 30) Then
MouseClick("left", 800, 500, 1, 5)
$TimerInit = TimerInit()
EndIf
WEnd
Автор: 174bpm
Дата сообщения: 08.05.2007 06:11
народ, может шапку сделаем, напишем тип лицензирования, домашнюю страницу и т.д

я пришел сюда по маршруту: Варезник (пусто) -> в помощь сисадмину (пусто) -> программы -> AutoIT
Автор: Widok
Дата сообщения: 08.05.2007 11:31
шапка включена
Автор: ViSiToR
Дата сообщения: 08.05.2007 13:29
Widok

Цитата:
шапка включена

Большое спасибо!




Люди, собираем материял по AutoIt, у меня тоже кучу всего есть, постараюсь к вечеру выложить пример шапки (из тестового форума).
Автор: Dj BoBo
Дата сообщения: 14.05.2007 20:45
AutoIt 3.2.41
Скачать
Автор: Dj BoBo
Дата сообщения: 16.05.2007 20:52
AutoIt 3.2.42
Изменения
Changed: Au3Info graphical tweaks and Summary tab.
Fixed: FileReadLine() getting bad cached data when reading specific line numbers with file handles.
Fixed: Slight lag in GUIGetMsg() under certain circumstances.
Скачать
Автор: Angel_19
Дата сообщения: 17.05.2007 19:26
AutoIt 3.2.43
Изменения
Fixed: FileRead() not working properly with unicode files.

Скачать
Автор: ViSiToR
Дата сообщения: 19.05.2007 12:29
Функции и пример для отображения детального процесса закачки файла:



Код:
;Задаём клавиши для возможности отмены закачки (Ctrl Q).
HotKeySet("^q", "Quit")

;Заносим в переменную $URL ссылку на закачку.
$URL = "http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.2.4.4-setup.exe"

;Берём из ссылки только имя файла.
$FileName = StringRegExpReplace($URL, "^.*/", "")

;Получаем общий размер файла по ссылке (в байтах).
$InetGetSize = InetGetSize($URL)

;Ставим ссылку на закачку в фоновом режиме.
InetGet($URL, @ScriptDir & "\" & $FileName, 1, 1)

;Задаём точку инициализации времени, для подсчёта общего времени закачки файла...
$TimerStart = TimerInit()

;Объявляем переменные для конечного подсчёта средней скорости закачки...
$LowsetSpeed = 0
$HighestSpeed = 0
$TempLowsetSpeed = 0
$TempHighestSpeed = 0

;Включаем отображение прогресса
ProgressOn("Download Progress", "Download: " & $FileName, "Ready: 0%" & @LF & _
"Downloading speed: 0 kb/s" & @LF & _
"Approximately Remained Time: 00:00:00", -1, -1, 16)

;Получаем уникальный идентификатор окна прогресса (для выводя дочерних диалогов MsgBox).
$ProgressHwnd = WinGetHandle("Download Progress")

;Пока файл закачивается, проверяем размер, скорость, оставшееся время, и выводим результаты...
While @InetGetActive
;Получаем текущее чтение скаченных байтов
$InetGetBytesRead = @InetGetBytesRead

;Получаем скорость закачки (кб' в секунду)
$SpeedByBytes = _InetGetSpeed(1000)

;Получаем приблезительное оставшееся время до завершения закачки
$RemainedTime = _SecsToTime(Round(_InetGetRemained($InetGetBytesRead, $InetGetSize, $SpeedByBytes)))

;Получаем процент от закаченных байтов (орентируясь на скорости закачки).
$GetDownPrecent = Round(_InetGetPrecent($InetGetBytesRead, $InetGetSize))

;Задаём прогресс в соответствии с полученными данными...
ProgressSet($GetDownPrecent, "Ready: " & $GetDownPrecent & "% (bytes: " & $InetGetBytesRead & ")" & @LF & _
"Downloading speed: " & Round($SpeedByBytes/1024) & " kb/s" & @LF & _
"Approximately Remained Time: " & $RemainedTime)

$TempLowsetSpeed = $SpeedByBytes
$TempHighestSpeed = $SpeedByBytes

If $TempLowsetSpeed < $LowsetSpeed Or $LowsetSpeed = 0 Then $LowsetSpeed = $TempLowsetSpeed
If $TempHighestSpeed > $HighestSpeed Or $HighestSpeed = 0 Then $HighestSpeed = $TempHighestSpeed
WEnd

;Задаём переменные для вывода данных о результате завершения закачки
;(общее время закачки, средняя скорость закачки, и общий размер закаченного файлда в кб).
$TotlaDownloadTime = _SecsToTime(Round(TimerDiff($TimerStart)/1000))
$AverageDownloadSpeed = Round(_GetMidleSpeed($LowsetSpeed, $HighestSpeed)/1024)
$TotalDownloadFileSize_Kb = Round($InetGetSize/1024, 1)

;Отображаем завершение процедуры скачивания и закрываем диалог прогресса
ProgressSet(100, "100% Done!" & @LF & "Downloading speed: " & $AverageDownloadSpeed & " KB/S" & @LF & _
"Approximately Remained Time (seconds): 00:00:00")

_MsgBox(64, "Finish!", "Download of <" & $FileName & "> has finished." & @LF & _
"Total downloading time: " & $TotlaDownloadTime & @LF & _
"The file was downloaded with average speed of: " & $AverageDownloadSpeed & " KB/S" & @LF & _
"The file size is: " & $TotalDownloadFileSize_Kb & " KB", $ProgressHwnd)

ProgressOff()

;Функция возвращает скорость скачивания на основе полученных данных (до, и после секунды) - возвращаются байты в секунды (b/s).
Func _InetGetSpeed($Sleep=1000)
Local $BytesCheckBefore = @InetGetBytesRead
Sleep($Sleep)
Local $BytesCheckAfter = @InetGetBytesRead
Local $RetSpeedByBytes = $BytesCheckAfter - $BytesCheckBefore
If $RetSpeedByBytes < 0 Then $RetSpeedByBytes = 0
Return $RetSpeedByBytes
EndFunc

;Функция возвращает среднюю скорость закачки (основываясь на соотношении между самой большой замеченной скорости закачки по и самой маленькой).
Func _GetMidleSpeed($LowsetSpeed, $HighestSpeed)
Return ($LowsetSpeed / 2) + ($HighestSpeed / 2)
EndFunc

;Функция возвращает оставшееся время в секундах (за счёт вычесления из общего размера файла и деления на скорость скачивания).
Func _InetGetRemained($Bytes, $TotalBytesSize, $SpeedByBytes)
$RemainedBytes = $TotalBytesSize - $Bytes
$RemainedBytes = $RemainedBytes / $SpeedByBytes
If $RemainedBytes <= 0 Or StringLeft($RemainedBytes, 1) = "-" Then $RemainedBytes = 0
Return $RemainedBytes
EndFunc

;Функция возвращает процент закаченных байтов (в соответствии с общим размером файла)
Func _InetGetPrecent($Bytes, $TotalBytesSize)
Return 100 / ($TotalBytesSize / $Bytes)
EndFunc

;Вспомагательная функция для трансформации секунд в общее время (в формат стандартного отображения времени).
Func _SecsToTime($iTicks, $Delim=":")
If Number($iTicks) >= 0 Then
$iHours = Int($iTicks / 3600)
$iTicks = Mod($iTicks, 3600)
$iMins = Int($iTicks / 60)
$iSecs = Round(Mod($iTicks, 60))
If StringLen($iHours) = 1 Then $iHours = "0" & $iHours
If StringLen($iMins) = 1 Then $iMins = "0" & $iMins
If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs
Return $iHours & $Delim & $iMins & $Delim & $iSecs
Else
Return SetError(1, 0, "00" & $Delim & "00" & $Delim & "00")
EndIf
EndFunc

;Функция для отображения сообщении (для связи с родительским окном).
Func _MsgBox($MsgBoxType, $MsgBoxTitle, $MsgBoxText, $mainGUI)
$ret = DllCall ("user32.dll", "int", "MessageBox", _
"hwnd", $mainGUI, _
"str", $MsgBoxText , _
"str", $MsgBoxTitle, _
"int", $MsgBoxType)
Return $ret [0]
EndFunc

;Функция предназначена для запроса на аборт закачки (вызывается клавишами Ctrl Q).
Func Quit()
$AskAbort = _MsgBox(256+52, "Attention", "Are you sure that you want to abort this download?", $ProgressHwnd)
If $AskAbort <> 6 Then Return
InetGet("abort")
Exit
EndFunc
Автор: Dj BoBo
Дата сообщения: 19.05.2007 23:02
AutoIt 3.2.44
Изменения
Fixed: Chr(0) now acting more sensible (now acts in a similar way to VBScript).
Скачать
Автор: ViSiToR
Дата сообщения: 21.05.2007 19:53
Метод позволяющий запускать код VBS не создавая временных файлов:



Код:
$ProcessName = "AutoIt3.exe"

$RetArr = _ProcessExistsVbs($ProcessName)

If IsArray($RetArr) Then MsgBox(64, "", "Process <" & $RetArr[1] & "> exists." & @LF & @LF & _
"The returned PID is: " & $RetArr[2] & @LF & @LF & _
"Returned Executable Path is: " & @LF & $RetArr[3] & @LF & @LF & _
"Command Line of executed process is: " & @LF & $RetArr[4])

;Функция возвращает массив содержащий имя процесса, его уникальный идентификатор (PID), путь запуска, и коммандную строку запуска.
;В случае если указанный процесс не существует, возвращается 0.
Func _ProcessExistsVbs($ProcName)
Local $Code = ""
$Code &= 'Function ProcessExists(ProcessName)' & @LF
$Code &= ' Set Processes = GetObject("winmgmts://localhost")' & @LF
$Code &= ' Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")' & @LF
$Code &= ' For Each Proc In myProcEnum' & @LF
$Code &= ' If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then' & @LF
$Code &= ' Dim RetArr' & @LF
$Code &= ' RetArr = Array(4, Proc.Name, Proc.ProcessID, Proc.ExecutablePath, Proc.CommandLine)' & @LF
$Code &= ' ProcessExists = RetArr' & @LF
$Code &= ' Exit Function' & @LF
$Code &= ' End If' & @LF
$Code &= ' Next' & @LF
$Code &= ' ProcessExists = 0' & @LF
$Code &= 'End Function'

Local $VbsObj = ObjCreate("ScriptControl")
If @error Then Return SetError(1, 0, -1)

$VbsObj.Language = "vbscript"
$VbsObj.AddCode($Code)
Local $RetArr = $VbsObj.Run("ProcessExists", $ProcName)
If $RetArr = 0 Then Return SetError(0, 0, 0)
Return $RetArr
EndFunc
Автор: Dj BoBo
Дата сообщения: 21.05.2007 21:39
AutoIt 3.2.46
Изменения
Fixed: StringReplace() and occurances parameter.
Added: BinaryToString() for binary buffer to ANSI string quick conversions.
Added: @Unicode macro to show if AutoIt is being run in Unicode or ANSI mode.
Changed: StringReplace() speeded up - a lot.
Changed: Au3Info is now resizable.
Fixed: Chr(0) now properly works with Binary()
Скачать
Автор: kpuk
Дата сообщения: 22.05.2007 00:03
Они что таблеток объелись? ЧТО ни день то версия (а раньше бетки были ежедневно)
ViSiToR, Виз так у нас суперская шапка получится. Так держать! Тока юзай тэг more а то буковок много.
ps: сорри за офтоп.
Автор: ViSiToR
Дата сообщения: 22.05.2007 02:08
kpuk

Цитата:
Тока юзай тэг more а то буковок много.

В шапке не обязательно писать непосредственно код, можно писать ссылку на пост с кодом, т.к материяла (как и обещал), будет довольно много .

P.S
Скоро выложу скрипт который позволяет “разукрашивать” подобным методом (как в моих постах) код для вставки в форум (очень удобное использование).
Автор: Dmitriy_Kolesnikov
Дата сообщения: 22.05.2007 14:45
Объясните, пожалуйста, как мне записать скрипт?

Хочу:
нажать кнопочку "Запись"
Сделать всё что мне нужно
Нажать кнопку "Стоп"
Получить скрипт со всеми действиями, которые я выполнял

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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