Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты
решение КАК выдать список учёток обладающими правами админа есть от amel27 существенно обновил функцию _NetLocalGroupGetMembers (http://forum.oszone.net/post-506164-437.html), теперь если группа не включает доменных учеток достаточно вызвать функцию с параметрами:
_NetLocalGroupGetMembers ("Администраторы", "", 0, 1)
...справедливости ради приведу еще один вариант функции через COM (взял с форума AutoIT):
Func _NetLocalGroup ($HOST, $LocalGroup)
Global $Members[1]
$Administrators = ObjGet("WinNT://" & $HOST & "/" & $LocalGroup)
$MemberList=$Administrators.Members
for $Account in $MemberList
$FullName=StringUpper(StringRight($Account.Parent, StringLen($Account.Parent)-8))
if (StringRight($FullName, StringLen($HOST)+1))=("/" & StringUpper($HOST)) then
$FullName=$Account.Name
else
$FullName=$FullName & "\" & $Account.Name
EndIf
ReDim $Members[UBound($Members) + 1]
$Members[UBound($Members) - 1]=$FullName
next
$Members[0]=UBound($Members)-1
Return $Members
EndFuncP.S. предупреждаю, что через COM работает намного медленней!
Не пойму в чём проблема.... хочу осуществить замену текста в определённом каталоге у определённой группы файлов (по маске), но почему то функция которую я написал, не хочет этого делать :)
#include <File.au3>
_ReplaceTextInFiles(@ScriptDir & "\Test", "123", "321", "*.txt")
Func _ReplaceTextInFiles($Path, $OldText, $NewText, $Mask="*.*")
$FileList = _FileListToArray($Path, $Mask)
If IsArray($FileList) Then
For $i = 1 to $FileList[0]
_ReplaceStringInFile($Path & "\" & $FileList[$i], $OldText, $NewText)
Next
EndIf
EndFunc
Всё, нашёл свою ошибку :) - См. подчёркнуты текст в коде - Там было $NewText.
Sanja Alone, а можешь обновить свой скрипт для CuteFTP 8.0.3 с новым патчем (165 кб который)! Очень надо )))
Sanja Alone
18-11-2006, 18:43
Craager
можешь обновить свой скриптСкрипт работает и с этой версией и с упомянутым патчем. Нужно было просто попробовать произвести установку (и прочитать комментарии в "шапке" скрипта, по ум. патчем считается файл Crack.exe - это именно тот, 165Кб-товый).
в AutoIt как лучше захватить системную дату? Есть ли вообще такая возможность (не прибегая к хитростным изворотам и изворотливым ухищрениям?)
в идеале интересует дата в опр. формате (напр. YYYYMMDD или MMDDYY), для дальнейшего использования в качестве переменной.
Michail77
21-11-2006, 22:45
Нужна помощь.
Вот скрипт.Автор его Creat0R за что ему ОГРОМНАЯ БЛАГОДАРНОСТЬ.
Нужно чтобы при отметке установки нескольких программ они запускались поочерёдно. Как это сделать?
#NoTrayIcon
#Include <GuiConstants.au3>
Opt("RunErrorsFatal", 0)
$Title = "Menu"
If WinExists($Title) Then Exit
GuiCreate($Title, 148, 300)
GUISetFont(13)
GUICtrlCreateLabel("Выбор комплектов",2, 5)
GUISetFont(9)
$Complect1 = GUICtrlCreateCheckbox("AcrReader 4.0.5", 35, 25)
$Complect2 = GUICtrlCreateCheckbox("Office 2003", 35, 50)
$Complect3 = GUICtrlCreateCheckbox("WinRar 3.61", 35, 75)
$Complect4 = GUICtrlCreateCheckbox("DIVX 5.11", 35, 100)
$Complect5 = GUICtrlCreateCheckbox("LightAlloy 4.0", 35, 125)
$Complect6 = GUICtrlCreateCheckbox("WINDVD 7", 35, 150)
$Complect7 = GUICtrlCreateCheckbox("WinAmp 5.08", 35, 175)
$Complect8 = GUICtrlCreateCheckbox("Nero 6.6.0.8", 35, 200)
$Complect9 = GUICtrlCreateCheckbox("DrWeb 4.33", 35, 225)
$Complect10 = GUICtrlCreateCheckbox("Kav 5.338", 35, 250)
$Next = GUICtrlCreateButton("Next>>", 0, 276, 50)
$Cancel = GUICtrlCreateButton("Cancel", 99, 276, 50)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $Gui_Event_Close or $Msg = $Cancel
Exit
Case $Msg = $Next
If GUICtrlRead($Complect1) <> 1 and GUICtrlRead($Complect2) <> 1 and GUICtrlRead($Complect3) <> 1 and GUICtrlRead($Complect4) <> 1 and GUICtrlRead($Complect5) <> 1 and GUICtrlRead($Complect6) <> 1 and GUICtrlRead($Complect7) <> 1 and GUICtrlRead($Complect8) <> 1 and GUICtrlRead($Complect9) <> 1 and GUICtrlRead($Complect10) <> 1 Then
GUISetState(@SW_DISABLE)
MsgBox(262144+48, "Attention", "Выберите как минимум одну птичку ;-)")
GUISetState(@SW_ENABLE)
WinActivate($Title, "")
ContinueLoop
EndIf
If GUICtrlRead($Complect1) = $Gui_Checked Then
Run ("AcrReader\Acrobat.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <Acrobat.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 1
EndIf
If GUICtrlRead($Complect2) = $Gui_Checked Then
Run ("Office\AutoOffice.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoOffice.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 2
EndIf
If GUICtrlRead($Complect3) = $Gui_Checked Then
Run ("WinRar\Autowinrar.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoWinRar.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 3
EndIf
If GUICtrlRead($Complect4) = $Gui_Checked Then
Run ("DIVX\DivX511.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <DivX.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 4
EndIf
If GUICtrlRead($Complect5) = $Gui_Checked Then
Run ("LightAlloy\LA.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <LA.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 5
EndIf
If GUICtrlRead($Complect6) = $Gui_Checked Then
Run ("WINDVD\AutoWINDVD7.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoWinDVD.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 6
EndIf
If GUICtrlRead($Complect7) = $Gui_Checked Then
Run ("WinAmp\AutoWinAmp.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoWinAmp.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 7
EndIf
If GUICtrlRead($Complect8) = $Gui_Checked Then
Run ("Nero\Nero6608a.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <Nero.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 8
EndIf
If GUICtrlRead($Complect9) = $Gui_Checked Then
Run ("DrWebAut\AutoDrWeb.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoDrWeb.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 9
EndIf
If GUICtrlRead($Complect10) = $Gui_Checked Then
Run ("kav\AutoKav.exe")
If @error Then
MsgBox(48, "error", "Не могу запустить <AutoKav.exe>")
ContinueLoop
EndIf
;Тут должна выполняться установка комплекта № 10
EndIf
GUISetState(@SW_HIDE)
ExitLoop
EndSelect
Wend
Sanja Alone
22-11-2006, 00:21
Yozhegg
дата в опр. формате (напр. YYYYMMDD или MMDDYY)Просто возьми макросы даты/времени и поставь в нужной тебе последовательности:
@SEC - Значение секунд на часах. От 00 до 59
@MIN - Значение минут на часах. От 00 до 59
@HOUR - Значение часов на часах в 24-часовом формате. От 00 до 23
@MDAY - Текущий день месяца. От 01 до 31
@MON - Текущий месяц. От 01 до 12
@YEAR - Текущий год в четырехзначном формате
@WDAY - День недели в числовом представлении. От 1 до 7 - от воскресенья до субботы
@YDAY - Текущий день года. От 1 до 366 (или 365 для невисокосного года)
Вот тебе пример - дата в виде YYYYMMDD:
MsgBox (0,"Текущая дата",@YEAR & @MON & @MDAY)
To Sanja Alone: Благодарю за ответ. Спустя 24 часа оценил некоторую поспешность вопроса. Покопавшись в хелпе нашёл эти макросы, но меня смущало отсутствие
возможности форматирования.. мне нужно было (ГГММДД)...
Global $y = @YEAR
Global $mon = @MON
Global $mday = @MDAY
Global $e_year = @YEAR - 2000
Global $_Total = (0 & $e_year & $mon & $mday )
- коряво, но в моём случае работает.
А как в AutoIt снять показание с RadioButton(OptionButton)?
Ischecked -это параметр, или макрос, которым можно проверить отмечена радиокнопка 1 или радиокнопка 2?
Sanja Alone
22-11-2006, 23:54
Yozhegg
смущало отсутствие возможности форматированияСм. в сторону ф-ции StringFormat ( "format control", var1 [, ... var32] ).
как в AutoIt снять показание с RadioButton
If BitAnd(GUICtrlRead($Radio_1),$GUI_CHECKED) Then
msgbox(0,"","Отмечена кнопка 1")
Else
msgbox(0,"","Кнопка 1 НЕ отмечена")
EndIf
Ischecked -это параметр, или макросЭто переменная, описывающая состояние н-рого эл-та управления.
Michail77
чтобы при отметке установки нескольких программ они запускались поочерёдно. Как это сделать?
Очень просто :) ... нужно вместо Run (запуска приложения), прописать RunWait (Запуск приложения с ожиданием его завершения). Т.е просто везде где у тебя в скрипте есть Run(....) Замени на RunWait(...).
И ещё, если установка того или иного приложения, “запускает” внешние модули\приложения, то нужно определить какие именно, т.е какие процессы, или окна появляются, и в соответствии с этим делать проверку на окончание процесса установки. Если же всё обходится (заканчивается) одним процессом (не запуская внешние\дополнительные процессы\окна), то досаточно того метода который я упомянул чуть выше.
----------------------
2 ALL
Есть такая проблема - Я хочу сделать проверку на нажатие определённой клавиши, кнопки мышки, или любого другого действия со стороны пользователя. Известно что есть функция _IsPressed - Но она проверяет каждый раз ввод\нажатие одной клавиши\кнопки, а мне нужно чтобы проверялось любое вхождение при одной (или даже нескольких) проверке... я сделал это для нескольких вхождении, но предусмотреть все, мне не удалось...
For $i = 01 to 91
If _IsPressed($i, $dll) Then
........
EndIf
Next
Хотелось чтобы были предусмотрены все нажатия на клавиатуре и на мышке, но, кроме одного - SHIFT (с обоих сторон).
----------------------
P.S
Переделал полностью (кроме самой главной функции от amel27) скрипт для перекодировки скриптов в целях помещения их в форуме (в разукрашенном виде :) )... получилось полностью автоматизировать весь процессс - теперь не нужно самому экспортировать скрипт au3 в xml формат, это сделает автоматический сам скрипт, нужно всего лишь указать файл скрипта (*.au3), и в процессе (до процесса) обработки, он будет экспортирован в xml формат - Для этого редактор SciTE должен быть в дефолтной папке AutoIt'а, т.е путь берётся относительно @AutoItExe:
$SciTEPath = StringTrimRight(FileGetShortName(@AutoItExe), StringLen(StringRegExpReplace(@AutoItExe, "^.*\\", ""))) & "SciTE\SciTE.exe"
Также вместо того, чтобы открывать файл с результатом, результат выводится в гуи (в Edit поле), а также есть возможность очистить результат (не закрывая гуи), и выбрать другой скрипт для обработки... имхо, получилось довольно оригинально!
И ещё, теперь данные для последнего используемого скрипта (и файла в который будет помещён результат), вписываются в конец самого скрипта, и считываются как с файла конфигурации (*.ini), мне кажется так надёжнее. Так что компилировать скрипт нет смысла, а если есть желание, то лучше исключить из скрипта эту функцию.
Скачать архив со скриптом можно тут (http://files.myopera.com/Creat0R/AutoIt/Au3ToPst_1.1.zip)
Michail77
24-11-2006, 20:51
2 Creat0R
БИГ СЕНКС.
И ещё вопросик.как запустить на установку файл *msi. речь идёт про касперского антивирус 6.0.300
с 5х проблем не было. run-ом всё нормально ставилось а тут....
Sanja Alone
25-11-2006, 00:13
Michail77
как запустить на установку файл *msiВ начале темы это уже обсуждалось - посты #79 (http://forum.oszone.net/showpost.php?p=417364&postcount=79), #80 (http://forum.oszone.net/showpost.php?p=417402&postcount=80), #82 (http://forum.oszone.net/showpost.php?p=417530&postcount=82), #89 (http://forum.oszone.net/showpost.php?p=418474&postcount=89), #90 (http://forum.oszone.net/showpost.php?p=418676&postcount=90). Если запуск будет производиться в тихом режиме, то нужно исп-ть RunWait вместо Run.
P.S. Не забываем юзать поиск по теме...
Michail77
26-11-2006, 12:41
2 Creat0R
Спасибо.
Приведи пожалуйста пример с “запускает” внешние модули\приложения...
2 Sanja Alone
Спасибо,помогло.
Michail77
пример с “запускает” внешние модули\приложения...
Просто имел в виду, что нужно убедиться, что запущенный тобой процесс (екзешник к примеру), не запускает другие процессы. Т.е например, ты запускаешь Setup.exe, запустил допустим так - RunWait("Setup.exe", "", @SW_HIDE), но этот установщик построен так, что на каком то этапе, он запускает какой то внутренний его процесс (заранее распоковав файлы во временный каталог), а сам закрывается, и тогда скрипт будет “считать” что запущены им процесс окончен, и не будет “ждать”, ведь ему не известно что запустился другой процесс... поэтому желательно проверить так ли это (просто запусти нужный установщик, и смотри в менеджере процессов какие дополнительные процессы запускаются), и если да, то нужно соответственно прописать определение в скрипте...
RunWait("Setup.exe", "", @SW_HIDE) ;Запуск главного установщика
ProcessWait("Имя_допол._процесса", 120) ;Ожидание дополнительного процесса (120 секунд) - это если мы определили что он запускается
If ProcessExists("Имя_допол._процесса") Then ProcessWaitClose("Имя_допол._процесса") ;Если процесс запустился, то ждём его окончания (закрытия)
Sanja Alone
27-11-2006, 21:47
Michail77
Creat0R
запускает другие процессыВ тему - посмотрите, как пришлось извратиться в скрипте установки Photoshop CS2 (http://sanjaalone.h15.ru/files/autoit-pscs2.zip) по причине подобных выкрутасов.
Michail77
28-11-2006, 11:03
Вопрос.Можно ли сделать так чтобы в Msgbox была фоновая картинка,т.е есть примитивный код:
Msgbox (0, ".........................." &@CRLF& "............................." и т.д
Нужно чтобы была фоновая картинка а поверх неё писался бы текст как в обычом Msgbox-е
Как это сделать?
И ещё такой вопрос.Как запустить *.bat? Сделал компактный Office 2003. занимает 105мб места.
Если пишу так Run(RunWait) ("office/setup.bat") то появляется и сразу исчезает окно Dos-эмулятора.
Как сделать правильно чтобы всё работало?
Заранее спасибо.
Michail77
Можно ли сделать так чтобы в Msgbox была фоновая картинка
Не думаю что это возможно... для таких задачь есть гуи, в котором довольно просто можно построить тот же MsgBox, и гараздо функциональнее.
Как запустить *.bat?
Как обычное приложение...
Если пишу так Run(RunWait) ("office/setup.bat") то появляется и сразу исчезает окно Dos-эмулятора
Попробуй писать полный путь, и\или изменить рабочий каталог (FileChangeDir("Папка_батника")), ну или писать рабочий каталог во втором параметре команды Run ("Setup.bat", "путь_к_папке_батника").
Я обычно запускаю батник (хотя стараюсь выполнять его функции в самом скрипте) таким образом:
RunWait(@ScriptDir & "\Batnik.bat", "", @SW_HIDE)
Или можно просто выполнить нужные команды сразу используя переменную ком. строки (cmd.exe)...
Run(@ComSpec & " /c start .....", "", @SW_HIDE)
------------------------
По поводу MsgBox'ов (и не только), у меня тоже есть один вопрос...
-Возможно ли привязать MsgBox, или любое из окон вызываемое для выбора/сохранения файла/папки (FileSelectFolder к примеру), к окну гуи? т.е чтобы при вызове одного их этих окон, оно было уже как бы дочерним окном гуи, и чтобы не было доступа к родительскому окну (гуи) до тех пор пока не закроется это-дочернее окно. Знаю что для обычных, гуивских дочерних окон, можно прописать как последний параметр переменную определяющую относительность к родительскому гуи, и также нужно неитрализовать родительский гуи макросом @SW_DISABLE, но как такое же сделать с окнами вызыванными по FileSelectFolder, FileOpenDialog, FileSaveDialog или даже тот же MsgBox? для этих окон вроде нет такого параметра, который определял бы их относительность к гуи.
Всем добрый день!
Господа, вопрос, возможно, глупый, но может ли скрипт написаный с помощью AutoIt работать на компьютере к которому не подключен монитор?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.