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

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

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

(*.*)


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

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

Отправлено: 00:02, 05-02-2006

 

Googler


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

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


Цитата Creat0R:
если к примеру строка будет заканчиваться точкой »
ну это лечится как раз легко и без особых изменений в шаблоне
Код: Выделить весь код
$sPath = StringRegExpReplace($sPath, '\.[^.\\]{2}(\.[^.\\]{0,4})?$', '')
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:56, 06-05-2008 | #491



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

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


Аватара для TERMINAL

Ветеран


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

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


Цитата amel27:
генерятся случайным образом при создании/форматировании тома, соответственно если с диска сделать образ, подправить в редакторе типа UltraISO и залить обратно на болванку серийник не изменится »
проблема в том что он даже при подправке меняется-как выйти с такой ситуации или где увидить заранее этот серийник?!

-------
Автоматизация прежде всего....


Отправлено: 11:07, 07-05-2008 | #492


Googler


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

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


Цитата TERMINAL:
он даже при подправке меняется »
AFAIK серийник для томов на HDD/FDD можно поменять программно, но для CD/DVD все сложней и походу зависит от программ прожига... К примеру, MagicISO заявляет о такой фиче, но проверить самому не было случая.

Отправлено: 12:39, 07-05-2008 | #493


Аватара для TERMINAL

Ветеран


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

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


Цитата amel27:
проблема в том что он даже при подправке меняется-как выйти с такой ситуации или где увидить заранее этот серийник?! »
Там тоже не показывает.....

Возможно ли вывести содержимое маленького текстового файла через команду MsgBox?

-------
Автоматизация прежде всего....


Отправлено: 15:22, 07-05-2008 | #494


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата amel27:
это лечится как раз легко и без особых изменений в шаблоне »
Спасибо, но теперь проблема с точками на конце второго расширения , т.е если они как бы символы самого расширения... в общем ладно, не страшно, всё ровно это не корректное расширение файла, хотя последний вариант в моём посте отрубает нормально расширения .

TERMINAL,
Цитата TERMINAL:
вывести содержимое маленького текстового файла через команду MsgBox? »
Код: Выделить весь код
MsgBox(64, "", FileRead("File.txt"))
?

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

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

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


Отправлено: 15:51, 07-05-2008 | #495


Ветеран


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

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


Помомгите решить проблемму. Есть скрипт, который делает листинг файлов на всех жёстких дисках по маске и записывает результат в файл. Так вот отрабатывается он как-то странно, периодически не отрабатываются некоторые из масок и часто пишется не в той кодовой станице, хотя команда на изменение кодовой страницы добавлена. Сперва думал что вся проблемма в маленьком слипе между циклами, но при увеличении времени ситуация не меняется. Скрипт то работает нормально то нет.
Код: Выделить весь код
Opt("ExpandEnvStrings", 1)
Opt("ExpandVarStrings", 1)

$tmpfle = @WindowsDir&'\Temp\files.tmp'
Call ("Listbase", "*.doc")
Call ("Listbase", "*.xls")
Call ("Listbase", "*.ppt")

;--- Function ------
func ListBase($ext)
;Получаем буквы имеющихся жёстких дисков
$drives = DriveGetDrive("FIXED")
	If @error Then Exit
	;По очереди открываем каждый жёсткий диск
	For $i=1 to $drives[0]
		;Получаем листинг файлов для текущего расширения на текущем диске и записываем его в файл
		$dr=$drives[$i]&'\'&$ext
		Run('%Comspec% /c chcp 1251 | dir "$dr$" /s /b >> $tmpfle$','',@SW_HIDE)
		Sleep (500)
	Next
EndFunc
Причем вот такая функций работает нормально (решил просто слегка сократить код, т.к. на мой взгляд через команду echo сделать это проще и быстрее)
Код: Выделить весь код
;--- Func ----------------------------
func ListBase($ext)
;Получаем буквы имеющихся жёстких дисков
$drives = DriveGetDrive("FIXED")
	If @error Then Exit
	;Открываем файл со списком
	$file = FileOpen($tmpfle, 1)
	;По очереди открываем каждый жёсткий диск
	For $i=1 to $drives[0]
		;Получаем листинг файлов для текущего расширения на текущем диске
		$dr=dir($drives[$i]&'\'&$ext)
		;Заполняем файл со списком построчно из предыдущего листинга
		For $k=1 To $dr[0]-1
			FileWrite($file, '"' & $dr[$k] & '"' & @CRLF)					
		Next
		$dr=0
	Next
	FileClose($file)
EndFunc

;Функция получения списка файлов по заданному пути для заданного расширения
Func dir($d)
 $dr = Run('%Comspec% /c dir "$d$" /s /b','',0,6)
 $f  = ''
 While not @error
  $f = $f & StdoutRead($dr)
 Wend
 Return (StringSplit(StringReplace($f,@LF,''),@CR))
EndFunc

Последний раз редактировалось EgOrus, 07-05-2008 в 23:28.


Отправлено: 23:16, 07-05-2008 | #496


Аватара для Creat0R

Must AutoIt


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

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


EgOrus,
Во-первых я бы не стал пользоваться «Opt("ExpandEnv/VarStrings", 1)», значительно замедляет обработку строк.

Можно перебирать сразу нужные маски...

Код: Выделить весь код
_ListFiles('*.doc|*.xls|*.ppt', @WindowsDir & '\Temp\files.tmp')

Func _ListFiles($sMasks, $sFile)
    ;Получаем буквы имеющихся жёстких дисков
    Local $aDrives = DriveGetDrive("FIXED")
    If @error Then Exit

    ;Если файл не существует, пишем в него типа сигнатуру для UTF-8 :)
    If Not FileExists($sFile) Then FileClose(FileOpen($sFile, 2 + 128))

    Local $hFileOpen = FileOpen($sFile, 1 + 64)
    Local $sDirList, $sDirMaskList

    For $i = 1 To $aDrives[0]
        ;Получаем строку с текущим диском и всеми масками
        $sDirMaskList = '"' & $aDrives[$i] & '\' & StringReplace($sMasks, '|', '" "' & $aDrives[$i] & '\') & '"'
        If @extended = 0 Then $sDirMaskList = '"' & $aDrives[$i] & '\' & $sMasks & '"'

        ;Получаем листинг файлов для текущих расширении на текущем диске
        $sDirList = _DirList($sDirMaskList)

        ;Заполняем файл со списком из листинга
        FileWrite($hFileOpen, $sDirList)
    Next

    FileClose($hFileOpen)
EndFunc

Func _DirList($sPath)
    Local $iStdOut = Run(@Comspec & ' /c chcp 1251 | dir ' & $sPath & ' /s /b', '', '', 6)
    Local $sStdOutRead = ""

    While 1
        $sStdOutRead &= StdoutRead($iStdOut)
        If @error Then ExitLoop
    Wend

    Return $sStdOutRead
EndFunc

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

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

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, 08-05-2008 в 01:44. Причина: Поправил код, забыл про проблему с кодировкой :)

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

Отправлено: 01:21, 08-05-2008 | #497


Ветеран


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

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


Цитата Creat0R:
Во-первых я бы не стал пользоваться «Opt("ExpandEnv/VarStrings", 1)», значительно замедляет обработку строк.
спасибо не знал, по поводу возможности одновременного использовании неск. масок с командой DIR даже не подумал, за это отдельное спасибо

к сожалению я именно поэтому от варианта чтения stdout отказался, что он работает несколько дольше чем сразу листинг в файл это заметно при большом общем количестве файлов и соотв. файлов по маске - порядка 10 тысяч, кроме того это проще и меньше кода. Проблемму с кодировками также не снимает - в результирующем файле получается мешанина из 866 и 1251 кодировок (это и непонятно, видимо не всегда отрабатывается chcp, или есть какой-то ньюанс с этой командой, которого я не знаю). А UTF заголовок не влияет на то, в какой кодировке записываются данные в этот файл.
Если не использовать chcp 1251 то все идет в 866 кодировке. Но тогда придется готовый файл конвретировать в 1251, что без сторонних утилит сделать проблемматично.
В предыдущем посте я писал что скрипт работает нормально, но это не так, просто запамятовал что не использовал chcp, а конечный файл перекодировал с помощью утилиты xcode.exe
Нужно это все для того, чтобы при дальнейшей вычитке результирующего файла с помощью функции _FileReadToArray($tmpfle, $aFiles) корректно обрабатывались русские имена, для этого и нужен UTF или 1251

Последний раз редактировалось EgOrus, 08-05-2008 в 09:44.


Отправлено: 09:23, 08-05-2008 | #498


Аватара для TERMINAL

Ветеран


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

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


Помогите, как и где можно узнать случайный номер имедж образа?

-------
Автоматизация прежде всего....


Отправлено: 10:28, 08-05-2008 | #499


Googler


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

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


TERMINAL
Цитата:
как и где можно узнать случайный номер имедж образа? »
смонтировать образ в DAEMON Tools


Creat0R
Цитата:
последний вариант в моём посте отрубает нормально расширения »
в постановке задачи ты выставил требования именно к расширению, поэтому логично именно его и описывать шаблоном... кроме того, так будет проще (впоследствии) читать код RegExp

Цитата:
это не корректное расширение файла »
ну дык потому и не включил точку в класс... я исходил из того, что точка - спецсимвол, а значит должна полностью обрабатываться регулярным выражением, при желании состав класса можно поменять, но исключение на "\" полюбому нужно оставить... возбежание сюрпризов. Кстати, хорошим стилем считается предварять группы, не используемые в подстановках, командой "?:", это ускоряет обработку... хотя и не влияет на результат.


EgOrus
Цитата:
без сторонних утилит сделать проблемматично »
для AutoIT это не проблема, вот две UDF преобразования OEM в ANSI и обратно:
Код: Выделить весь код
Func _StringANSI2OEM($strText)
    Local $buf = DllStructCreate("char["& StringLen($strText)+1 &"]")
    Local $ret = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($buf))
    If Not(IsArray($ret)) Then Return SetError(1, 0, '') ; ошибка DLL
    If $ret[0]=0 Then Return SetError(2, $ret[0], '') ; ошибка функции
    Return DllStructGetData($buf, 1)
EndFunc  ;==> _StringANSI2OEM

Func _StringOEM2ANSI($strText)
    Local $buf = DllStructCreate("char["& StringLen($strText)+1 &"]")
    Local $ret = DllCall("User32.dll", "int", "OemToChar", "str", $strText, "ptr", DllStructGetPtr($buf))
    If Not(IsArray($ret)) Then Return SetError(1, 0, '') ; ошибка DLL
    If $ret[0]=0 Then Return SetError(2, $ret[0], '') ; ошибка функции
    Return DllStructGetData($buf, 1)
EndFunc  ;==> _StringOEM2ANSI
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 08-05-2008 | #500



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход