Autoit диалог выбора файла
Предоставляю совершенно небольшой скрипт на AutoIt для "нестандартного" использования диалога открытия файла.
Предпосылки использования: проблематичность при ассистировании пользователя Windows-7 (при подключении в его сеанс Помощником - Offer Remote Assistance) броузинга файловой системы сетевых ресурсов серверов под правами своей админ-учетки для, например, запуска инсталляций либо изменения недоступных пользователю файлов его машины.
Одним из вариантов броузинга "на скорую руку" при подключении Ассистентом является запуск от имени своей админ-учетки какого-либо приложения, например, "notepad.exe", переход в нём к диалогу открытия файлов, выбор типа файлов "All files" - и можно работать с файловой системой под своими правами и даже запускать файлы на исполнение - аккуратным кликом ПКМ на файле и выборе "Open/Install/.." и стараться случайно не открыть exe-шку в самом блокноте.
Вот, для упрощения аналогичных действий (запуск exe-шки "под собой" с запуском в ней "Open. ") и был набросан на AutoIt скрипт.
Скрипт Run_FileOpenDialog.au3 скомпилирован (AutoIt 3) в Run_FileOpenDialog.exe, ложится на сетевой ресурс доступный всем пользователям домена, при подключении Ассистентом к пользователю, работающему под Windows-7, переходим к этому ресурсу и с удерживанием Shift запускаем Run_FileOpenDialog.exe от своего имени.
Почему именно AutoIt? - Это для того, чтобы автоматом повышать админские привелегии запущенного приложения, т.е., кроме того, что приложение запущено от имени другой учетки, оно еще работает и как "Run as Administrator".
Во-первых, повышает админские привелегии - наличие подтверждающего запроса зависит от настроек уровня UAC в системе пользователя.
Во-вторых, если скрипту параметром был передан некий сетевой путь (при его запуске на своей Win-7 из других скриптов, уже работающих под админ-учеткой, лоя броузинга удаленных ресурсов) проверяет наличие этого пути, т.е. при доступе, например, к системной шаре \\компьютер\C$, проверяется по сути сетевая доступность ресурса.
В-третьих, в циклическом виде запускается диалог открытия файла по указанному пути, т.е. можно как обычно - удалять/копировать файлы, запускать/открывать их по правой клавише мыши, но, если был двойной клик - ЛКМ, то скрипт предложит запустить файл на исполнение и сразу же повторно переоткрывается "open dialog" в последней папке.
В скрипте можно добавить свои шаблоны наиболее часто используемых типов файлов для быстрой "фильтрации" содержимого файловой системы.
Отображает диалог сохранения файла.
FileSaveDialog ( "title" , "init dir" , "filter" [, options = 0 [, "default name" [, hwnd ]]] )
title | Заголовок диалогового окна. |
init dir | Каталог, который будет открыт изначально в диалоговом окне. |
filter | Типы файлов, доступные для выбора. Например (см. также примечания): "Все (*.*)" "Текстовые файлы (*.txt)" "Все (*.*)|Рисунки (*.bmp;*.jpg;*.jpg)|Видео файлы (*.avi;*.mpg)" |
options | [необязательный] Опции диалога: сложите необходимые значения, чтобы использовать опции вместе. 2 = Путь должен существовать (если пользователем был выбран путь, оканчивающийся обратным слешем) 16 = Выдать запрос на перезапись файла |
default name | [необязательный] Имя файла, которое будет выбрано при создании диалога. По умолчанию нет (""). |
hwnd | [необязательный] Дескриптор окна для использования в качестве родительского по отношению к этому диалоговому окну. |
Успех: | Возвращает полный путь и имя выбранных файлов. Результат для нескольких объектов: "Каталог|Файл1|Файл2|. " |
Ошибка: | Устанавливает значение @error |
@error : | 1 - Ошибка при выборе файла. |
2 - Неправильный фильтр. |
Разделяйте фильтры выбора типов файлов с помощью точки с запятой, как указано в примере.
Если необходимо использовать несколько групп фильтров, следует разделять их с помощью символа "|".
Если указано имя файла по умолчанию, опции диалога также должны быть указаны. Если нет необходимости их использовать, оставьте значение параметра равным 0.
Специальные каталоги Windows (такие как "Мои Документы") могут быть заданы корневыми при использовании правильного CLSID, указанного в приложении.
@WorkingDir изменяется при удачном выполнении функции.
; иные спец-каталоги смотрите в "Приложения --> CLSID" и в "Макросы каталогов"
$MyDocsFolder = "::"
$var = FileSaveDialog ( "Выберите имя." , $MyDocsFolder , "Скрипт (*.aut;*.au3)" , 2 )
; параметр 2 = диалог остаётся пока не выбран валидный путь или файл
; Множественная группа фильтров (категорий типов файлов)
$var = FileSaveDialog ( "Выберите имя." , $MyDocsFolder , "Скрипт (*.aut;*.au3)|Текстовый файл (*.ini;*.txt)" , 2 )
; параметр 2 = диалог остаётся пока не выбран валидный путь или файл
Отображает диалог открытия файла.
FileOpenDialog ( "title" , "init dir" , "filter" [, options = 0 [, "default name" [, hwnd ]]] )
title | Заголовок диалогового окна. |
init dir | Каталог, который будет открыт изначально в диалоговом окне. |
filter | Типы файлов, доступные для выбора. Например (см. также примечания): "Все (*.*)" "Текстовые файлы (*.txt)" "Все (*.*)|Рисунки (*.bmp;*.jpg;*.jpg)|Видео (*.avi;*.mpg)" |
options | [необязательный] Опции диалога: сложите необходимые значения, чтобы использовать опции вместе. 1 = Файл должен существовать (если пользователем был выбран файл?) 2 = Путь должен существовать (если пользователем был выбран путь, оканчивающийся обратным слешем) 4 = Разрешить выбор нескольких объектов 8 = Выдать запрос на создание нового файла (если не существует) |
default name | [необязательный] Имя файла по умолчанию, которое будет выбрано при создании диалога. По умолчанию нет (""). |
hwnd | [необязательный] Дескриптор окна для использования в качестве родительского по отношению к этому диалоговому окну. |
Успех: | Возвращает полный путь и имена выбранных файлов. Результат для нескольких объектов: "Каталог|Файл1|Файл2|. " |
Ошибка: | Устанавливает значение @error |
@error : | 1 - ошибка при выборе файла. |
2 - неправильный фильтр. |
Разделяйте фильтры выбора типов файлов с помощью точки с запятой, как указано в примере.
Если необходимо использовать несколько групп фильтров, следует разделять их с помощью символа "|".
Если указано имя файла по умолчанию, опции диалога также должны быть указаны. Если нет необходимости их использовать, оставьте значение параметра равным 0.
Специальные каталоги Windows (такие как "Мои Документы") могут быть заданы корневыми при использовании правильного CLSID, указанного в приложении.
@WorkingDir изменяется при удачном выполнении функции.
$message = "Удерживайте клавиши Ctrl или Shift, чтобы выбрать несколько файлов."
If @error Then
MsgBox ( 4096 , "" , "Не выбрано ни одного файла" )
Else
$var = StringReplace ( $var , "|" , @CRLF )
MsgBox ( 4096 , "" , "Вы выбрали " & $var )
EndIf
; Множественная группа фильтров (категорий типов файлов)
$message = "Удерживайте клавиши Ctrl или Shift, чтобы выбрать несколько файлов."
If @error Then
MsgBox ( 4096 , "" , "Не выбрано ни одного файла" )
Else
$var = StringReplace ( $var , "|" , @CRLF )
MsgBox ( 4096 , "" , "Вы выбрали " & $var )
EndIf
Вопрос, делаю прогу с графической формой. сразу же вопрос к сообществу, почему у меня "ISN AutoIT Studio+ v1.02" частично на немецком?? Еще вопрос, где включить отображение ошибок в данной программе разработки?
Вопрос по существу: как правильно реализовать на форме и в коде диалог выбора файла? Заранее благодарен.
P.S. во вложении файлы проекта.
Вложения
joiner
Модератор
Larystyle
Новичок
AutoIT Гуру
joiner
Модератор
по ссылке ясно все написано. если читать текущую справку, то там на не нашем написано. есть переводчики.
потом привязать к кнопке - смотреть справку раздел GUI
и еще - есть поиск по форуму. кучи примеров
Larystyle
Новичок
Ошибка в 9 строке:
9. FileOpenDialog ( "Выберите файл", "D:\DB\Learn\", "Текстовый файл" *.txt, 1+4, "");
AutoIT Гуру
Larystyle
Новичок
Подскажите пож-та, что делает эта строка, и что дает? Вставил даную строку, выдает ошибку, см вложение.
Код полностью:
P.S. как тут на форуме вставить код спойлером?
Вложения
AutoIT Гуру
У Вас он ругается на название переменной, нельзя в названии использовать знак "-"( минус) замените название переменной на "$AntiSpam_Search" или как-то иначе .
Larystyle
Новичок
"AntiSpam-Search.isf" - это не переменная а подключаемый модуль моей формы, то есть имени формы в AutoIT, нельзя давать названия файлам как вздумается?
Что то меня взяло сомнение по поводу ошибки в коде. закоментил весь код, кликаю зеленую треугольную кнопку на запуск формы и вот выдает:
Те ошибка на форме, где может быть? Поудалял все элементы и заново запустил-все равно ошибка ((
Вложения
joiner
Модератор
Garrett
Модератор
Предупреждение За нарушение правил форума (пункт В.11):
С уважением, ваш Глобальный модератор.
AutoIT Гуру
Так Вы откройте этот файл "Forms\AntiSpam-Search.isf" любым текстовым редактором и увидите, что там прописан код создания формы (окна Вашего с кнопочками итд со всеми элементами GUI) и вот уже в этом файле в строке , где создаётся форма
не корректное имя переменной , которую, возможно Вы руками и не писали, а за Вас её так создала Ваша среда разработки "ISN AutoIT Studio+ v1.02" .
Почему Вы не используете SciTe ? Поищите на форуме "SciTE4AutoIt3.exe" установите его вместо стокового "SciTe lite" - там много всяких "плюшек".
Larystyle
Новичок
AutoIT Гуру
joiner
Модератор
Larystyle
читай справку. ты даже не понял из-за чего была ошибка. про функцию файла тоже не читал.
пока сам не начнешь вникать толку не будет
Larystyle
Новичок
Благодарю за поддержку, пишу на аутоит впервые-смущает все, в том числе какие то глючки с формой в самом начала (. Итак данный код я просто привязываю к кнопке на форме например "ПОИСК"?
AutoIT Гуру
Да, всё верно. Для начального изучения AutoIt вы не удачно выбрали среду разработки, в идеале особенно по началу- лучше всё прописывать самому руками в SciTE , например, тогда и ошибок таких с переменными не будет, да и код Вам весь понятен будет.
Larystyle
Новичок
Да, всё верно. Для начального изучения AutoIt вы не удачно выбрали среду разработки, в идеале особенно по началу- лучше всё прописывать самому руками в SciTE , например, тогда и ошибок таких с переменными не будет, да и код Вам весь понятен будет.
Аutoit
Мы создаем множество переменных, которые используем для хранения различных фрагментов данных в наших скриптах. Но эта информация хранится в программе без возможности «вытащить ее». Более того, когда программа закрывается, информация теряется. Одним из способов получения информации, доступной извне, и сохранения ее на долго является создание файла и запись информации в него.
FileOpen
Во-первых, нам нужно «открыть» новый файл с помощью функции FileOpen (которую также можно использовать для открытия существующего файла).
FileOpen имеет два параметра: имя файла (которое должно включать путь к нашему файлу) и необязательный параметр «mode», используемый для определения определенных параметров, например, переписываем ли мы данные в файл, добавляем и т.д.
Одна строка кода создаст наш новый файл:
- Это макрос. Теперь нам нужно понять, что этот макрос является ярлыком, который предоставляет путь к каталогу, в котором находится наш скрипт. Если бы у нас не было этого ярлыка, нам пришлось бы использовать полный путь, такой как «c: \ documents and settings \ user \ files \ autoit\myfile.txt». Другое преимущество заключается в том, что наша программа может запускаться на компьютерах других людей, которые имеют разные папки и каталоги. Если их папки отличаются, ваша программа может не работать. Использование макроса гарантирует, что независимо от пути — ваш скрипт найдет его. Обратите внимание на использование амперсанда и обратную косую черту перед именем файла. Это добавляет обратную косую черту и имя файла в путь к скрипту.
- Это то, как мы навезем наш файл. В нашем случае «myfile.txt».
- Это дополнительный параметр режима. В этом случае мы используем 2, который сигнализирует функции, что мы хотели бы перезаписать все, что находится в файле.
FileOpen возвращает «дескриптор», который мы сохраняем в нашей переменной $ myFile, когда эта строка кода выполняется. Вы можете использовать этот дескриптор для последующих функций файла.
Читайте также: