[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 26
Аватара пользователя
eNcub

Re: [архив - Часть 2] AutoIt скрипты

Сообщение eNcub »

schel4ok
Цитата:



А кто-нибудь знает как запускать inf файлы при помощи AutoIt?



вот функция, запускающая произвольную секцию INF-файла… К сожалению, прямой вызов функции
InstallHinfSection
из setupapi.dll не сработал… Изображение

Код:

Код: Выделить всё

Func _RunInfSection ($filepath, $section = 'DefaultInstall', $mode = 128)
    If Not(FileExists($filepath)) Then Return -1
    Local $ret = RunWait ('rundll32 setupapi,InstallHinfSection '& $section &' '& $mode &' '& FileGetLongName($filepath,1), @SystemDir, @SW_HIDE)
    Return $ret
EndFunc

proxy
Цитата:



от таких добавлений мои функции разростаются как на .....сникерсах и чипсах

хм, а свою dll тут ни как не создать? что просто вызывать когда необходимо?



чем не устраивает UDF?.. чтобы текст скрипта не разрастался, выделите функции в AU3-файл(ы) и загружайте через #include в заголовке скрипта...
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

amel27


Цитата:



у StringSplit() есть флаг, позволяющий использовать более одного символа для разбиения:



Я его пробовал, в этом случае он всё ровно добавляет в массив пустую строку...




Цитата:



уж коли зашла речь про StringRegExp(), то она вполне самодостаточна:



Этот пример должен возвращать массив с подделенными строками на @LF? возвращается массив с одним пустым, и при чём нудевым элементом Изображение



schel4ok

Я сразу не понял что речь идёт об установке файла, а не его запуске (это ведь требуется?)...

Для установки действительно будет полезна функция предложенная amel27 чуть выше, сам нечто подобным пользуюсь для установки Inf файлов (правда из батника Изображение ).
Аватара пользователя
gvshil

Re: [архив - Часть 2] AutoIt скрипты

Сообщение gvshil »

Помогите, пожалуйста, разобраться:



Код:

Код: Выделить всё

While 1
ControlClick  ('Abbyy FineReader Professional v8.0 keygen', '', 'Button4' ) ;генерация серийника
$GetSN=ControlGetText ('Abbyy FineReader Professional v8.0 keygen', '', 'Edit1' )
; ввод серийника
ControlSetText ('ABBYY FineReader 8.0 Professional Edition Try&Buy', '&Введите серийный номер', 'Edit1', $GetSN)
ControlClick('ABBYY FineReader 8.0 Professional Edition Try&Buy', '&Введите серийный номер', 'Button1')
;если серийник не верен, то появляется окно 
;('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.')
If WinExists ('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.') Then ContinueLoop
	If Not WinWaitActive ('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.',5) Then
	WinActivate ('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.')	
	ControlClick ('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.','Button1'); не закрывает окно
	; Send ( '{ENTER}' ) тоже не закрывает это окно
	EndIf
ExitLoop
Wend

Info окна



Код:

Код: Выделить всё

>>>> Window <<<<
Title:	ABBYY FineReader 8.0 Professional Edition Try&Buy
Class:	#32770
Position:	332, 333
Size:	366, 126
Style:	0x94C801C5
ExStyle:	0x00010101
>>>> Control <<<<
Class:	Button
Instance:	1
ID:	2
Text:	ОК
Position:	478, 422
Size:	75, 23
ControlClick Coords:	35, 11
Style:	0x50030000
ExStyle:	0x00000004
>>>> Mouse <<<<
Position:	178, 71
Cursor ID:	0
Color:	0xE9F1F5
>>>> StatusBar <<<<
>>>> Visible Text <<<<
ОК
Проверьте правильность введенного серийного номера.

Окно не закрывается и все идет по кругу, т.е. генерация и серийника и появление еще одного окна
Аватара пользователя
proxy

Re: [архив - Часть 2] AutoIt скрипты

Сообщение proxy »

Diamond, спасибо за подсказки, это очень интересно.

Сейчас считываю весь файл в gui List и от него "играю",

но как варинат с текстом в масиве.....может пригодится.



Creat0R - спасибо за пример, Diamond пару постов выше

уже показал твой пример. Я сейчас изменел первичный замысел

и сейчас не требуется замена тсрок, но на вооружение взял.





И ещё, скромный вопрос, auto IT это замечательно, но создовать

уж созданное думаю нет серьезного смысла.....может знакомы

с языком С++ , VB, ..... что лучше применить к изучению для

написания подобных приложений?



п.с.: я не сравниваю аутоИТ и другие языки, я хочу понять

какой, в целом, язык оптимальние и приняться к его изучению.
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

gvshil


Цитата:



Окно не закрывается и все идет по кругу



Иногда даже закрытие окна, на самом деле его не удаляет из списка существующих окон, а просто скрывает, поэтому думаю нужно проверять видимость окна...





Код:

Код: Выделить всё

If _WinIsVisible('ABBYY FineReader 8.0 Professional Edition Try&Buy', 'Проверьте правильность введенного серийного номера.') Then ContinueLoop
Func _WinIsVisible($Title, $Text)
    Return BitAND(WinGetState($Title, $Text), 2)
EndIf

proxy


Цитата:



что лучше применить к изучению для

написания подобных приложений?



Каких приложении?



AutoIt в основном предназначен для написания скриптов в помощь автоматизации запуска/установки приложении и ежедневных системных задач, но кроме этого на нём также возможно писать программы среднего (а может и высшего) уровня.




Цитата:



какой, в целом, язык оптимальние и приняться к его изучению



AutoIt написан на C++, думаю что именно изучение C++ и будет оптимальным языком программирования (это конечно, очень и очень Имхо Изображение).
Аватара пользователя
gvshil

Re: [архив - Часть 2] AutoIt скрипты

Сообщение gvshil »

Creat0R

Совсем я запутался.

Если не трудно, укажите куда конкретно в моем примере нужно вставить проверку.
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Вот такую библиотеку накалякал. Кому пригодится - пользуйтесь. Брать
здесь
.





Код:

Код: Выделить всё

Func _FileGetFileName($path)   ;  выделяет из полного пути и возвращает имя файла
Func _FileGetDirPath($path)   ;  выделяет из полного пути и возвращает имя директории
Func _GetDocumentsAndSettingsDir()	; возвращает полный путь к папке "Documents And Settings"
Func _GetProfilesPath()  ; возвращает массив строк с полными ключами к профилям пользователей этого компьютера
Func _LocalGroupExist($us)     ; Проверяет, существует ли ЛОКАЛЬНАЯ ГРУППА С ТАКИМ ИМЕНЕМ. возвращает ИСТИНУ/ЛОЖЬ
Func _LocalUserExist($us)	 ; Проверяет, существует ли ЛОКАЛЬНЫЙ ПОЛЬЗОВАТЕЛЬ С ТАКИМ ИМЕНЕМ. возвращает ИСТИНУ/ЛОЖЬ
Func _GetDomainOrWorkGroup()     ; ВЕРНЕТСЯ ИМЯ ДОМЕНА, если не в домене - то рабочей группы.
Func _GetWorkgroup()    ; ТОЛЬКО РАБОЧАЯ ГРУППА, ДЛЯ ДОМЕННОГО КОМПА ВЕРНЕТСЯ ПУСТАЯ СТРОКА
Func _JOINWORKGROUP($WG)	; вводит компьютер в Рабочую группу (имя передается параметром)
Func _ShareFolder($dir,$name, $comment = '')   ; создает общий ресурс.
Func _GetShareInfoByNumber($i)   ; Возвращает массив с инфой о шаре № $i или 0, если шар больше нет. В массиве по порядку ИМЯ, ПУТЬ, ТИП
Func _GetShareInfoByName($name)   ; Возвращает массив с инфой о шаре с данным именем или 0, если шар больше нет. В массиве по порядку ИМЯ, ПУТЬ, ТИП
Func _GetShareInfoByPath($path)   ; Возвращает массив с инфой о шаре данного каталога или 0, если шар больше нет. В массиве по порядку ИМЯ, ПУТЬ, ТИП
Func _NoActiveStaticIP()  ; возвращает истину/ложь. Если нет IP на рабочей, подключенной и т.п. карте
Func _AllNetworkDevicesDisabled()    ; возращает истину-ложь
Func _RunVBS($vbs)   ; запускает VBS-скрипт , переданный ему в кач-ве параметра.
Func _RenameComputer($name)	; переименовывает компьютер
Func _GetShortUserName($_user) ; возвращает короткое имя пользователя - т.е. для tega@office.local или OFFICE\tega результатом будет tega
Func _CreateLocalGroup($gn)	; создает локальную группу с указанным именем
Func _CreateLocalUser($us,$passw='')   ; создает локального пользователя с указанным именем и паролем
Func _ListLocalGroups($username)   ; Возвращает массив со списком локальных групп, членом которых является указанный пользователь
Func _JoinLocalgroup($us,$gr)    ; добавляет пользователя в указанную локальную группу.
Func _DomainUserInLocalGroup($UserName, $InGroup, $Domain='')    ; проверяет, является ли пользователь членом локальной группы
Func _GetStartedServicesAndDrivers()    ;  возвращает массив из имен запущенных сервисов и драйверов.
Func _GetStartedServices()    ;  возвращает массив из имен запущенных сервисов.
Func _GetStartedDrivers()    ;  возвращает массив из имен запущенных системных драйверов.
Func _HostIsOk($host_)  ; проверяет, пингуется ли хост. Возвр. истину-ложь
Func _TCPServiceIsOk($_addr,$_port=0); Проверяет порт путем установления к нему соединения.возращает истину-ложь . 
Func _UDPServiceIsOk($_addr,$_port=0) ; Проверяет порт путем установления к нему соединения.возращает истину-ложь . 
Func _GetDns(ByRef $_dns1,ByRef $_dns2)   ; заполняет переменные значениями и возвращает 0. В случае ошибки возвращает -1
Func _GetGateWay()  ; возвращает адрес шлюза по умолчанию
Func _GetIEProxy()   ; возвращает настройки прокси-сервера из Internet Explorer в виде строка "ip-адрес:порт"	
Func _StringIsIp($str)   ; проверяет, является ли строка ip-адресом. Возвр. истину-ложь
Func _StringIsEmpty($str) ; проверяет, является ли строка пустой. Возвр. истину-ложь
Func _HTTPget($url, $ProxyServer='', $ProxyUser = '' , $ProxyPass = '', $UseIntegratedSecurity = False)  ; возвращает текст, полученный методом get протокола HTTP. Устанавливает флаг ошибки @error=0 в случае успеха, -1 в случае неудачи.
Func _HTTPSetTimeOuts($tResolve = 30000,$tConnection = 30000,$tSendTimeout = 30000,$tReceive = 30000) ; устнавливает таймауты для HTTP-запроса
Аватара пользователя
Dirk Diggler

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Dirk Diggler »

Написал скрипт для архивирования.

если кому надо, поюзайте, расскажете, как оно....



вот, из ридмишки.


Цитата:



1. ВВЕДЕНИЕ



Когда-то я пользовался nnBackup. Но ограничение в 2Гб на архив меня убивало. И убивает посейчас. Кроме того, nnBackup, как и многие архиваторы, использующиеся для резервного копирования, не умеют архивировать открытые другими программами файлы(дружно вспомним базы 1С).

И вот, я решил устранить эти недостатки. Эти устранил. вроде бы. А вот чего этот скрипт не умеет, см. в самом конце.





2. ОПИСАНИЕ



Данный скрипт представляет собой "оболочку" для архиватора 7-zip(
www.7-zip.org
) начиная с версии 7.47.

Основное назначение - резервное архивирование данных.
Вложения
tegabackup.zip
(12.88 КБ) 0 скачиваний
tegabackup.zip
(12.88 КБ) 0 скачиваний
Аватара пользователя
Diamond

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Diamond »

Creat0R

Цитата:

Так вроде правильнее:

Если в файл добавить следущую комбинацию:

Код:

Код: Выделить всё

$file = FileOpen("test.txt",2)
FileWrite($file,"" & @CRLF)
FileWrite($file,"" & @CRLF)
FileWrite($file,"" & @CRLF)

То твоя функция возвращает массив из 7 пустых строк, хотя на самом деле строк 4.

Необходимо учитывать все возможные типы завершения строк, как я уже сказал, всего их 3. (...правда, редактор "Notepad.exe" об этом не знает.)

Если автор UDF-функции упустил из виду @CR - то ты, в данном случае проигнорировал @CRLF.

Опишу всё подробно:

Код:

Код: Выделить всё

$hFile = FileOpen("test.txt", 0)
$text = FileRead($hFile)
$text = StringRegExpReplace($text,"\r\n",@LF) ; заменяем все комбинации @CRLF на @LF
$text = StringRegExpReplace($text,"\r",@LF) ; заменяем все оставшиеся @CR на @LF
; И теперь, когда мы точно уверены что все строки завершаются только символом @LF - делим текст:
$aArray = StringSplit($text,@LF)

;~ Иными словами, всё это можно реализовать так:

Код:

Код: Выделить всё

$hFile = FileOpen("test.txt", 0)
$aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r", @LF), @LF)

А сама функция должна выглядеть так:

Код:

Код: Выделить всё

Func _FileReadToArray($sFilePath, ByRef $aArray)
    ;==============================================
    ; Local Constant/Variable Declaration Section
    ;==============================================
    Local $hFile = FileOpen($sFilePath, 0)
    If $hFile = -1 Then Return SetError(1)
    $aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r", @LF), @LF)
    FileClose($hFile)
    Return 1
EndFunc   ;==>_FileReadToArray

З.Ы. Сколько я не тестировал, всё время получается правильный массив. В чём моя ошибка? Изображение
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Diamond

Цитата:

Иными словами, всё это можно реализовать так:

Да, но разве @CRLF это не одно и тоже что @CR & @LF? если одно и тоже, тогда зачем проверять ещё и @LF, можно только лишь @CR заменить на @LF, и делить на @LF (ведь в переменной останутся только @LF'ы)...

$aArray = StringSplit(StringReplace(FileRead($hFile), @CR, @LF), @LF)

На выходе имеется тот же массив...

Но у меня проблема не в этом, а как раз в содержимом массива...

Цитата:

всё время получается правильный массив

А вот у меня даже с таким примером:

Код:

Код: Выделить всё

#include 
Dim $Array
$TestFileHandle = FileOpen("Test.txt", 2)
FileWrite($TestFileHandle, @LF & "Line1" & @CR & "Line2" & @CR & "Line3" & @CR & "Line4" & @LF)
FileClose($TestFileHandle)
_FileReadToArray("Test.txt", $Array)
_ArrayDisplay($Array)
Func _FileReadToArray($sFilePath, ByRef $aArray)
    ;==============================================
    ; Local Constant/Variable Declaration Section
    ;==============================================
    Local $hFile = FileOpen($sFilePath, 0)
    If $hFile = -1 Then Return SetError(1)
    $aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r", @LF), @LF)
    FileClose($hFile)
    Return 1
EndFunc

Почему то первый и последний элемент содержат символы перевода строки Изображение .
Ответить

Вернуться в «AutoIt»