|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. |
|
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
|
(*.*) Сообщения: 36491 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема. Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным. Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску) (он же прикреплен в шапке) Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
|
|
Отправлено: 07:56, 06-05-2008 | #491 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 753
|
Профиль | Отправить PM | Цитировать Цитата amel27:
|
|
------- Отправлено: 11:07, 07-05-2008 | #492 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:39, 07-05-2008 | #493 |
Ветеран Сообщения: 753
|
Профиль | Отправить PM | Цитировать Цитата amel27:
Возможно ли вывести содержимое маленького текстового файла через команду MsgBox? |
|
------- Отправлено: 15:22, 07-05-2008 | #494 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
TERMINAL, Цитата TERMINAL:
|
||
------- Отправлено: 15:51, 07-05-2008 | #495 |
Ветеран Сообщения: 628
|
Профиль | Отправить 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 ;--- 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
------- Последний раз редактировалось Creat0R, 08-05-2008 в 01:44. Причина: Поправил код, забыл про проблему с кодировкой :) Отправлено: 01:21, 08-05-2008 | #497 |
Ветеран Сообщения: 628
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
к сожалению я именно поэтому от варианта чтения 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 |
Ветеран Сообщения: 753
|
Профиль | Отправить PM | Цитировать Помогите, как и где можно узнать случайный номер имедж образа?
|
------- Отправлено: 10:28, 08-05-2008 | #499 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать TERMINAL
Цитата:
Creat0R Цитата:
Цитата:
EgOrus Цитата:
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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[архив - Часть 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 |
|