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

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

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

Старожил


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

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


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





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


Руководство к действию по работе c AutoIt.

Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь.
Вот что нужно сделать последовательно:

1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1
2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1
3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n)
4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5
5) сохраняем все изменения и выводим отчёт о проделанной работе :-)

Заранее благодарен.

Отправлено: 05:05, 03-12-2006

 

Пользователь


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

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


Creat0R
Цитата:
Ещё один способ получить список существующих дисков на компьютере:
Интересный вариант! Как-то мне пришлось использовать перебор A-Z, но только в пакетном файле, поскольку другой альтернативы в батниках просто нет.
Вот ещё один способ, сделано через VBScript
Код: Выделить весь код
#CS
тип ресурса:
0 - неизвестное устройство
1 - устройство со сменным носителем.
2 - жёсткий диск.
3 - сетевой диск.
4 - CD-ROM.
5 - RAM-диск.
#CE

Dim $fso, $d, $dc, $s
$fso = ObjCreate("Scripting.FileSystemObject")
$dc = $fso.Drives
	For $d In $dc
		If $d.DriveType = "2" Then
			$s = $s & $d.DriveLetter & ": "
		EndIf
	Next
MsgBox(0,"",$s)



Отправлено: 23:09, 16-01-2007 | #131



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

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


Аватара для Creat0R

Must AutoIt


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

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


VelDmi
Цитата:
Где эту функцию взять?
Вот:

Код: Выделить весь код
Func _MsgBox ($mainGUI, $MsgBoxTitle, $MsgBoxText, $MsgBoxType)
    $ret = DllCall ("user32.dll", "int", "MessageBox", _
            "hwnd", $mainGUI, _
            "str", $MsgBoxText , _
            "str", $MsgBoxTitle, _
            "int", $MsgBoxType)
    Return $ret [0]
EndFunc

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

Вот рабочий пример с этой функцией:

Код: Выделить весь код
Opt("WinTitleMatchMode", 4)
Run("notepad.exe")
$NotPadTitle = "classname=Notepad"

WinWait($NotPadTitle, "", 5)
$hWnd = WinGetHandle($NotPadTitle)

_MsgBox($hWnd, "Attached MsgBox to Notepad", "I am attached to notepad, you must close me before continue work in notepad ;-)", 64)

Func _MsgBox($mainGUI, $MsgBoxTitle, $MsgBoxText, $MsgBoxType)
    $ret = DllCall ("user32.dll", "int", "MessageBox", _
            "hwnd", $mainGUI, _
            "str", $MsgBoxText , _
            "str", $MsgBoxTitle, _
            "int", $MsgBoxType)
    Return $ret [0]
EndFunc

P.S.
Я когда то писал:

Цитата:
надеюсь что когда нибудь и с этим делом вяснится что мы ошибаемся
Так и выяснилось!


Diamond
Цитата:
При создании пакетного Файла
Я только для примера привёл запуск с пакетника - это происходит не только с батника, например, в браузере Opera, если выделить текст, и запустить программу (из меню) с параметром %T (идентификатор выделенного текста в браузере), то содержащий кириллицу текст будет также криво помещён в буфер обмена. Очень хотелось бы это решить, но я уже многое перепробовал, и решения так и не нашл

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

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

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


Отправлено: 04:05, 17-01-2007 | #132


Старожил


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

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


Creat0R
Цитата:
то содержащий кириллицу текст будет также криво помещён в буфер обмена.
Если не ошибаюсь, предварительно нужно переключить раскладку клавиатуры на русский, тогда будет помещен нормально.

Отправлено: 08:33, 17-01-2007 | #133

mpn mpn вне форума

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


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

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


Народ!
Я повторяюсь, но очень интересует ответ на простой вопрос: у кого нибудь выполняется корректно строка $f=Run("telnet","",@SW_MAXIMIZE,3) ? У меня, если ее выполнить без последнего параметра, открывается окно telnet, в противном случае процесс закрывается через 0,5 сек после запуска. AutoIt v.3.2.0.1.

Отправлено: 09:49, 17-01-2007 | #134


Пользователь


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

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


Цитата:
процесс закрывается через 0,5 сек после запуска. AutoIt v.3.2.0.1.
нет неработает!

Отправлено: 10:40, 17-01-2007 | #135


Пользователь


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

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


Creat0R
Пробовал через WinApi - kernel32.dll там вроде бы должна быть нужная функция... В общем совсем запутался - ничего не получается.
Если у тебя проблемы только с Dos-кодировкой, то можно побить кракозябру её же собственным оружием.
Код: Выделить весь код
$ret="ЄхёЄ"
MsgBox(0,"",OEM_Decode($ret))

Func OEM_Decode($string)
$foo = Run(@ComSpec & " /c @echo " & $ret,"", @SW_HIDE, 2)
$line = StdoutRead($foo)
Return $line
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:51, 17-01-2007 | #136


Аватара для Creat0R

Must AutoIt


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

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


Diamond
Цитата:
можно побить кракозябру её же собственным оружием
Оригинально! Спасибо.

По поводу режима чтения из консоли (StdoutRead), если я ставлю 2 как последний параметр у команды Run, влияет ли это на то как будут выполняться команды ком. строки? т.е на что вообще это повлияет (кроме как на возможность чтения изх консоли)?

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

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

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


Отправлено: 14:22, 17-01-2007 | #137


Пользователь


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

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


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

Пример кода был взят из справки AutoIt v 3.2.2.0
$STDOUT_CHILD = 2 Необходима для получения StdoutRead() в первом цикле
$STDERR_CHILD = 4 Необходима для получения StderrRead() во втором цикле
Имена констант очевидно говорят об их предназначении (см. справка: StdoutRead и StderrRead)
Константы влияют только на возможность чтения потока из консоли. При этом возможность сохраняется до тех пор, пока ты делаешь запросы StdoutRead(), вплоть до закрытия самой консоли.
Код: Выделить весь код
; Demonstrates StdoutRead()
#include <Constants.au3>

$foo = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
Wend

While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    ;MsgBox(0, "STDERR read:", $line)
Wend

MsgBox(0, "Debug", "Exiting...")
Понятно, что разработчики при написании справки не подумали о нас русских и, как следствие, о существовании кирилицы.
Исправляем этот недостаток заменой первой строки в коде:
Код: Выделить весь код
$foo = Run(@ComSpec & " /c graftabl 1251 | dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

Отправлено: 20:48, 17-01-2007 | #138


Аватара для Creat0R

Must AutoIt


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

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


Как можно изменить функцию _ChooseColor(), чтобы можно было прикрепить окно выбора цвета к гуи?
Я пробовал в DllCall добавить параметр ..."hwnd", $Gui...., но функция ругается на сбой в скрипте и не хочет запускаться - возможно ли это как то решить?

Diamond
Цитата:
Эта Функция в её текущем виде не предназначена для чтения из консоли
Я вкурсе , пример из справки я уже иследовал, поэтому и появился вопрос, влияет ли запуск ком. строки в режиме чтения, на выполнение команд ком. строки (без всякой связи с кириллицей, это был не касающийся этого вопрос).

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

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

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


Отправлено: 21:12, 17-01-2007 | #139


Пользователь


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

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


Три способа определить - является ли файл папкой:
P.S.
Возможно, для многих это не новость, и всё-таки...
Код: Выделить весь код
;~ Путём получения атрибутов
;~ Возвращает положительное число если папка существует, иначе 0
Func FolderExist($name)
$Folder=StringInStr(FileGetAttrib($name),"D")
Return $Folder
EndFunc

;~ С помощью файла "nul" присутствующего в каждой папке
;~ Возвращает 1 если папка существует, иначе 0
Func _FolderExist($name)
$Folder=FileExists($name & "\nul")
Return $Folder
EndFunc

;~ С помощью функции VBScript
;~ Возвращает 1 если папка существует, иначе 0
Func VbFolderExist($name)
$fso=ObjCreate("scripting.filesystemobject")
$Folder=Abs($fso.FolderExists($name))
Return $Folder
EndFunc
Creat0R
Цитата:
без всякой связи с кириллицей, это был не касающийся этого вопрос
В любом случае, исправленный код может оказаться полезным и для других участников форума.
А всё-таки кракозябры были не связаны с буфером обмена или AutoIt. А то, я уж чуть было не усомнился в эфективности способа который я предложил i_mihal
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:14, 18-01-2007 | #140



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] 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.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход