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

Компьютерный форум 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

 

Аватара для XXXler

Ветеран


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

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


Цитата:
Как мне осуществить сохранение файла (c.tmp), в текущем каталоге? т.е в том каталоге где и находится сам скрипт. Но чтобы ненужно было указывать полный путь, так как запускаться скрипт будет постоянно с разных мест.
Смотри в списке макро папок (в данном случае @ScriptDir)
Код: Выделить весь код
$var = FileOpenDialog("Выбирите архив...", "", "Zip (*.zip)")
FileWrite(@ScriptDir&"\c.tmp", $var)

Отправлено: 12:04, 10-07-2006 | #201



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

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


Аватара для DenchikK

Старожил


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

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


Подскажите пожалуйста, как можно совместить работу такого (примерного)
скрипта. На основе поставленной в ней задачи, хочу научится некоторым
нужным впоследствии, рабочим скриптам. Так что не удевляйтесь
возможной несуразности его (скрипта) логики.

По частям он работает, но как совместить его работу, моего ума, хелпов
и статей форума явно не достаточно...

Идея вот в чём:

1. Выбираю первую или вторую колонку, и/или ставлю вручную нужные
галочки.
2. Жму на "Кнопка Выбора".
3. Если надо, повторяю п.1 и/или п.2 для выбора другой колонки.
4. Жму "Выполнить" - выполняются соответствующие чекбоксам операции.

5. Нажатия на кнопку "Выход" должно приводить к выходу из скрипта на
любом этапе.

6. Не знаю, как придумать, чтоб при повторном нажатии на "Кнопка
Выбора" происходил бы select / deselect чекбокса.


Вроде бы смог понятно обяснить...

Вот скрипт:
Код: Выделить весь код
 
#include <GUIConstants.au3>

Opt("GUICoordMode", 1)

GUICreate("Учусь Работать С Чекбоксами", 400, 300)

$checkCN1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 10, 10, 120, 20)
$checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 120, 20)
$checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 120, 20)
$checkCN4 = GUICtrlCreateCheckbox ("CHECKBOX 4", 130, 10, 230, 20)
$checkCN5 = GUICtrlCreateCheckbox ("CHECKBOX 5", 130, 30, 230, 20)
$checkCN6 = GUICtrlCreateCheckbox ("CHECKBOX 6", 130, 50, 230, 20)

$Start = GUICtrlCreateButton("Выполнить", 10, 100, 120, 20)
$Close = GUICtrlCreateButton("Выход", 10, 120, 120, 20)

$button_1 = GUICtrlCreateButton ("Кнопка Выбора ", 10, 150, 120, 20)
$group_1 = GUICtrlCreateGroup ("Группа", 5, 175, 120, 95)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio ("Первая Колонка", 10, 190, 120, 20)
$radio_2 = GUICtrlCreateRadio ("Вторая Колонка", 10, 205, 120, 20)

$radioval1 = 0    ; We will assume 0 = first radio button selected, 2 = last button
$radioval2 = 2

GUISetState ()

While 1
   $msg = GUIGetMsg()
   Select
       Case $msg = $GUI_EVENT_CLOSE
        Exit
      Case $msg = $GUI_EVENT_MINIMIZE
         MsgBox(0,"", "Dialog minimized",2)
      Case $msg = $GUI_EVENT_MAXIMIZE
         MsgBox(0,"", "Dialog restored",2)
   
      Case $msg = $button_1

	if   $radioval1 = 0 then 
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button1', 'Check', '' )
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button2', 'Check', '' )
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button3', 'Check', '' )
	EndIf

	if   $radioval1 = 1 then 
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button4', 'Check', '' )
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button5', 'Check', '' )
		ControlCommand ( 'Учусь Работать С Чекбоксами', '', 'Button6', 'Check', '' )
	EndIf
       
; Назначение этих двух строчек я не понимаю...
      Case $msg >= $radio_1 AND $msg <= $radio_2
         $radioval1 = $msg - $radio_1

   EndSelect
WEnd

;************************************************************************
#cs
----------------------


While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE  Or $msg = $Close Then 
        Exit

ElseIf $msg = $Start Then

       If GUICtrlRead($checkCN1) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 1",1)
        EndIf

        If GUICtrlRead($checkCN2) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 2",1)
        EndIf

        If GUICtrlRead($checkCN3) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 3",1)
        EndIf

        If GUICtrlRead($checkCN4) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 4",1)
        EndIf

        If GUICtrlRead($checkCN5) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 5",1)
        EndIf

        If GUICtrlRead($checkCN6) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 6",1)
        EndIf

EndIf
WEnd

----------------------
#ce

Отправлено: 03:47, 12-07-2006 | #202


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


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

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


DenchikK
Цитата:
Вроде бы смог понятно обяснить...
Наоборот

Цитата:
По частям он работает, но как совместить его работу, моего ума, хелпов
и статей форума явно не достаточно.
По каким частям? Что нужно совмещать?

Цитата:
5. Нажатия на кнопку "Выход" должно приводить к выходу из скрипта на
любом этапе.
Этапе чего? У тебя нет никаких этапов. Если тебя интересует прекращение (отмена) выполняемого действия, то такая возможность зависит от самого выполняемого действия.

Цитата:
6. Не знаю, как придумать, чтоб при повторном нажатии на "Кнопка
Выбора" происходил бы select / deselect чекбокса.
Это придумали за тебя и назвали оператором GUICtrlSetState
Код: Выделить весь код
      Case $msg = $button_1
        If GUICtrlRead($checkCN1)=$GUI_CHECKED Then
	  GUICtrlSetState($checkCN1,$GUI_UNCHECKED)
        Else
	  GUICtrlSetState($checkCN1,$GUI_CHECKED)
        EndIF
Цитата:
; Назначение этих двух строчек я не понимаю...
Ну, так не ставь их!

Отправлено: 09:35, 12-07-2006 | #203


Аватара для DenchikK

Старожил


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

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


bogomolv
Попробуйте, пожалуйста, запустить мой скрипт - всё наглядно увидите. ;-)

Цитата:
;Назначение этих двух строчек я не понимаю...
Ну, так не ставь их!
Ну так не работает без них! :-)

Ладно - попробую ещё понятнее объяснить:
Как видно по моему скрипту - есть одна часть, которая выполняется, и вторая - закоментированная. Это я думаю видно и понятно. Первая (незакоментированная) часть в зависимости от того, какая из RadioButton выбрана, выделяет три левых или правых чекбокса - то же вроде должно быть понятно. Вторая, закоментированная, часть показывает, что с выделенными чекбоксами делать. И если запустить скрипт в том виде, как у меня он дан, можно увидеть - что первая часть (отметка чекбоксов) работает. Если закоментитровать первую часть, и раскоментировать вторую - видим что и вторая часть так же выполняет свою функцию, что на неё возложена.

Теперь немного понятнее стало какие части и что нужно совмещать?

Может и не так, как у меня записано, принцип того, что должно получится, ясен?

Добавлено:
Всё, вопрос снимается - разобрался, как это всё работает (вроде-как).
Видать жара и недосып дают о себе знать ;-) Вот что в итоге вышло:
Код: Выделить весь код
#include <GUIConstants.au3>

GUICreate("Учусь Работать С Чекбоксами", 400, 300)

$checkCN1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 10, 10, 120, 20)
$checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 120, 20)
$checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 120, 20)
$checkCN4 = GUICtrlCreateCheckbox ("CHECKBOX 4", 130, 10, 230, 20)
$checkCN5 = GUICtrlCreateCheckbox ("CHECKBOX 5", 130, 30, 230, 20)
$checkCN6 = GUICtrlCreateCheckbox ("CHECKBOX 6", 130, 50, 230, 20)

$Start = GUICtrlCreateButton("Выполнить", 10, 100, 120, 20)
$Close = GUICtrlCreateButton("Выход", 10, 120, 120, 20)

$button_1 = GUICtrlCreateButton ("Кнопка Выбора ", 10, 150, 120, 20)
$group_1 = GUICtrlCreateGroup ("Группа", 5, 175, 120, 95)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio ("Первая Колонка", 10, 190, 120, 20)
$radio_2 = GUICtrlCreateRadio ("Вторая Колонка", 10, 205, 120, 20)

$radioval1 = 0    ; We will assume 0 = first radio button selected, 2 = last button
$radioval2 = 2

GUISetState ()

While 1
   $msg = GUIGetMsg()

   Select
  
      Case $msg = $GUI_EVENT_CLOSE  Or $msg = $Close 
        Exit
      Case $msg = $GUI_EVENT_MINIMIZE
         MsgBox(0,"", "Dialog minimized",2)
      Case $msg = $GUI_EVENT_MAXIMIZE
         MsgBox(0,"", "Dialog restored",2)


  Case $msg = $button_1
    
    if   $radioval1 = 0 then 

        If GUICtrlRead($checkCN1)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN1,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN1,$GUI_CHECKED)
        EndIF

        If GUICtrlRead($checkCN2)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN2,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN2,$GUI_CHECKED)
        EndIF

        If GUICtrlRead($checkCN3)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN3,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN3,$GUI_CHECKED)
        EndIF
    
    EndIf


if   $radioval1 = 1 then 

        If GUICtrlRead($checkCN4)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN4,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN4,$GUI_CHECKED)
        EndIF

        If GUICtrlRead($checkCN5)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN5,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN5,$GUI_CHECKED)
        EndIF

        If GUICtrlRead($checkCN6)=$GUI_CHECKED Then
          GUICtrlSetState($checkCN6,$GUI_UNCHECKED)
        Else
          GUICtrlSetState($checkCN6,$GUI_CHECKED)
        EndIF
    
    EndIf


       
; Назначение этих двух строчек я не понимаю...
      Case $msg >= $radio_1 AND $msg <= $radio_2
         $radioval1 = $msg - $radio_1

Case $msg = $Start

       If GUICtrlRead($checkCN1) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 1",1)
        EndIf

        If GUICtrlRead($checkCN2) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 2",1)
        EndIf

        If GUICtrlRead($checkCN3) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 3",1)
        EndIf

        If GUICtrlRead($checkCN4) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 4",1)
        EndIf

        If GUICtrlRead($checkCN5) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 5",1)
        EndIf

        If GUICtrlRead($checkCN6) = 1 Then
                     MsgBox(0,"Установка","Чекбокс 6",1)
        EndIf

   EndSelect
WEnd

Последний раз редактировалось DenchikK, 12-07-2006 в 14:12.


Отправлено: 12:55, 12-07-2006 | #204


Аватара для Creat0R

Must AutoIt


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

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


XXXler
Цитата:
Смотри в списке макро папок (в данном случае @ScriptDir)
Огромное Спасибо!

Есть такой вопрос:

Как по команде IniWrite, записывать строчки в файл конфигурации, но не в самый конец раздела, а, например, во вторую строчку заданного раздела?

И ещё, при команде IniRead, возвращается
Цитата:
Значение указанного ключа или <стандартное значение>, если указанный ключ отсутствует. (справка)
А как можно проверить совпадает ли указанная строка (или ключь в разделе) с существующей строкой в файле конфигурации? (*.ini) - и если совпадает, то нужно выполнить определённые действия (например, показать сообщение по MsgBox).

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

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

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


Отправлено: 12:07, 13-07-2006 | #205


Аватара для XXXler

Ветеран


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

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


Цитата:
Как по команде IniWrite, записывать строчки в файл конфигурации, но не в самый конец раздела, а, например, во вторую строчку заданного раздела?
С помошью только IniWrite - никак
Цитата:
А как можно проверить совпадает ли указанная строка (или ключь в разделе) с существующей строкой в файле конфигурации? (*.ini) - и если совпадает, то нужно выполнить определённые действия (например, показать сообщение по MsgBox).
строки здесь причем? Если используем Ini файл, так и работаем с Секция\Параметр\Значение, со строками как таковыми работа невозможна.

Если надо сравнить одно значение:
Код: Выделить весь код
If IniRead($File,"Section","Parameter","Default Value")="Текст для сравнения" Then MsgBox(0,"","Значение совпадает")

Отправлено: 12:35, 13-07-2006 | #206


Аватара для DenchikK

Старожил


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

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


Creat0R
Цитата:
А как можно проверить совпадает ли указанная строка (или ключь в разделе) с существующей строкой в файле
конфигурации? (*.ini) - и если совпадает, то нужно выполнить определённые действия (например, показать сообщение по
MsgBox).
Так пойдёт?

Код: Выделить весь код
$var = IniRead("boot.ini", "boot loader", "timeout", "")
	if $var = 5 then
		MsgBox(0,"Информация", "Запись существует",2)
	else 
		MsgBox(0,"Информация", "Запись не существует",2)
	endif
Exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:46, 13-07-2006 | #207


Аватара для Creat0R

Must AutoIt


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

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


XXXler
Цитата:
С помошью только IniWrite - никак
Мне в принципе не важно с помощью чего, главное как такое сделать?

А на счёт строк, так дело в том, что мне нужно проверить именно ключь, а не значение. Т.е пусть даже восспользоваться другой командой, и обращаться к файлу как к обычному (например, как к файлу *.txt), но чтобы сравнить указанный текст со строкой в файле.

DenchikK
Цитата:
Так пойдёт?
Таким образом у меня в любом случае выводится сообщение “Запись не существует”, и ключь в файле не проверяется... или я просто что-то не так делаю?

Цитата:
if $var = 5 then
Разве IniRead возвращает значение 5, судя по справке, оно возвращает либо значение указанного ключа, либо значение которое приютствует у ключа в указанном разделе.

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

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

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


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


Аватара для XXXler

Ветеран


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

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


Может найдешь что тебе именно нужно:
Код: Выделить весь код
;~ Условия поиска
$Sect="Имя_секции"
$Param="Имя_параметра"
$Val="Значение_параметра"
$File="Имя_файла"

If Not FileExists($File) Then Exit 1
	
;~ Поиск по имени секции
$SecList=IniReadSectionNames($File)
For $i=1 To $SecList[0]
	If $SecList[$i]=$Sect Then	MsgBox(0,"","Секция "&$Sect&" существует")
Next

;~ Поиск по имени параметра в любой секции
$SecList=IniReadSectionNames($File)
For $i=1 To $SecList[0]
	$ParList=IniReadSection($File,$SecList[$i])
	For $y=1 To $ParList[0][0]
		If $ParList[$y][0]=$Param Then MsgBox(0,"","Параметр "&$Param&" существует в секции "&$SecList[$i])
	Next
Next

;~ Поиск по значению параметра в любой секции
$SecList=IniReadSectionNames($File)
For $i=1 To $SecList[0]
	$ParList=IniReadSection($File,$SecList[$i])
	For $y=1 To $ParList[0][0]
		If $ParList[$y][1]=$Val Then MsgBox(0,"","Значение "&$Val&" существует в  параметре "&$ParList[$y][0]&", секции "&$SecList[$i])
	Next
Next

;~ Поиск по имени секции и параметра
If IniRead($File,$Sect,$Param,"А вот и нет такого параметра")<>"А вот и нет такого параметра" Then MsgBox(0,"","Параметр "&$Param&" существует в секции "&$Sect)

;~ Поиск по имени секции, параметра и значения
If IniRead($File,$Sect,$Param,"А вот и нет такого параметра")=$Val Then MsgBox(0,"","Значение "&$Val&" существует в параметре "&$Param&", секции "&$Sect)

Отправлено: 13:55, 13-07-2006 | #209


Аватара для Creat0R

Must AutoIt


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

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


XXXler
Огромное спасибо! помогло!


Появился у меня интерес к такому вопросу - Можно ли каким то образом, воспринимать переданный ключь (рефферер) из другой программы, и чтобы скрипт распознавал, и если это определённый ключь, то что-то должно происходить. Т.е, например, скрипт был вызван из контекстного меню определённой программы, и при этом вызове, был указан ключ (Пример: Item, "Script" = Execute program, "Script.exe", "%A") - И теперь, скрипт должен распознать этот ключь, и если был передан именно этот ключь, то скрипт продолжит заданные действия в цепочке, а если ключь не совпадает, т.е если не был передан именно этот ключ, или вообще не был передн ключь, то должен происходить выход из цепочки (Do....Until...)


P.S:
Как делать цепочку\выход с неё, продолжение действии и т.д, я уже знаю, и мне нужно только узнать, как распозновать тот самый ключь (рефферер).

И ещё вот что хотел узнать, кто-то знает, где мможно посмотреть на разные структуры скриптов, например, для чекбоксов, для передачи результата из выбранного файла\каталога через FileOpenDialog, в затемнённое поле GUI интерфейса, и тому подобное (что-то вроде преведённого XXXler'ом в посте на один выше чем мой).

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

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

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


Отправлено: 19:39, 15-07-2006 | #210



Компьютерный форум 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




 
Переход