Войти

Показать полную графическую версию : [Архив - Часть 1.3] 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
09-04-2007, 14:14
GTeam
но если убрать инклуд то rundos не будет работать..
В твоём примере оно и так не будет работать, нужно после #Include поставить имя файла с которого будет браться функция _RunDos() (Process.au3)...

Но в данном случае можно и без этой функции обойтиться:

ShellExecute("http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe")

Ну или так:

Run(@ComSpec & " /c start http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe")

AxelM
09-04-2007, 14:40
Подскажите пожалуйста, как получить Product version файла. Я нашел только способ получения File version.

Creat0R
09-04-2007, 15:52
AxelM
как получить Product version файла.

Из справки:

filename Filename to check.
stringname [optional] name of the field to be retried from the header version file info.

stringname can be the basic one as :
Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion,
FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild


$ProductVersion = FileGetVersion($FileName, "ProductVersion")

;)

twincode
10-04-2007, 07:49
Creat0RКак понять с разделителями? через delims=xxx? тут немного другая ситуация, какую конкретно задачу нужно выполнить? на аутоите работа с файлами намного продвинутее чем в ком. строке
Задача такая нужно вывести net use в файл. Потом пропарсить его на предмет подцепленных дисков и если присутствует меп на определенный серве перемепить его на другой.
Написал батник но он на 98 работать не будет из-за расширенных функций [ SetLocal enabledelayedexpansion ].Хотел переделать под au3,только вот как net use парсить не представляю.
вот батник

@echo off
IF "%1" == "" GOTO :ERR
IF "%2" == "" GOTO :ERR
IF %OS%==Windows_NT set key=/persistent:yes
IF exist c:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1\null set bat=c:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1
IF exist d:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1\null set bat=d:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1
IF exist e:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1\null set bat=e:\windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1
IF %OS%==Windows_NT set bat=%windir%\system32
set newshare=%bat%\newshare.bat
set source=%bat%\list_share.txt
net use >%source%

set oldserver=%1
set newserver=%2

setlocal
echo ::%oldserver%>%newshare%
for %%a in (%newshare%) do set "size=%%~za"
set /a "size=size-4"
set /a "size2=size+3"
echo ::%size% >%newshare%


echo ::Переменные заданы %oldserver% %newserver% >> %newshare%

SetLocal enabledelayedexpansion
for /F "eol=T tokens=1,2,3 skip=6 delims= " %%a in (%source%) DO (
set status=%%a
set status1=!status!
set letter=%%b
set letter1=!letter!
set server=%%c
set server1=!server:~2,%size%!
echo ::"!letter!","%oldserver%","!server1:~0,%size%!","\\%newserver%\!server:~%size2%,10!">>%newshare%

IF /i "%oldserver%" EQU "!server1:~0,%size%!" echo net use !letter! /del /y >>%newshare%
IF /i "%oldserver%" EQU "!server1:~0,%size%!" echo net use !letter! "\\%newserver%\!server:~%size2%,100!" %key% >>%newshare%
)
endlocal

call %newshare%
::IF %OS%==Windows_NT del %newshare%

@echo ***********************************************************
@echo * *
@echo * Программа завершила все операции!! *
@echo * Проверьте правильность переключения ресурсов с сервера: *
@echo * %oldserver% на новый сервер %newserver%
@echo * При появлении ошибок обратитесь к администраторам *
@echo * *
@echo ***********************************************************
pause
goto END

:ERR
@echo **********************************************************
@echo * *
@echo * Не передан параметр в программу!!! *
@echo * Парамеры запуска newmap [старый сервер] [новый сервер] *
@echo * Пример:newmap server1 server2 *
@echo * *
@echo **********************************************************
pause
:END

mariolast
12-04-2007, 11:30
Нету ли скрипта для установки программы Mobil Edit? С ключами тихая устанока не работает.

http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=19517&start=780#lt

amel27
16-04-2007, 06:04
twincodeесли присутствует меп на определенный серве перемепить его на другойМожет без NET USE устроит?$ABC = "cdefghijklmnopqrstuvwxyz"
$oldShare = "\\server1\share1"
$newShare = "\\server2\share2"

For $i=1 To StringLen ($ABC)
$drive = StringMid ($ABC, $i, 1) & ':'
$share = DriveMapGet ($drive)
If $share = $oldShare Then
DriveMapDel ($drive)
DriveMapAdd ($drive, $newShare)
EndIf
Next

amel27
16-04-2007, 08:01
Creat0RВозможно ли как то адаптировать твою API-функцию _FileSelectFolder() чтобы деактивировалась (disabled) кнопка ОК пр выбранных папках которые немогут содержать (для “нормальной” записи) данные (такие как “Мой компьютер”, “Корзина”, “Сетевое окружение”, “Панель управления” и т.п)? это реально?угу - нужно добавить флаг BIF_RETURNUNLYFSDIRS = 0x1 ;...
Local $ulf = BitOR (BitShift(BitAnd ($flags,1),-9), _
BitShift(BitAnd ($flags,2),-5), _
BitShift(BitAnd ($flags,4),-2), 1)
;...И конечно очень хотелось бы всё таки иметь возможность указываь заранее исходный каталог (Init Dir).понимаю, но к сожалению пока не вижу вариантов... :search: Я тут уже почти доделал подобную функцию на обычном ГУИ, но у меня ушло более 5-сот строк кода и кучу времени на то чтобы построить этот недо-механизм... в общем получается но кривовато, и кажется очень не надёжно.Количество строк пожалуй меньше не получится, но надежность можно повысить выделив в UDF специфические задачи хранения структуры каталогов в массиве, общее решение есть в любом учебнике по структурам данных, осталось только реализовать на AutoIT ;).

Creat0R
16-04-2007, 15:04
amel27
нужно добавить флаг BIF_RETURNUNLYFSDIRS = 0x1
Работает! Спасибо!
Правда теперь можно использовать только $flags=1, иначе оно не работает :(

осталось только реализовать на AutoIT
Пытаюсь, пытаюсь... (уже получилось код сократить до 150-ти строк :) ).

sattva
16-04-2007, 16:53
Подскажите как в AutoIT создать ярлык с зарание выбранной иконкой типа как в VB (Shortcut.IconLocation = WshShell.ExpandEnvironmentStrings("%SystemRoot%\system32\SHELL32.dll, 92"))

twincode
16-04-2007, 18:57
amel27Может без NET USE устроит?
Решение интересное.Спасибо.Задача правда немного другая.Бум считать что неизвестно на какую букву и на какой ресурс подмеплены пользователи.Нужно именно перемепить.

amel27
17-04-2007, 04:46
Creat0RПравда теперь можно использовать только $flags=1, иначе оно не работает хм... действительно, по ходу этот флаг работает только со старым стилем окна

ADD: на форуме сабжа нашел DLL-ку, позволяющую реализовать CallBack-функциив AutoIT... Если устроит такой вариант можно попробовать для случая стартового каталога в самопальном _FileSelectFolder().

sattva
Смотри в справке функцию FileCreateShortcut(), 6-й и 8-й параметры задают файл и номер иконки в файле.

twincode
если имя шары не меняется, то можно и так:$ABC = "cdefghijklmnopqrstuvwxyz"
$oldServer = "server1"
$newServer = "server2"

For $i=1 To StringLen ($ABC)
$drive = StringMid ($ABC, $i, 1) & ':'
$share = DriveMapGet ($drive)
If $share <> "" Then
$border = StringInStr ($share, '\' ,0 ,3)
$server = StringMid ($share, 3, $border-3)
$folder = StringMid ($share, $border)
If $server = $oldServer Then
DriveMapDel ($drive)
DriveMapAdd ($drive, '\\' & $newServer & $folder)
EndIf
EndIf
Next

Creat0R
18-04-2007, 02:41
amel27
Если устроит такой вариант можно попробовать для случая стартового каталога в самопальном _FileSelectFolder()
Устроит, почему бы и нет :), я хотя и не очень разбираюсь в Dll'ках, но мне кажется их использование довольно надёжно (или ошибаюсь?).

amel27
18-04-2007, 05:27
Creat0R
Ну... при использовании штатных библиотек (поставляемых с операционной системой) придется сначала внимательно прочитать MSDN, так как варианты вызова обычно зависят от множества факторов типа версии Windows и пр. Если все требования соблюдены, то теоретически проблем не должно быть. Касаемо самопальных библиотек (типа той с форума) - тут все на совести их разработчика :) .

kreol
18-04-2007, 13:27
я новичек в autoit
пытаюсь написать скрипт установки программы. дошел до окна, где нужно выбрать несколько чекбоксов и нажать "далее". Если все это делать с функциеей Send, и выставить побольше AutoItSetOption("SendKeyDelay", 150), товсе идет, а вот с функциеей ControlClick нет.
Флажки не ставятся, а сразу "Далее" (это если Send("!Д")) если Send("{ENTER}") или той же ControlClick просто стоит. До нажатия "далее" все работает. Я думал, что скрип выполняеться построчно ....Помогите разобраться

magnetikus
18-04-2007, 19:17
Флажки можно поставить пробелом. Перескакивать между элементами - ТАВ
Кстати кто нибудь знает как при компиляции в скрипт загнать свои собственные файлы и папки - пишу собственный инсталлятор

Creat0R
18-04-2007, 20:25
magnetikus
как при компиляции в скрипт загнать свои собственные файлы
См. в справке FileInstall() - на счёт папок не получится, нужно будет устанавливать файлы, и в процессе создавать папки (если в результате нужно чтобы файлы помещались в определённую папку).

kreol
19-04-2007, 15:35
Флажки можно поставить пробелом. Перескакивать между элементами - ТАВ
Я так и делал
Send("{DOWN}")
Send("{DOWN}")
Send("{SPACE}")
Send("{DOWN}")
Send("{DOWN}")
Send("{ENTER}")
Send("{DOWN}")
Send("{DOWN}")
Send("{DOWN}")
Send("{DOWN}")
Send("{SPACE}")
Send("{DOWN}")
Send("{DOWN}")
Send("{ENTER}")
Send("{ENTER}")
Меня интересуе, почему при использовании ControlClick начинает исполняться Send("{ENTER}"), а предшевствующие ей ControlClick прорускаються?!

Dirk Diggler
23-04-2007, 17:48
Как с пом. Autoit узнать список установленных обновлений ОС[и их версий] ?

amel27
24-04-2007, 09:44
Dirk Diggler
например, из реестра... не понял насчет версий, как вариант - найти соотв. CAT-файл и восстановить его дату#include <Array.au3>

$file = "C:\HotFixes.txt"
$aList = _GetHotFixes ()

$f = FileOpen ($file, 2)
For $i=1 To $aList[0][0]
FileWrite ($file, $aList[$i][0] & @CRLF & $aList[$i][1] & @CRLF & $aList[$i][2] & @CRLF & @CRLF)
Next
FileClose ($f)

Func _GetHotFixes ()
Local $i, $j, $k, $iKey, $jKey, $kKey
Local Const $root1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix"
Local Const $root2 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates"
Local $arrList[1] = [0], $arrHFix[1][3] = [[0,0,0]]
$i=1
While True
$iKey = RegEnumKey ($root1, $i)
If @error Then ExitLoop
$arrList[0]+=1
ReDim $arrList[$arrList[0]+1]
$arrList[$arrList[0]] = $iKey
$i+=1
Wend
$i=1
While True
$iKey = RegEnumKey ($root2, $i)
If @error Then ExitLoop
$j=1
While True
$jKey = RegEnumKey ($root2 & '\' & $iKey, $j)
If @error Then ExitLoop
If _ArraySearch ($arrList, $jKey, 1) > 0 Then
$arrHFix[0][0] +=1
ReDim $arrHFix[$arrHFix[0][0]+1][3]
$arrHFix[$arrHFix[0][0]][0]=$jKey
$arrHFix[$arrHFix[0][0]][1]=$iKey
$arrHFix[$arrHFix[0][0]][2]=RegRead ($root2 & '\' & $iKey & '\' & $jKey, 'Description')
If @error Then $arrHFix[$arrHFix[0][0]][2]=RegRead ($root2 & '\' & $iKey & '\' & $jKey, 'PackageName')
ElseIf StringRegExp ($jKey, '^SP[1-9]$') Then
$k=1
While True
$kKey = RegEnumKey ($root2 & '\' & $iKey & '\' & $jKey, $k)
If @error Then ExitLoop
If _ArraySearch ($arrList, $kKey, 1) > 0 Then
$arrHFix[0][0] +=1
ReDim $arrHFix[$arrHFix[0][0]+1][3]
$arrHFix[$arrHFix[0][0]][0]=$kKey
$arrHFix[$arrHFix[0][0]][1]=$iKey
$arrHFix[$arrHFix[0][0]][2]=RegRead ($root2 & '\' & $iKey & '\' & $jKey & '\' & $kKey, 'Description')
If @error Then $arrHFix[$arrHFix[0][0]][2]=RegRead ($root2 & '\' & $iKey & '\' & $jKey, 'PackageName')
EndIf
$k+=1
Wend
EndIf
$j+=1
Wend
$i+=1
Wend
Return $arrHFix
EndFunc

mrak1990
25-04-2007, 19:53
Сделал недавно скрипт, в котором на одной из стадий заменяются три файла (именно в таком порядке):

c:\windows\system32\dllcache\Notepad.exe
c:\windows\system32\Notepad.exe
c:\windows\Notepad.exe

У меня на компе при этом выскакивает сообщение о том, что системные файлы были изменины. Ну я засунул в конец скрипта следующий код:

WinWaitActive ( "Защита файлов Windows", "Файлы, нужные для правильной работы Windows" )
ControlClick ( "Защита файлов Windows", "Файлы, нужные для правильной работы Windows", 2 )
WinWaitActive ( "Защита файлов Windows", "Вы отказались от восстановления исходных версий файлов." )
ControlClick ( "Защита файлов Windows", "Вы отказались от восстановления исходных версий файлов.", 6 )

На моём компе всё ставится отлично. А на компе одного из знакомых сообщение не выскакивает. Только происходит замена моего файла на стандартный. Не знаю, что и делать. Единственное отличие между компами: на моём нет никаких заплаток, тогда как у знакомо есть выделенка и стоит куча обновлений.




© OSzone.net 2001-2012