Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите, как с помощью AutoIt, задать конкретному сетевому потключению общий доступ?

Отправлено: 16:08, 29-09-2006 | #381



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

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


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


По поводу моего предыдущего вопроса - Можно хотябы сделать так, чтобы символы _1 добовлялись вместе с другим расширением, и чтобы если уже есть такие файлы, за место _1 писать _2 и т.д?

Не могу понять почему, но вот этот пример не работает как ожидается (мной):

Код: Выделить весь код
$Number = 1
;Вписываю все файлы с расширением *.inibak в отдельный временный файл, и ставлю самый новый файл в верх списка
RunWait(@ComSpec & " /c dir /o -d /b /d *.inibak > test.tmp", "", @SW_HIDE)
;Беру число (восьмой символ справа у первой строки) с имени файла (для проверки).
$NumN = StringLeft(StringRight(FileReadLine("test.txt", 1), 8), 1)
FileDelete("test.txt")

;Если в файле test.tmp есть восьмой символ справа у первой строки, то переменной $Num присваевается значение ровняющееся этому символу (числу), плюс 1.
If $NumN <> "" Then $Number = $NumN+1

;Копируются все файлы с расширением *.ini в те же имена, плюс добовляется число, и расширение inibak.
	FileCopy("*.ini", "*_" & $Number & ".inibak")
При повторном вызове, начинается старая проблема - файлы дублируются.
Почему это происходит, и как исправить?

-------------

Есть ещё один, более выжный вопрос...

Как можно послать команду в винамп (Winamp), например, на проигрывание файла - не запуск винампа с ком. строкой ровняющейся имени файла, а именно вызов команды в самом винампе?

Как я понимаю, нужно использовать ControlCommand, но как узнать какую команду посылать?
Я пробовал так:

Код: Выделить весь код
ControlCommand("Player Window", "", "BaseWindow_RootWnd1", 4)
4, это для того, чтобы как-бы вызвать четвёртый пункт в "BaseWindow_RootWnd1" (в Au3Info это то поле, которое видно когда проводишь мышкой по пунктам “Играть”, “Пауза”, “Стоп” и т.д. - В “Восспроизведение”). Но это не срабатывает .
Я бы мог конечно просто посылать нажатие клавиш, но мне нужно чтобы это происходило при свёрнутом окне винампа, а для посылки сочетании клавиш, нужно сделать WinActivate, или чтобы окно само было активным.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 29-09-2006 в 21:09. Причина: Правка кода


Отправлено: 21:07, 29-09-2006 | #382


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Creat0R
Цитата:
Как можно переименовать все файлы с одним расширением, в те же имена, но до самого расширения добавить символы _1 - а если уже существуют такие имена, то вместо _1 нужно подставить _2 и т.д.
Алгоритм такой:
  1. Считываем список файлов по требуемой маске в массив ( $s=_FileListToArray($Dir,"*.dat",1) ). Можешь посмотреть пример реалтизации в моем скрипте автоустановки/активации игр Reflexive.
  2. Пробегаем по массиву (цикл For), попутно анализируя имена файлов: разделяем по точке на имя ($name) и расширение ($ext). Во вложенном цикле по $i проверяем на существование файлы с окончанием имени "_"&$i в целевом каталоге - FileExists, или среди других эл-тов массива $s - при пом. ф-ции StrInStr (тут как тебе больше нравится; первый вариант для параноиков - а вдруг кто-то во время работы скрипта создаст файл с "хвостом" имени "_"&$i). Затем переименовываем текущий файл aka анализируемый эл-т массива в $name&"_"&$i+1&"."&$ext.
Все.


Цитата:
а для посылки сочетании клавиш, нужно сделать WinActivate
Ты о Global Hotkeys слышал? Очень удобная штука, особенно когда играешься в какую-нить игру в полноэкранном режиме и нужно уменьшить громкость или перейти к след. трэку в Winamp-е.
Вот тебе код:
Код: Выделить весь код
;путь к Winamp
$WinampPath=RegRead ( 'HKEY_CURRENT_USER\Software\Winamp', '' )
If $WinampPath="" Then $WinampPath=@ProgramFilesDir & '\Winamp'
;включаем Global Hotkeys
IniWrite ( $WinampPath & '\winamp.ini', 'gen_hotkeys', 'enabled', '1' )
;запускаем Winamp
Run ( $WinampPath & '\Winamp.exe' )
;ждем загрузки процесса Winamp-а в память
ProcessWait ( 'Winamp.exe' )
;посылаем команду "Play"
Send ('^!{INS}')
Список хоткеев смотри в настройках Winamp-а (можно и свои сочетания прописать, причем, сразу в секцию [gen_hotkeys] файла winamp.ini).

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Последний раз редактировалось Sanja Alone, 30-09-2006 в 05:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 04:56, 30-09-2006 | #383


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Sanja Alone
Цитата:
Алгоритм такой:
Приогромнейшее спасибо.
В теории я понимаю как это сделать, но на практике, хоть убейте не получается. Вроде всё просто, уже как говорится, “рецепт написан”, но немогу сложить два плюс два. Если не трудно, покажи плиз как должен выглядеть скрипт, по вызову которого, будет делаться то что я спрашивал:

Цитата:
Как можно переименовать все файлы с одним расширением, в те же имена, но до самого расширения добавить символы _1 - а если уже существуют такие имена, то вместо _1 нужно подставить _2 и т.д.
Цитата:
Вот тебе код:
И на этом спасибо. Если ты не против, можно немного усовершенствовать :

Код: Выделить весь код
$WinampPath=RegRead ( 'HKEY_CURRENT_USER\Software\Winamp', '' )
If $WinampPath="" Then $WinampPath=@ProgramFilesDir & '\Winamp'

;Если Winamp небыл найден, то выводим соответствующее сообщение, и завершаем работу (скрипта)
If Not FileExists($WinampPath) Then
MsgBox(48, "error", "The Winamp ("& $WinampPath &") was not found")
Exit
EndIf

;Если Winamp не запущен, то запустим его
If Not ProcessExists("Winamp.exe") Then
Run($WinampPath & "\winamp.exe")
ProcessWait("Winamp.exe")
EndIf

;Если Global Hotkeys не установлен, то устанавливаем его через винамп
If IniRead($WinampPath,  'gen_hotkeys', 'enabled', '' )=0 Then
AutoItSetOption("WinTitleMatchMode", 4)
WinActivate("classname=BaseWindow_RootWnd", "")
WinWaitActive("classname=BaseWindow_RootWnd", "", 5)
Send("^p")
Send("{pgup}")
Send("{down 6}")
ControlCommand("classname=#32770", "", "Button2", "Check")
Send("{esc}")

   Send("!^{INS}")

;Если уже установлен, значит просто посылаем вызов команды проигрывания
Else
   Send("!^{INS}")
EndIf
Таким образом, ненужно прописывать в инишке - что позволит установить Global Hotkeys даже если винамп запущен.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 08:38, 30-09-2006 | #384


Аватара для garbals

Старожил


Сообщения: 422
Благодарности: 13

Профиль | Отправить PM | Цитировать


можно с помощью скрипта поменять имя рабочей группы и имя пользователя
мне нужно переделать ipset http://home.electronicinsanity.com/a...ipts/ipset.rar
тоесть добавить ввод рабочей группы и имя комтьютера

-------
Умному не нужно глупый не поймёт


Отправлено: 13:00, 30-09-2006 | #385


Аватара для garbals

Старожил


Сообщения: 422
Благодарности: 13

Профиль | Отправить PM | Цитировать


и ещё можно ли с помощью AutoIt скрипта настроить VPN соединение

-------
Умному не нужно глупый не поймёт


Отправлено: 13:12, 30-09-2006 | #386


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R

вариант рабочей функции переименования (без контроля входных параматров!) - номера ранее переименованных файлов не трогаются, новые номера считаются от максимального существующего (поэтому возможны "дыры" в нумерации). По ходу производится приведение всех номеров к единому формату по количеству знаков в номере.
Код: Выделить весь код
#include <File.au3>
#include <Array.au3>
#Include <String.au3>

_FilesFormatRename ("c:\Test", "_")

Func _FilesFormatRename ($sPath, $delim = "_")
	Local $i, $iMaxNum
	;Считываем список файлов в массив
	Local $FileList = _FileListToArray($sPath, "*", 1)
	;Создаем рабочий массив: 
	Local $WorkList [$FileList[0]+1] [6]
		;[][0] - имя файла без расширения
		;[][1] - имя файла без расширения и номера
		;[][2] - только расширение
		;[][3] - старый номер
		;[][4] - новый номер
		;[][5] - индекс для сортировки
	;Заполняем рабочий массив
	For $i=1 To $FileList[0]
		;выделяем имя, расширение и номер
		$WorkList [$i][0] = StringRegExpReplace ($FileList[$i], "\.[^.]*$","")
		$WorkList [$i][1] = StringRegExpReplace ($WorkList [$i][0], $delim & '[0-9]*$',"")
		$WorkList [$i][2] = StringMid ($FileList[$i], StringLen ($WorkList [$i][0]) +2)
		$WorkList [$i][3] = StringMid ($WorkList [$i][0], StringLen ($WorkList [$i][1]) +2) +0
		;формируем индекс для сортировки
		$WorkList [$i][5] = $WorkList[$i][1] & "." & $WorkList[$i][2] & "." & StringFormat ("%." & StringLen($FileList[0]) & "d", $WorkList[$i][3])
	Next
	;Сортируем массив по убыванию старого номера
	_ArraySort ($WorkList, 1, 1, $FileList[0]+1, 6, 5)

	;Основной цикл перенумерации
	For $i=1 To $FileList [0]
		;проверка на совпадение имени
		If $WorkList[$i-1][1] & "." & $WorkList[$i-1][2] = $WorkList[$i][1] & "." & $WorkList[$i][2] Then
			;проверка на совпадение номера
			If $WorkList [$i][3] = $WorkList [$i-1][3] Then
				;если номера совпадают, добавляем в конец списка
				$iMaxNum = $iMaxNum +1
				$WorkList [$i][4] = $iMaxNum
			Else
				;если номера отличаются зачем менять? 
				$WorkList [$i][4] = $WorkList [$i][3]
			EndIf
		Else
			;максимальный номер для нового имени
			$iMaxNum=$WorkList [$i][3]
			$WorkList [$i][4] = $iMaxNum
		EndIf
		;формируем индекс для сортировки
		$WorkList [$i][5] = $WorkList[$i][1] & "." & $WorkList[$i][2] & "." & StringFormat ("%." & StringLen($FileList[0]) & "d", $WorkList[$i][4])
	Next
	;Сортируем массив по убыванию нового номера
	_ArraySort ($WorkList, 1, 1, $FileList[0]+1, 6, 5)
	;Подготовка к переименованию
	FileChangeDir ($sPath)
	FileSetAttrib("*", "-R") 
	;Собственно цикл переименования
	For $i=1 To $FileList [0]
		;проверка на совпадение имени
		If ($WorkList[$i-1][1] & "." & $WorkList[$i-1][2]) <> ($WorkList[$i][1] & "." & $WorkList[$i][2]) Then	$iMaxNum = $WorkList [$i][4]
		FileMove ($WorkList [$i][0] & "." & $WorkList [$i][2], _ 
			$WorkList [$i][1] & $delim & StringFormat ("%." & StringLen ($iMaxNum) & "d", $WorkList [$i][4]) & "." & $WorkList [$i][2])
	Next
EndFunc

Последний раз редактировалось amel27, 01-10-2006 в 16:42. Причина: правка скрипта

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:48, 01-10-2006 | #387


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


garbals
Цитата:
мне нужно переделать ipset
дык там все делается через NETSH, а AutoIT только графическая оболочка... поэтому подбери сначала (в другой ветке форума) требуемую CMD-утилитку, а потом _RunDOS или RunWait.

Отправлено: 12:17, 01-10-2006 | #388


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Попробую перефразировать задачу:

В папке c:\test, есть 3 файла (кроме прочих) - myfile.dat, hisfile.dat, aourfile.dat - после запуска скрипта, нужно чтобы эти файлы (именно с таким расширением), переименовались в такие имена - myfile_1.dat, hisfile_1.dat, aourfile_1.dat.
Далее, при повторном запуске скрипта, если уже обнаружены такие файлы (myfile_1.dat, hisfile_1.dat, aourfile_1.dat), то именно их трогать ненужно, а нужно все остальные (с таким же расширением, и с таким же началом - до символа _), переименовать в такие файлы - myfile_2.dat, hisfile_2.dat, aourfile_2.dat, а те которые не совпадают в начале имени (до символа _), нужно переименовывать как и в первый раз (добовляя _1).
Точно такой способ, реализован в утилите 7-zip, там при расспаковке файлов (через командную строку), можно указать ключ, который позволит именно этим способом переименовывать существующие файлы.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:27, 01-10-2006 | #389


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
дело в том, что это не совсем то
ясен пень, я ведь делал для фоток
Цитата:
Этот пример переименовывает все файлы в указанном каталоге, а мне нужно чтобы переименовывались файлы с определённым расширением (чтобы в использовании функции возможно было указать рпасширение).
ну дык добавь в функцию еще один параметр "маски" и при загрузке в массив используй его вместо "*"
Цитата:
Также эта функция переименовывает всего один раз, при повторном запуске, если существуют такие-же файлы, но с последующей цифрой (на одну больше), то эти файлы не переименовываются в существующие, но на одну цифру выше...
звиняюсь, но нифига не понял... у меня переименовываются только те, которые НЕ содержат на конце знак разделителя с номером (aka _X), кстати именно поэтому в названии ф-ции присутствует слово "Format", т.е. происходит преобразование имени к определенному формату. Выравнивание по количеству знаков сделано для правильной сортировки, если не надо - можно убрать.
Цитата:
Точно такой способ, реализован в утилите 7-zip
такой, да не такой - в 7zip файл переименовывается ДО копирования в папку при условии наличия дубликата, т.к. в одной папке не могет быть двух одинаковых файлов, а у тебя все файлы изначально в одной папке и никаких конфликтов по сути нет - одна блаж (шутка).

FYI: скрипт подправил, теперь кол-во знаков в номере определяется автоматом

Отправлено: 17:06, 01-10-2006 | #390



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход