PDA

Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26

Creat0R
01-09-2006, 09:55
Sanja Alone

Можешь еще попробовать побороться с буфером обмена
Как не странно, но к такому (подбному) решению я пришёл до затеи использовать параметры командной строки, для записи текста в файл - в скрипте я писал так:

$Text = ClipGet()

If $CmdLine[0] <> 0 Then

$Url = $CmdLine[1]

FileWrite(@ScriptDir & "\File.txt", "Скопированный текст: " & $Text & @CRLF & "Текст скопирован с документа: " & $Url)

EndIf

А команду в браузере писал так:

Copy & Execute program, "Script.exe", "%u"

Таким образом, до вызова самого скрипта, выделенный текст в документе, помещается в буффер обмена, и скрипт “берёт” из буффера полный текст в переменную, и вписывает в файл. Это решение в принципе не имеет проблем, но причина по которой я хотел узнать как передавать два значения (ключа) скрипту, являлась обходом помещения текста в буффер обмена, т.е чтобы не занимать лишни раз буффер обмена.

Ещё раз спасибо за помощь!
-------------------------------------

У меня тут появилась проблема с другой сферы...

Я сделал немного примитивный (пробный) гуи интерфейс (см. код ниже), и есть пару вопросов по этому поводу:

А) Как можно сделать, чтобы после зажатия галки у надписи “Опция”, окно (MsgBox) появлялось только после зажатия, а не каждый раз. Т.е в данный момент, если я зажму галку, то сообщение появляется, если отожму, то тоже появляется - как сделать чтобы появлялось только после зажатия?

Б) У меня в гуи (GUI), есть две кнопки (кроме прочих) - Одна для отмечивания всех галок ("Выбрать все"), а другая для их снятия ("Очистить все") - Вопрос: Как сделать чтобы была такая одна кнопка, а ещё лучше тоже чекбокс, после нажатия которого\ой, выделялись бы все чекбоксы, а если отжать эту\от кнопку\чекбокс, то чтобы также и отжимались все остальные чекбоксы?

Г) Это самая большая прблема, и она у меня имеет наивысшый приоритет для решения - Я поместил в гуи прогресс бар (progressbar), и хотел бы добиться такого результата, чтобы в то время, как происходит копирование определённых файлов, этот прогресс бар был задйствован. Т.е если я копирую например большой файл (фильм к примеру), то чтобы пока он копировался, ползунок бегал в прогрес баре. Мне в принципе не нужно чтобы происходил там какого то рода подсчёт размера файла (хотя думаю в этом и заключается достижение моей задачки), и на основе чего и делался прогресс, а чтобы просто было видно что копирование в прогрессе (и не важно в каком этапе оно находится :) ).

Я временно ограничелся запуском внешнего прогресс бара (через запуск этого же скрипта, с ком. строкой), который (прогрессбар) ходит туда сюда до тех пор, пока не будет существовать определёный файл, который создаётся самим скриптом в тот момент, как копирование окончено (т.е я поставил команду создания этого файла как метку, после команды копирования). Но хотелось бы чтобы этот прогресс бар был внутри гуи интерфейса.


Скрипт:

#include <GUIConstants.au3>

$Form1 = GUICreate("Test", 450, 370, 214, 126)

$Opt = GUICtrlCreateCheckbox("Опция", 230, 50, 300, 20)

$File = GUICtrlCreateCheckbox("Файл", 70, 50, 97, 17)
$Edit = GUICtrlCreateCheckbox("Правка", 70, 70, 97, 17)
$View = GUICtrlCreateCheckbox("Вид", 70, 95, 97, 17)
$Bookmarks = GUICtrlCreateCheckbox("Закладки", 70, 120, 97, 17)
$Session = GUICtrlCreateCheckbox("Сеансы", 70, 145, 97, 17)

$progressbar1 = GUICtrlCreateProgress (10,10,200,20)
GUICtrlSetColor(-1,32250)

$All1 = GUICtrlCreateButton("Выбрать все", 70, 330, 90, 23)
$All2 = GUICtrlCreateButton("Очистить все", 70, 300, 90, 23)

$Start = GUICtrlCreateButton("Выполнить", 260, 330, 93, 25)
$Close = GUICtrlCreateButton("Выход", 360, 330, 70, 25)

Dim $radioval1

$group_1 = GUICtrlCreateGroup ("Группа", 255, 190, 140, 110, 100)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio ("Вариант 1", 285, 220, 90, 20)
GUICtrlSetState ($radio_1,$GUI_CHECKED)
$radio_2 = GUICtrlCreateRadio ("Вариант 2", 285, 270, 90, 20)

GUISetState(@SW_SHOW)
GUISetState ()

While 1

; Здесь по идее, хотелось бы чтобы прогресс бар начал крутится, а остановится пусть в конце скрипта (перед wend)

$msg = GuiGetMsg()

If $msg = $Opt Then MsgBox(48, "Atantion", "This is a test")

If $msg = $All1 Then

GUICtrlSetState ($File,$GUI_CHECKED)
GUICtrlSetState ($Edit,$GUI_CHECKED)
GUICtrlSetState ($View,$GUI_CHECKED)
GUICtrlSetState ($Bookmarks,$GUI_CHECKED)
GUICtrlSetState ($Session,$GUI_CHECKED)

EndIf

If $msg = $All2 Then

GUICtrlSetState ($File,$GUI_UNCHECKED)
GUICtrlSetState ($Edit,$GUI_UNCHECKED)
GUICtrlSetState ($View,$GUI_UNCHECKED)
GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED)
GUICtrlSetState ($Session,$GUI_UNCHECKED)

EndIf

If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then Exit

Select

Case $msg >= $radio_1 AND $msg <= $radio_2
$radioval1 = $msg - $radio_1

Case $msg = $Start

If $radioval1 = 0 Then

If GUICtrlRead($Opt) = 1 Then

EndIf

If GUICtrlRead($File) = 1 Then


EndIf

If GUICtrlRead($Edit) = 1 Then


EndIf

If GUICtrlRead($View) = 1 Then


EndIf

If GUICtrlRead($Bookmarks) = 1 Then


EndIf

If GUICtrlRead($Session) = 1 Then


EndIf

If GUICtrlRead($File) <> 1 and GUICtrlRead($Edit) <> 1 and GUICtrlRead($View) <> 1 and GUICtrlRead($Bookmarks) <> 1 and GUICtrlRead($Session) <> 1 and GUICtrlRead($Opt) <> 1 Then

MsgBox(48, "Error", "Выберите как минимум один чекбокс")
ContinueLoop
EndIf

MsgBox(64, "Finishing...", "Финито 1", 15)

GUICtrlSetState ($Opt,$GUI_UNCHECKED)
GUICtrlSetState ($File,$GUI_UNCHECKED)
GUICtrlSetState ($Edit,$GUI_UNCHECKED)
GUICtrlSetState ($View,$GUI_UNCHECKED)
GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED)
GUICtrlSetState ($Session,$GUI_UNCHECKED)

EndIf

If $radioval1 = 1 Then

If GUICtrlRead($Opt) = 1 Then

EndIf

If GUICtrlRead($File) = 1 Then

EndIf

If GUICtrlRead($Edit) = 1 Then

EndIf

If GUICtrlRead($View) = 1 Then

EndIf

If GUICtrlRead($Bookmarks) = 1 Then

EndIf

If GUICtrlRead($Session) = 1 Then

EndIf


If GUICtrlRead($File) <> 1 and GUICtrlRead($Edit) <> 1 and GUICtrlRead($View) <> 1 and GUICtrlRead($Bookmarks) <> 1 and GUICtrlRead($Session) <> 1 and GUICtrlRead($Opt) <> 1 Then

MsgBox(48, "Error", "Выберите как минимум один чекбокс")
ContinueLoop
EndIf


MsgBox(64, "Finishing...", "Финито 2", 15)

GUICtrlSetState ($Opt,$GUI_UNCHECKED)
GUICtrlSetState ($File,$GUI_UNCHECKED)
GUICtrlSetState ($Edit,$GUI_UNCHECKED)
GUICtrlSetState ($View,$GUI_UNCHECKED)
GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED)
GUICtrlSetState ($Session,$GUI_UNCHECKED)

EndIf
EndSelect
WEnd

sattva
01-09-2006, 21:34
Помогите разобраться почему не работает выбор строки из выпадающего меню для Adobe Creative Suite 2 Russian by cvs/SSG


ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1','SelectString','Photoshop CS2 9.0')



выбор строки "Photoshop CS2 9.0" не происходит

Sanja Alone
02-09-2006, 04:07
Creat0R

А)
If $msg = $Opt Then
If GUICtrlRead($Opt)=$GUI_CHECKED Then MsgBox(48, "Atantion", "This is a test")
EndIf
Б) См. пример выше и читай о ф-циях GUICtrlRead ( controlID ), GUICtrlGetState ( [controlID] )

А где ты В) потерял? :)

Г) Прогрессбар - это весьма муторная штука, когда нет естественных привязок. Твой вариант - это именно тот случай (такая же проблема была и у меня в OEsr (http://sanjaalone.h15.ru/oesr.php)). Я не стал париться, и сделал простой "светофор" :) Он не мешает работе основного приложения (в данном сл. - архиватора) и дает пользователю представление о происходящем (для верности, можно в процессе/конце операции еще проигрывать звуковой файл и/или выводить сообщения в трее - SoundPlay ( "filename" [, wait] ), TrayTip ( "title", "text", timeout [, option] ) ). Я этого делать не стал, а ты можешь попробовать...



sattva
не работает выбор строки из выпадающего менюДля начала, дай фокус данному эл-ту управления:
ControlFocus('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1')
Если это не поможет, то замени свою строку выбора эл-та комбобокса такой:
ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"SetCurrentSelection", ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"FindString",'Photoshop CS2 9.0'))
Ну, и самый тежелый случай (если 2 первых не работают):
Send("{DOWN число}"), где "число" - это требуемое к-во нажатий на кнопку для выбора нужной строки комбобокса.

prokazzza
02-09-2006, 18:10
Sanja Alone

я не силен в скриптах пожалуста можно сделать вот скрипт

запуск c:/install/install.sfx.exe
нажать кнопку "извлечь"
вставить пароль из c:/install/password.txt
нажать кнопку "ок"
пождать пока распакуется RAR архив
подождать пока установится istall.exe
если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делать.

sattva
02-09-2006, 22:19
Sanja Alone

Спасибо, сработал только этот вариант

Global $file='Adobe Photoshop CS2.msi', $key='keygen.exe'

; Запуск кейгена
Run ( $key )
WinWaitActive ( 'Adobe Creative Suite 2 Russian by cvs/SSG' )
ControlFocus('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1')
Send ("{DOWN}")

Sanja Alone
03-09-2006, 01:58
prokazzza
вставить пароль из c:/install/password.txtЭто неструктурированный текстовый файл или ini-файл? В какой кодировке? В какой строке находится пароль?

подождать пока установится istall.exeКомментарий архива в студию!

если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делатьА не проще ли будет указать ключ, отменяющий перезагрузку для данного приложения прямо в строке его запуска после извлечения из архива? (например: Setup=install.exe REBOOT=ReallySuppress /qn). Я надеюсь, что это загадочное приложение использует какой-то стандартный установщик (см. статью Типы инсталляторов (http://oszone.net/2766)).

amel27
03-09-2006, 11:21
Возвращаясь к задаче поиска вхождений заданного слова в произвольный текст. Выше я дал маху утверждая, что AutoIT не поддерживает регулярные выражения... хотя с русским опять облом - если метасимволы \l \u \w еще работают, то (?i) ни в какую... :(

StringRegExp (http://www.autoitscript.com/autoit3/files/beta/autoit/undocumented/StringRegExp.htm) - Check if a string fits a given regular expression pattern.
StringRegExpReplace (http://www.autoitscript.com/autoit3/files/beta/autoit/undocumented/StringRegExpReplace.htm) - Replace text in a string based on regular expressions.

вариант поиска слова с использованием регулярных выражений (на основе скрипта Sanja Alone):
#include <File.au3>

$fileInput = 'file.txt'
$wordToFind= 'исКать'

$find = _FindTextInFile ($fileInput,$wordToFind)
If $find Then
MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" найдено в ' & $find & '-й строке.')
Else
MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" в файле не обнаружено.')
EndIf

Func _FindTextInFile ($ifile, $word)
Local $i, $a, $ret=0
_FileReadToArray($ifile, $a)
For $i=1 To Ubound ($a)-1
If StringRegExp ($a [$i], _WordToReg ($word) ) Then
Return $i
EndIf
Next
Return 0
EndFunc

; перевод произвольного слова в регулярное выражение
; требуется для поддержки русских слов, так как (?i)
; воспринимает только регистры английских букв;
; пример: "Кот" --> "\<[кК][оО][тТ]\>"

Func _WordToReg ($word)
Local $i, $c, $w=""
If StringIsASCII($word) Then
Return '(?i)\<' & $word & '\>'
Else
For $i=1 To StringLen($word)
$c = StringMid ($word, $i, 1)
If StringLower($c) == StringUpper($c) Then
$w=$w & $c
Else
$w=$w & '[' & StringLower($c) & StringUpper($c) & ']'
EndIf
Next
Return '\<' & $w & '\>'
EndIf
EndFunc

Creat0R
03-09-2006, 19:50
Sanja Alone
Снова огромно спасибо за А) и Б)

А где ты В) потерял?
От волнения забыл про него http://www.softboard.ru/style_emoticons/default/blush2.gif ...

А на счёт Г), я всё же решил немного попариться, и нашёл, я бы сказал, обходное решение...

Вместо того, чтобы копировать файл командами AutoIt'а, я повесил копирование на ком. строку:

Run(@ComSpec & " /c copy /y ""c:\File.txt"" ""d:\File.txt""", "", @SW_HIDE)

; Затем заключил в вечную петлю прогресс бар, до тех пор, пока в системе висит процесс “cmd.exe”, т.е это значит, что до тех пор, пока будет делаться копирование...
While 1

For $i = 5 To 100
GUICtrlSetData ($progressbar1, $i)
Sleep(1)
Next
If Not ProcessExists("cmd.exe") Then ExitLoop
Wend
GUICtrlSetData ($progressbar1, 0)

Хотя и тут может быть проблема, ведь в этот момент, юзеру может приспичить включить ком. строку для своих целей...
Но и это можно обойти, создав той-же ком. строкой, файл во временной папке %temp%, и по завершению копирования удалять его, а проверку для завершения прогресс бара, делать так:

If Not ProcessExists("cmd.exe") or Not FileExists(@TempDir & "\mark.tmp") Then ExitLoop

Или может есть более надёжный способ, но тогда нужно узнать, возможно ли, и как, проверять когда был запущен процесс (cmd.exe), и если именно этот процесс не существует, тогда выходить с петли. Если кто-то подскажет возможно ли такое, и если да, то как осуществить, то буду очень признателен.
----------------------

У меня есть ещё один вопрос, и тоже в другом направлении -
Нужно взять в переменную, все последние символы идущие после определнного знака у значения другой переменной. Т.е, вот например значение переменной $Var ровняется c:\program files\my programm\test.zip - и нужно чтобы из этой переменной, вернулось такое значение - test.zip - в другую переменную, например в $Var1.
Но заранее, не известно, ни количество слэшей (\) в пути, ни количество символов после последнего слэша. Возможно такое осуществить?
Как я понимаю, тут как-то нужно задействовать одну из вариации команды String, но если честно, то я уже замучался в попытках подобрать подхолящюю для этой цели вариацию, и справка тоже не помогла :(

Я временно это решил опять-таки ком. строкой :) :
$Var = "c:\program files\my programm\test.zip"

; Беру нужное значение, и вывожу последние его символы после последнего слэша, в файл test.tmp
Run(@ComSpec & " /c for %a in (""" & $Var & "") do echo %~nxa> """ & @ScriptDir & "\test.tmp""")

; Помещаю новое значение (из файла) в переменную $Var1
$Var1 = FileReadLine(@ScriptDir & "\test.tmp", 1)

MsgBox(0, "", The New Value is: " & $Var1)
FileDelete (@ScriptDir & "\test.tmp")

Но ту проблема в том, что нужно создавать файл, затем удалять его, а в моём случае, таких операции мне приходится делать не раз в моём скрипте, и каждый раз заного создовать файл, а затем удалять его, не лучший вариант... тем более, что скрипт может быть запущен из флешки, а всё время писать на флешку, это её вредит (хотя можно конечно писать файл во времеенный каталог - @TempDir, но всё же не удобно).

Sanja Alone
04-09-2006, 02:17
Creat0R
значение переменной $Var ровняется c:\program files\my programm\test.zip - и нужно чтобы из этой переменной, вернулось такое значение - test.zip - в другую переменную, например в $Var1.
Это очень просто:Func PathName($fullpath)
Local $s=StringInStr($fullpath,'\',0,-1) ;первый слэш с конца
Local $n=StringMid($fullpath,$s+1)
Local $p=StringLeft($fullpath,$s-1)
Dim $pn[2]
$pn[0]=$p ;путь
$pn[1]=$n ;имя
Return $pn
EndFunc

amel27
04-09-2006, 02:45
Creat0R
Нужно взять в переменную, все последние символы идущие после определнного знака у значения другой переменной. Т.е, вот например значение переменной $Var ровняется c:\program files\my programm\test.zip - и нужно чтобы из этой переменной, вернулось такое значение - test.zip - в другую переменную, например в $Var1.
Но заранее, не известно, ни количество слэшей (\) в пути, ни количество символов после последнего слэша. Возможно такое осуществить?Вот вариант с применением регулярных выражений:$var = 'c:\program files\my programm\test.zip'
$res = StringRegExpReplace ($var, '^.*\\', '')

Creat0R
04-09-2006, 13:50
amel27, Sanja Alone:

Спасибо! то что нужно было!

Dirk Diggler
08-09-2006, 10:43
Интереснейшая фигня наблюдается. Имеем скрипт, который пингует некий хост, и выходит с кодом либо 1, либо 0
If Ping($cmdline[1],2000) > 0 Then
Exit(0) ; if PING success, returns 0
Else
Exit(1)
EndIf


Он вызывается из следующего батника:
@echo off
SET PING= ping.au3
SET HOST1=google.com
SET DG=192.168.100.12312

%ping% %HOST1%
echo ping %HOST1% returns %errorlevel%

if "%DG%"=="" (
rem
) ELSE (
%ping% %DG%
echo ping %DG% returns %errorlevel%
)


Так вот, здесь результат БУДЕТ ОДИНАКОВЫЙ для обоих пингов, и зависит только от того, пингуется ли %HOST1%!

ping google.com returns 0
ping 192.168.100.12312 returns 0


ping google.23rwefwe returns 1
ping 192.168.100.1 returns 1


А 192.168.100.1 - мой адсл-модем, и он пингуется всегда 8-)
Однако, удалим конструкцию с IF, и всё работает как надо:
@echo off
SET PING= ping.au3
SET HOST1=goowefwegle.com
SET DG=192.168.100.1

%ping% %HOST1%
echo ping %HOST1% returns %errorlevel%
%ping% %DG%
echo ping %DG% returns %errorlevel%


ping goowefwegle.com returns 1
ping 192.168.100.1 returns 0

Где грабли - в AutoIt или командном интерпретаторе винды?
Проверено на XP SP1, AutoIt 3.2.0.1

prokazzza
08-09-2006, 13:14
Sanja Alone

вот ссылочка на архив посмотрите пожалуста

http://uploaded.to/?id=f31c2d

весит метр внутри реадми, файл с паролем и RAR SFX архив внутри архива простая прога Atnotes вирусов НЕТ.

Заранее спасибо!

Creat0R
09-09-2006, 02:07
Такая проблема появилась:

Нужно взять значение пареметра в переменную, но брать нужно не из файла конфигурации (*.ini), а из обычного текстового файла.
Я решил эту задачу, но только если кодировка файла не является UTF-8, если она такой и является, то киррилица которая будет прописанна в значении, будет отображаться крякозябрами (если вывести переменную в MsgBox)... вот пример работающего скрипта, с файлом test.txt, который в кодировке ANSI:


$File = @ScriptDir & "\test.txt"

; Поиск нужных символов в файле test.txt
$Find = _FindTextInFile($File, "2000000")

; Очищаю строку с найденным текстом, от пробелов и кавычек (так надо ;) )
$Clean1 = StringRegExpReplace($Find[1], " ", "")
$Clean2 = StringRegExpReplace($Clean1, """", "")

; Беру все символы, которые находятся после искомого слова + 1 символ (=)
$MsgBox = StringTrimLeft($Clean2, 8)

; Вывожу результат в сообщении
MsgBox(0, "", $MsgBox)

; Функция для поиска в файле, предоставленная by Sanja Alone
Func _FindTextInFile($ifile,$text)
Local $i
Dim $ret[2]
$file = FileOpen($ifile,0)
$a = StringSplit( FileRead($file, FileGetSize($ifile)), @LF)
FileClose($file)

If StringIsASCII($text) Then
For $i = 1 To UBound($a,1)-1
If StringInStr($a[$i],$text) Then
$ret[0]=$i
$ret[1]=$a[$i]
Return $ret
EndIf
Next
Else
For $i = 1 To UBound($a,1)-1
If StringInStr(StringLower($a[$i]),StringLower($text)) Then
$ret[0]=$i
$ret[1]=$a[$i]
Return $ret
EndIf
Next
EndIf
EndFunc

Содержание файла test.txt такое:

2000000= "это тест"

И если этот файл будет в кодировке UTF-8, то в MsgBox выведутся каракули, как можно это исправить?

Sanja Alone
09-09-2006, 06:24
prokazzza
If $CmdLine[0]=1 Then
$sfx=$CmdLine[1]
Else
MsgBox(16,'Ошибка',"Недопустимое содержимое командной строки",7)
Exit
EndIf
;пароль (берется из 3-й строки)
$password=FileReadLine(@ScriptDir&'\пароль.ini',3)
$pid=Run('"'&$sfx&'" -s')
WinWait('Ввод пароля')
ControlSetText('Ввод пароля','','Edit1',$password)
ControlClick('Ввод пароля','','Button1')
ProcessWaitClose($pid)
ProcessWaitClose('INSTALL.exe')

иногда просит перезагрузитьсяУ меня не просил, след-но, этого окна я не видел.

P.S. Гораздо удобнее сделать тихую установку этого самого Atnotes непосредственно из его дистрибутива (с отменой перезагрузки, конечно, если она там требуется), а уже свои настройки для этого приложения восстановить из архива.

Global $file='atnsetup.exe', $InstPath=@ProgramFilesDir & '\ATnotes', $programgroup='ATnotes' , $rus=@ScriptDir & '\ATnotes.ini'
;установка в тихом режиме
RunWait(@ScriptDir & '\' & $file & ' /VERYSILENT /NORESTART /SP- /DIR="' & $InstPath & '" /GROUP="' & $programgroup & '"' )
;русификация
If FileExists($rus) Then Filecopy($rus,$InstPath & '\')
#cs
А вот здесь уже будет восстановление настроек
(файл ATnotes.dat и ветка реестра HKEY_CURRENT_USER\Software\Ascher\ATnotes, сохраненная в файл settings.reg)
Положи их в архив с таким комментарием:

Path=ATnotes
SavePath
Setup=cmd /c start /wait regedit /s settings.reg & del settings.reg
Silent=1

а приведенный выше скрипт (без последней строки) допиши в конец этого, и он обработает твой запароленный sfx-архив с настройками
№ce

amel27
10-09-2006, 08:13
Dirk Diggler
Однако, удалим конструкцию с IF, и всё работает как надо:дык сам и ответил - в батнике, нужно так:@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET PING= ping.au3
SET HOST1=google.com
SET DG=192.168.100.12312

%ping% %HOST1%
echo ping %HOST1% returns %errorlevel%

if "%DG%"=="" (
rem
) ELSE (
%ping% %DG%
echo ping %DG% returns !errorlevel!
)З.Ы. подробности смотри в "CMD /?"

prokazzza
10-09-2006, 10:53
Sanja Alone

вот картинка перезагрузки (1 рисунок)
по умолчанию стоит сразу на YES

и просьба можешь доработать вот этот скрипт

Run("rundll32.exe netshell.dll,StartNCW")
WinWaitActive ('Мастер новых подключений','Мастер новых подключений')
Send('{Enter}')
Sleep ('500')
WinWaitActive ('Мастер новых подключений','Подключить к Интернету для просмотра веб-узлов и чтения электронной почты.')
ControlClick ('Мастер новых подключений','Подключить к Интернету для просмотра веб-узлов и чтения электронной почты.','Button1')
Sleep ('500')
Send('{Enter}')

WinWaitActive ('Мастер новых подключений','Каким образом подключиться к Интернету')
ControlClick ('Мастер новых подключений','Каким образом подключиться к Интернету','Button2')
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Данное подключение использует модем и обычную телефонную линию или телефонную линию ISDN.')
ControlClick ('Мастер новых подключений','Данное подключение использует модем и обычную телефонную линию или телефонную линию ISDN.','Button1')
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Им&я поставщика услуг')
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', 'Peterstar' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Номер &телефона:')
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', '3203370,,,' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','&Имя пользователя:')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit1', 'Login')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit2', 'Password')
Send('{tab}')
sleep (100)
ControlSetText ( 'Мастер новых подключений', '', 'Edit3', 'Password')
Sleep ('500')
ControlCommand ( 'Мастер новых подключений', '', 'Button13', 'Check', '' )
ControlCommand ( 'Мастер новых подключений', '', 'Button2', 'Check', '' )
Sleep ('500')
Send('{Enter}')
WinWaitActive ('Мастер новых подключений','Завершение работы мастера новых подключений')
ControlCommand ( 'Мастер новых подключений', '', 'Button20', 'UnCheck', '' )
Send('{Enter}')
Exit

(2 рисунок) - добавить галочку "отобразить на рабочем столе" - нажимаем готово, после нажатия готово запуститься подключение, добавить галочку (3 рисунок) " сохранить имя пользователя и пароль" нажимаем свойства, переходим на вкладку параметры (4 рисунок), "число набора номера 100", "интервал между повторами номера - 1 секунда", "время до разьединения - никогда", и поставить галку - перезвонить после разрыва связи, все ок и закрыть подключение.

Sanja Alone
10-09-2006, 14:39
prokazzza
вот картинка перезагрузки (1 рисунок)Пик! пик! пииииик! :angry: Ты мне можешь объяснить какое отношение имеет "картинка перезагрузки" Office 2003 к скрипту установки Atnotes?

доработать вот этот скриптСм. тему Соединение по dial-up автоматом (http://forum.oszone.net/showthread.php?t=42666) и в старой теме (http://forum.oszone.net/showthread.php?t=46951) по AutoIt bogomolv приводил вариант реализации подобного (ПОЛЬЗУЙСЯ ПОИСКОМ по форуму). Если тебе после всего прочитанного все-таки захочется доработать именно этот скрипт, то воспользовавшись AutoIt Window Info ты самостоятельно сможешь осуществить сие действо.

prokazzza
10-09-2006, 16:36
Sanja Alone

какое отношение имеет "картинка перезагрузки" Office 2003 к скрипту установки Atnotes?
это просто пример. Он не просит на Atnotes перезагрузку пришлось сделать Office для примера, который точно попросил перезагрузку.

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

Sanja Alone
11-09-2006, 03:53
prokazzza
это просто примерПрактически у любого приложения есть ключи/параметры файла ответов и т.п. прибамбасы для отмены перезагрузки. Тема по Офису на форуме - вот (http://forum.oszone.net/thread-60601.html), статьи по Офису читай на сайте + все-таки прочти статью о типах инсталляторов (ссылку я тебе уже давал). Если все же возникнут непреодолимые с пом. ключей/параметров окна, то еще прочти маленькую заметку на тему "отлова случайных окон" в моем FAQ по AutoIt (http://oszone.net/display.php?id=3663).

еслиб я умелЕсли ты не представляешь что делать с AutoIt Window Info (%ProgramFiles%\AutoIt3\AU3Info.exe) в частности и/или с AutoIt-ом в целом, тогда скачай редактор SciTE (http://www.autoitscript.com/autoit3/scite/downloads.php). Помимо собственно редактора, ты также получишь ScriptWriter (%ProgramFiles%\AutoIt3\SciTE\ScriptWriter\scriptwriter.exe). Думаю, что помочь в написани скрипта он тебе сможет. Это, грубо говоря, прога записи твоих действий в готовый AutoIt-код. Правда, потом нужно будет вручную подправлять такой "самописный" скрипт, но это лучше, чем ничего.

я тя наверно не просилНаглость - второе счастье. Я тебе искренне завидую, ибо не имею даже первого... Я не могу за всех все делать. Я могу лишь посильно помочь в чем-то. Я тебе дал всю необходимую инфу - изучай. Бери пример с Creat0R-а. Еще пару месяцев назад он не знал базовых принципов, а сейчас замахивается "на Вильяма нашего, Шекспира".




© OSzone.net 2001-2012