|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. |
|
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
|
(*.*) Сообщения: 36560 |
Внимание! В связи с созданием отдельного форума по 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 |
|