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

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

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

Ветеран


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

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


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





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


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Аватара для SyCraft

Старожил


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

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


Вот что получаеться, но при компиляции вываливаеться с ощибкой, подскажи пожалуйста что я напутал?
Код: Выделить весь код
#include <GUIConstants.au3>

;Получаем переменные Opera AC
$AC_OPERA = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_OPERA")
$AC_SOURCH = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_SOURCH")

While 1
$msg = GuiGetMsg()
If $msg = $GUI_EVENT_CLOSE 
	Or $msg = $Close Then 
	ExitLoop

ElseIf $msg = $Start Then 
	GUISetState(@SW_HIDE)
TrayTip("Идет копирование файлов","Дождитесь окончания копирования файлов",1,1)

$FirstPath=GUICtrlRead($Input)
$SecondPath=GUICtrlRead($Output)

$Form1 = GUICreate("AForm1", 659, 352, 214, 146)
$Pic1 = GUICtrlCreatePic("D:\Project\Soft\Opera$\Create\WizModernImage-IS.BMP", 8, 0, 153, 345)

GUICtrlCreateLabel("Источник", 176, 8, 52, 17)
$Input = GUICtrlCreateInput("AInput1", 176, 24, 425, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Получатель", 176, 56, 63, 17)
$Output = GUICtrlCreateInput("AInput2", 176, 72, 425, 21, -1, $WS_EX_CLIENTEDGE)

$Bookmaarks = GUICtrlCreateCheckbox("ACheckbox1", 184, 112, 97, 17)
$Notes = GUICtrlCreateCheckbox("ACheckbox2", 184, 136, 97, 17)
$cookies = GUICtrlCreateCheckbox("ACheckbox3", 184, 160, 97, 17)
$wand = GUICtrlCreateCheckbox("ACheckbox4", 184, 184, 97, 17)
$vlink4 = GUICtrlCreateCheckbox("ACheckbox5", 184, 208, 97, 17)
$global = GUICtrlCreateCheckbox("ACheckbox6", 184, 232, 97, 17)
$download = GUICtrlCreateCheckbox("ACheckbox7", 184, 256, 97, 17)
$cache = GUICtrlCreateCheckbox("ACheckbox8", 184, 280, 97, 17)

$Start = GUICtrlCreateButton("AButton1", 328, 312, 113, 25)
$Close = GUICtrlCreateButton("AButton2", 544, 312, 105, 25)

GUICtrlCreateLabel("Закладки", 288, 112, 315, 17)
GUICtrlCreateLabel("Заметки", 288, 136, 315, 17)
GUICtrlCreateLabel("Куки", 288, 160, 315, 17)
GUICtrlCreateLabel("Пароли жезла", 288, 184, 315, 17)
GUICtrlCreateLabel("Набранные адреса", 288, 208, 315, 17)
GUICtrlCreateLabel("История посещений", 288, 232, 315, 17)
GUICtrlCreateLabel("История закачек", 288, 256, 315, 17)
GUICtrlCreateLabel("Кеш", 288, 280, 313, 17)
GUISetState(@SW_SHOW)

If GUICtrlRead($Bookmaarks) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\opera6.adr", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($Notes) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\notes.adr", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($cookies) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\cookies4.dat", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($wand) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\wand.dat", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($global) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\global.dat", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($download) = 1 Then
DirCreate("$SecondPath")
FileCopy("$FirstPath\profile\download.dat", "$SecondPath\profile\",1)
EndIf

If GUICtrlRead($cache) = 1 Then
DirCreate("$SecondPath")
DirCopy("$FirstPath\profile\cache4\", "$SecondPath\profile\cache4\",1)
EndIf

ExitLoop

EndIf
Wеnd

-------
Мой блог: Сделай то что хочешь из того что нравится!
----
Помощь проектам развивающихся в рамках OSZone.net


Отправлено: 16:12, 25-06-2006 | #181



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

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


Аватара для Creat0R

Must AutoIt


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

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


Всем доброго времени суток!

У меня возникла следущая проблема:

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

Код: Выделить весь код
$var = FileSelectFolder("Вибирите каталог...", "")

If @error Then
    Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(292,"?","Вы уверенны")
Select
   Case $iMsgBoxAnswer = 6;Yes

   Case $iMsgBoxAnswer = 7;No
EndSelect
Else
    $var = StringReplace($var, "|", @CRLF)
    MsgBox(4096,"","You chose " & $var)
    FileWrite ( "file.tmp", $var )
EndIf
Теперь вопрос:
Как я могу сделать так, что если в том окне, которое появится после нажатия на 'Отмена' (в первом окне), пользователь нажимает в нём 'Нет', то будет запущено первое окно снова. Т.е нужно как-то вернуться на метку, которая будет стоять перед выводом первого окна.

P.S:
Я знаю что существует команда Wend и она как-то связанна с командой While = - Но как ей пользоваться, т.е как её подставлять в скрипт, я беспонятия

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

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

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


Отправлено: 18:42, 06-07-2006 | #182


Аватара для Creat0R

Must AutoIt


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

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


Есть ещё вопрос:
Можно ли каким-то образом, конвертировать скрипт Bath (файла *.bat), в скрипт AutoIT?

Отправлено: 19:30, 06-07-2006 | #183


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


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

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


SyCraft
Цитата:
Вот что получаеться, но при компиляции вываливаеться с ощибкой, подскажи пожалуйста что я напутал?
Насажал ошибок, причем не только в каждом слове этого сообщения, но и в скрипте
В частности, неправильно пишешь имена переменных внутри строки:
вместо "$FirstPath\profile\notes.adr",
нужно писать $FirstPath&"\profile\notes.adr"
или "$FirstPath$\profile\notes.adr" (в последнем случае нужно задать Opt("ExpandVarStrings",1)).

Creat0R
1) Нужная тебе конструкция While... Wend подробно и с примерами описана в AutoIt Help. Лучше, чем там, тебе никто не объяснит.
2) Конверторов скриптов Bath в скрипт AutoIT нет и не будет.

Отправлено: 21:33, 06-07-2006 | #184


Аватара для Creat0R

Must AutoIt


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

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


bogomolv
Цитата:
1) Нужная тебе конструкция While... Wend подробно и с примерами описана в AutoIt Help.
Вот пример который описан в справке:

Код: Выделить весь код
Пример

$i = 0
While $i <= 10
     MsgBox(0, "Значение $i равно:", $i)
     $i = $i + 1
WEnd
С этого примера, и с описании которые в справке, мне трудно понять, каким образом в моём скрипте, будет возвращено управление на метку в начало скрипта?! я пробовал так, но не работает, пишет ошибка в команде wend:

Код: Выделить весь код
While $iMsgBoxAnswer = 7
$var = FileSelectFolder("Select a folder.", "")
If @error Then
Dim $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(292,"Msg","you sure?")
Select
   Case $iMsgBoxAnswer = 6 ;Yes

   Case $iMsgBoxAnswer = 7 ;No

EndSelect
Wend
Else
	$var = StringReplace($var, "|", @CRLF)
	
	MsgBox(64,".....","Вы выбрали:  " & $var)
	FileWrite ( "c.tmp", $var )
EndIf
Тут, где команда While $iMsgBoxAnswer = 7, нужно чобыы туда происходил переход в том случае, если была нажата кнопка No
Цитата:
Лучше, чем там, тебе никто не объяснит.
А может всё-таки ты сможешь лучше объяснить? плиз? - очень очень нужно.

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

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

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


Отправлено: 00:09, 07-07-2006 | #185


Аватара для SyCraft

Старожил


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

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


Ну вроде все исправил.. но тепрь такая проблема.. после нежатии кнопки начала копирования, копирование не происходит, просто выскакивает информационное окно о начале процеса все..
Не подскажите где я вновь учудил?
Код: Выделить весь код
#include <GUIConstants.au3>

;Получаем переменные Opera AC
$AC_OPERA = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_OPERA")
$AC_SOURCH = RegRead ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "AC_SOURCH")

$Form1 = GUICreate("AForm1", 659, 352, 214, 146)
$Pic1 = GUICtrlCreatePic("D:\Project\Soft\Opera$\Create\WizModernImage-IS.BMP", 8, 0, 153, 345)
$Bookmaarks = GUICtrlCreateCheckbox("Закладки", 184, 112, 97, 17)
$Notes = GUICtrlCreateCheckbox("Заметки", 184, 136, 97, 17)
$cookies = GUICtrlCreateCheckbox("Куки", 184, 160, 97, 17)
$wand = GUICtrlCreateCheckbox("Пароли жезла", 184, 184, 97, 17)
$vlink4 = GUICtrlCreateCheckbox("Набранные адреса", 184, 208, 97, 17)
$global = GUICtrlCreateCheckbox("История посещений", 184, 232, 97, 17)
$download = GUICtrlCreateCheckbox("История закачек", 184, 256, 97, 17)
$cache = GUICtrlCreateCheckbox("Кеш", 184, 280, 97, 17)
GUISetState(@SW_SHOW)

$Start = GUICtrlCreateButton("Go", 328, 312, 113, 25)
$Close = GUICtrlCreateButton("Exit", 544, 312, 105, 25)

GUICtrlCreateLabel("Источник", 176, 8, 52, 17) 
$Input = GUICtrlCreateInput($AC_SOURCH, 176, 24, 425, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Получатель", 176, 56, 63, 17)
$Output = GUICtrlCreateInput($AC_OPERA, 176, 72, 425, 21, -1, $WS_EX_CLIENTEDGE)

$SecondPath=GUICtrlRead($Output)
$FirstPath=GUICtrlRead($Input)

While 1
$msg = GuiGetMsg()
If $msg = $GUI_EVENT_CLOSE  Or $msg = $Close Then 
	Exit
ElseIf $msg = $Start Then 
	MsgBox("Идет копирование файлов","Дождитесь окончания копирования файлов", "Дождитесь окончания копирования файлов",1)
EndIf

Opt("ExpandVarStrings",1)

If GUICtrlRead($Bookmaarks) = 1 Then
	FileCopy("$FirstPath$\profile\opera6.adr", "$SecondPath$\profile\*.*",1)
	EndIf

If GUICtrlRead($Notes) = 1 	Then
	FileCopy("$FirstPath$\profile\notes.adr", "$SecondPath$\profile\*.*",1)
	EndIf

If GUICtrlRead($cookies) = 1 Then
	FileCopy("$FirstPath$\profile\cookies4.dat", "$SecondPath$\profile\*.*",1)
	EndIf

If GUICtrlRead($wand) = 1 Then
	FileCopy("$FirstPath$\profile\wand.dat", "$SecondPath$\profile\*.*",1)
	EndIf

If GUICtrlRead($global) = 1 Then
	FileCopy("$FirstPath$\profile\global.dat", "$SecondPath$\profile\*.*",1)
	EndIf

If GUICtrlRead($download) = 1 Then
	FileCopy("$FirstPath$\profile\download.dat", "$SecondPath$\profile\*.*",1)

If GUICtrlRead($cache) = 1 Then
	DirCopy("$FirstPath$\profile\cache4\", "$SecondPath$\profile\cache4",1)
	EndIf

EndIf
WEnd

-------
Мой блог: Сделай то что хочешь из того что нравится!
----
Помощь проектам развивающихся в рамках OSZone.net


Отправлено: 00:50, 07-07-2006 | #186


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


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

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


Creat0R
Ты не понимаешь суть базового понятия "цикл".
+
Несколько раз перечитал твое
Цитата:
Как я могу сделать так, что если в том окне, которое появится после нажатия на 'Отмена' (в первом окне), пользователь нажимает в нём 'Нет', то будет запущено первое окно снова. Т.е нужно как-то вернуться на метку, которая будет стоять перед выводом первого окна.
В твоем описании задачи все окна "первые"...

Поэтому могут лишь подправить твой скрипт:
Код: Выделить весь код
While 1
$var = FileSelectFolder("Select a folder.", "")
If NOT @error Then
  $iMsgBoxAnswer = MsgBox(292,"Msg","you sure?")
  Select
    Case $iMsgBoxAnswer = 6 ;Yes
      $var = StringReplace($var, "|", @CRLF)
      MsgBox(64,".....","Вы выбрали:  " & $var)
      FileWrite ( "c.tmp", $var )
      Exit
    Case $iMsgBoxAnswer = 7 ;No
    Case Else
      Exit
  EndSelect
Else
  Exit
EndIf
Wend
SyCraft
Цитата:
Не подскажите где я вновь учудил?
Везде:
1. У оператора MsgBox другой синтаксис MsgBox(0,"", "",1)
2. Считывать значения редактируемых переменных нужно в цикле
Код: Выделить весь код
While 1
$msg = GuiGetMsg()
$SecondPath = GUICtrlRead($Output) 
$FirstPath = GUICtrlRead($Input)
...
3. Следи за условными переходами! У тебя $cache будет копироваться только, если копируется $download!
Сделай так:
Код: Выделить весь код
While 1
...
If $msg = $GUI_EVENT_CLOSE  Or $msg = $Close Then 
        Exit
ElseIf $msg = $Start Then 
       MsgBox(0,"Идет копирование файлов","Дождитесь окончания копирования файлов",1)
       If GUICtrlRead($Bookmaarks) = 1 Then
              ...
              EndIf
       ...
EndIf
WEnd
4. Учись отлаживать свои скрипты сам! Мне очень помогает вставка в проверяемое место MsgBox(0,"", "",1).
Например, в твой скрипт я вставил вместо FileCopy("$FirstPath$\profile\opera6.adr", "$SecondPath$\profile\*.*",1)
проверку MsgBox(0,"","$FirstPath$\profile\opera6.adr TO $FirstPath$\profile\*.*").
Тут же все твои косяки вылезли наружу.
5. Много мелких недочетов. В частности, зачем циклишь объявление опции Opt("ExpandVarStrings",1)? Обычно это делается в начале скрипта.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:33, 07-07-2006 | #187


Аватара для SyCraft

Старожил


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

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


bogomolv
Спасибо, ты уж не взыщи просто я далек от программирования и только учусь!!!
Спасибо тебе!

-------
Мой блог: Сделай то что хочешь из того что нравится!
----
Помощь проектам развивающихся в рамках OSZone.net


Отправлено: 09:39, 07-07-2006 | #188


Аватара для Creat0R

Must AutoIt


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

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


bogomolv
Огромное тебе спасибо! Всё так как и нужно было!
Я кажется понял суть работы команд Wend и While - Всё что находится между ними, будет выполняться до тех пор, пока значение одной из команд будет ровно 0 (или любое другое кроме 1 - если есть такого), но как я понял, это в случае если у команды While присутствует значение 1 (While = 1). А какие ещё есть возможности её использования?

У меня есть пару вопросов:

1) Как осуществлять поиск существующего пути\каталога, и затем произвести определённое действие?
Т.е, вот например команда $search = FileFindFirstFile("file.tmp"), произведёт поиск файла file.tmp.
А если сделать так:
Код: Выделить весь код
$search = FileFindFirstFile("File.tmp")
If $search = -1 Then
MsgBox(0, "Error", "File was not found")
    Exit
EndIf
То в случае если файл не найден, будет выведенно сообщение.
Но мне вообще-то нужно, чтобы был поиск не файла, а каталога\пути (или даже будет лучше, если значения $var). Примерно так я себе это представляю:
Код: Выделить весь код
$search = FileFindFirstFile("$var")
If $search = -1 Then
Тут нужно перейти в начало файла (думаю вместо этой строки поставить просто wend, а в строке выше, поменять -1 на 0, так?)
2) Как во время выполнения сценария, можно спрятать окно другого-запущенного приложения? (в данном случае - *.bat файл). Т.е чтобы сам скрипт, какой то командой, скрыл запущенное окно командной строки. Или хотябы сделать так, чтобы запущенное окно (Bath файла) самим скриптом AutoIt, было скрыто в момент его (батника) запуска!

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

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

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


Отправлено: 10:59, 07-07-2006 | #189


Ветеран


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

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


в хелпе все написано. Ох, батенька, взяли бы какую-нть книжку по информатике для 9 класса.

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 11:52, 07-07-2006 | #190



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] 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.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход