|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты |
|
[Архив - Часть 1.2] AutoIt скрипты
|
Ветеран Сообщения: 565 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. |
|
------- Отправлено: 10:47, 10-02-2006 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Sanja Alone
Цитата:
$Text = ClipGet() If $CmdLine[0] <> 0 Then $Url = $CmdLine[1] FileWrite(@ScriptDir & "\File.txt", "Скопированный текст: " & $Text & @CRLF & "Текст скопирован с документа: " & $Url) EndIf Таким образом, до вызова самого скрипта, выделенный текст в документе, помещается в буффер обмена, и скрипт “берёт” из буффера полный текст в переменную, и вписывает в файл. Это решение в принципе не имеет проблем, но причина по которой я хотел узнать как передавать два значения (ключа) скрипту, являлась обходом помещения текста в буффер обмена, т.е чтобы не занимать лишни раз буффер обмена. Ещё раз спасибо за помощь! ------------------------------------- У меня тут появилась проблема с другой сферы... Я сделал немного примитивный (пробный) гуи интерфейс (см. код ниже), и есть пару вопросов по этому поводу: А) Как можно сделать, чтобы после зажатия галки у надписи “Опция”, окно (MsgBox) появлялось только после зажатия, а не каждый раз. Т.е в данный момент, если я зажму галку, то сообщение появляется, если отожму, то тоже появляется - как сделать чтобы появлялось только после зажатия? Б) У меня в гуи (GUI), есть две кнопки (кроме прочих) - Одна для отмечивания всех галок ("Выбрать все"), а другая для их снятия ("Очистить все") - Вопрос: Как сделать чтобы была такая одна кнопка, а ещё лучше тоже чекбокс, после нажатия которого\ой, выделялись бы все чекбоксы, а если отжать эту\от кнопку\чекбокс, то чтобы также и отжимались все остальные чекбоксы? Г) Это самая большая прблема, и она у меня имеет наивысшый приоритет для решения - Я поместил в гуи прогресс бар (progressbar), и хотел бы добиться такого результата, чтобы в то время, как происходит копирование определённых файлов, этот прогресс бар был задйствован. Т.е если я копирую например большой файл (фильм к примеру), то чтобы пока он копировался, ползунок бегал в прогрес баре. Мне в принципе не нужно чтобы происходил там какого то рода подсчёт размера файла (хотя думаю в этом и заключается достижение моей задачки), и на основе чего и делался прогресс, а чтобы просто было видно что копирование в прогрессе (и не важно в каком этапе оно находится ![]() Я временно ограничелся запуском внешнего прогресс бара (через запуск этого же скрипта, с ком. строкой), который (прогрессбар) ходит туда сюда до тех пор, пока не будет существовать определёный файл, который создаётся самим скриптом в тот момент, как копирование окончено (т.е я поставил команду создания этого файла как метку, после команды копирования). Но хотелось бы чтобы этот прогресс бар был внутри гуи интерфейса. Скрипт: #include <GUIConstants.au3> $Form1 = GUICreate("Test", 450, 370, 214, 126) $Opt = GUICtrlCreateCheckbox("Опция", 230, 50, 300, 20) $File = GUICtrlCreateCheckbox("Файл", 70, 50, 97, 17) $Edit = GUICtrlCreateCheckbox("Правка", 70, 70, 97, 17) $View = GUICtrlCreateCheckbox("Вид", 70, 95, 97, 17) $Bookmarks = GUICtrlCreateCheckbox("Закладки", 70, 120, 97, 17) $Session = GUICtrlCreateCheckbox("Сеансы", 70, 145, 97, 17) $progressbar1 = GUICtrlCreateProgress (10,10,200,20) GUICtrlSetColor(-1,32250) $All1 = GUICtrlCreateButton("Выбрать все", 70, 330, 90, 23) $All2 = GUICtrlCreateButton("Очистить все", 70, 300, 90, 23) $Start = GUICtrlCreateButton("Выполнить", 260, 330, 93, 25) $Close = GUICtrlCreateButton("Выход", 360, 330, 70, 25) Dim $radioval1 $group_1 = GUICtrlCreateGroup ("Группа", 255, 190, 140, 110, 100) GUIStartGroup() $radio_1 = GUICtrlCreateRadio ("Вариант 1", 285, 220, 90, 20) GUICtrlSetState ($radio_1,$GUI_CHECKED) $radio_2 = GUICtrlCreateRadio ("Вариант 2", 285, 270, 90, 20) GUISetState(@SW_SHOW) GUISetState () While 1 ; Здесь по идее, хотелось бы чтобы прогресс бар начал крутится, а остановится пусть в конце скрипта (перед wend) $msg = GuiGetMsg() If $msg = $Opt Then MsgBox(48, "Atantion", "This is a test") If $msg = $All1 Then GUICtrlSetState ($File,$GUI_CHECKED) GUICtrlSetState ($Edit,$GUI_CHECKED) GUICtrlSetState ($View,$GUI_CHECKED) GUICtrlSetState ($Bookmarks,$GUI_CHECKED) GUICtrlSetState ($Session,$GUI_CHECKED) EndIf If $msg = $All2 Then GUICtrlSetState ($File,$GUI_UNCHECKED) GUICtrlSetState ($Edit,$GUI_UNCHECKED) GUICtrlSetState ($View,$GUI_UNCHECKED) GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED) GUICtrlSetState ($Session,$GUI_UNCHECKED) EndIf If $msg = $GUI_EVENT_CLOSE Or $msg = $Close Then Exit Select Case $msg >= $radio_1 AND $msg <= $radio_2 $radioval1 = $msg - $radio_1 Case $msg = $Start If $radioval1 = 0 Then If GUICtrlRead($Opt) = 1 Then EndIf If GUICtrlRead($File) = 1 Then EndIf If GUICtrlRead($Edit) = 1 Then EndIf If GUICtrlRead($View) = 1 Then EndIf If GUICtrlRead($Bookmarks) = 1 Then EndIf If GUICtrlRead($Session) = 1 Then EndIf If GUICtrlRead($File) <> 1 and GUICtrlRead($Edit) <> 1 and GUICtrlRead($View) <> 1 and GUICtrlRead($Bookmarks) <> 1 and GUICtrlRead($Session) <> 1 and GUICtrlRead($Opt) <> 1 Then MsgBox(48, "Error", "Выберите как минимум один чекбокс") ContinueLoop EndIf MsgBox(64, "Finishing...", "Финито 1", 15) GUICtrlSetState ($Opt,$GUI_UNCHECKED) GUICtrlSetState ($File,$GUI_UNCHECKED) GUICtrlSetState ($Edit,$GUI_UNCHECKED) GUICtrlSetState ($View,$GUI_UNCHECKED) GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED) GUICtrlSetState ($Session,$GUI_UNCHECKED) EndIf If $radioval1 = 1 Then If GUICtrlRead($Opt) = 1 Then EndIf If GUICtrlRead($File) = 1 Then EndIf If GUICtrlRead($Edit) = 1 Then EndIf If GUICtrlRead($View) = 1 Then EndIf If GUICtrlRead($Bookmarks) = 1 Then EndIf If GUICtrlRead($Session) = 1 Then EndIf If GUICtrlRead($File) <> 1 and GUICtrlRead($Edit) <> 1 and GUICtrlRead($View) <> 1 and GUICtrlRead($Bookmarks) <> 1 and GUICtrlRead($Session) <> 1 and GUICtrlRead($Opt) <> 1 Then MsgBox(48, "Error", "Выберите как минимум один чекбокс") ContinueLoop EndIf MsgBox(64, "Finishing...", "Финито 2", 15) GUICtrlSetState ($Opt,$GUI_UNCHECKED) GUICtrlSetState ($File,$GUI_UNCHECKED) GUICtrlSetState ($Edit,$GUI_UNCHECKED) GUICtrlSetState ($View,$GUI_UNCHECKED) GUICtrlSetState ($Bookmarks,$GUI_UNCHECKED) GUICtrlSetState ($Session,$GUI_UNCHECKED) EndIf EndSelect WEnd |
|
------- Отправлено: 09:55, 01-09-2006 | #341 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:34, 01-09-2006 | #342 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Creat0R
А) If $msg = $Opt Then If GUICtrlRead($Opt)=$GUI_CHECKED Then MsgBox(48, "Atantion", "This is a test") EndIf А где ты В) потерял? ![]() Г) Прогрессбар - это весьма муторная штука, когда нет естественных привязок. Твой вариант - это именно тот случай (такая же проблема была и у меня в OEsr). Я не стал париться, и сделал простой "светофор" ![]() sattva Цитата:
Если это не поможет, то замени свою строку выбора эл-та комбобокса такой: ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"SetCurrentSelection", ControlCommand('Adobe Creative Suite 2 Russian by cvs/SSG','Activation','obj_COMBOBOX1',"FindString",'Photoshop CS2 9.0')) , где "число" - это требуемое к-во нажатий на кнопку для выбора нужной строки комбобокса. |
|
------- Отправлено: 04:07, 02-09-2006 | #343 |
Покинул форум Сообщения: 3254
|
Sanja Alone
я не силен в скриптах пожалуста можно сделать вот скрипт запуск c:/install/install.sfx.exe нажать кнопку "извлечь" вставить пароль из c:/install/password.txt нажать кнопку "ок" пождать пока распакуется RAR архив подождать пока установится istall.exe если выйдет надпись "сделать перезагрузку" нажать нет, если не выйдет надпись то ничего не делать. |
Отправлено: 18:10, 02-09-2006 | #344 |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать Sanja Alone
Спасибо, сработал только этот вариант |
Отправлено: 22:19, 02-09-2006 | #345 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать prokazzza
Цитата:
Цитата:
Цитата:
|
|||
------- Отправлено: 01:58, 03-09-2006 | #346 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Возвращаясь к задаче поиска вхождений заданного слова в произвольный текст. Выше я дал маху утверждая, что AutoIT не поддерживает регулярные выражения... хотя с русским опять облом - если метасимволы \l \u \w еще работают, то (?i) ни в какую...
![]() StringRegExp - Check if a string fits a given regular expression pattern. StringRegExpReplace - Replace text in a string based on regular expressions. вариант поиска слова с использованием регулярных выражений (на основе скрипта Sanja Alone): #include <File.au3> $fileInput = 'file.txt' $wordToFind= 'исКать' $find = _FindTextInFile ($fileInput,$wordToFind) If $find Then MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" найдено в ' & $find & '-й строке.') Else MsgBox (0, 'Поиск слова в файле', 'Слово "' & $wordToFind & '" в файле не обнаружено.') EndIf Func _FindTextInFile ($ifile, $word) Local $i, $a, $ret=0 _FileReadToArray($ifile, $a) For $i=1 To Ubound ($a)-1 If StringRegExp ($a [$i], _WordToReg ($word) ) Then Return $i EndIf Next Return 0 EndFunc ; перевод произвольного слова в регулярное выражение ; требуется для поддержки русских слов, так как (?i) ; воспринимает только регистры английских букв; ; пример: "Кот" --> "\<[кК][оО][тТ]\>" Func _WordToReg ($word) Local $i, $c, $w="" If StringIsASCII($word) Then Return '(?i)\<' & $word & '\>' Else For $i=1 To StringLen($word) $c = StringMid ($word, $i, 1) If StringLower($c) == StringUpper($c) Then $w=$w & $c Else $w=$w & '[' & StringLower($c) & StringUpper($c) & ']' EndIf Next Return '\<' & $w & '\>' EndIf EndFunc |
Отправлено: 11:21, 03-09-2006 | #347 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Sanja Alone
Снова огромно спасибо за А) и Б) Цитата:
![]() А на счёт Г), я всё же решил немного попариться, и нашёл, я бы сказал, обходное решение... Вместо того, чтобы копировать файл командами AutoIt'а, я повесил копирование на ком. строку: Run(@ComSpec & " /c copy /y ""c:\File.txt"" ""d:\File.txt""", "", @SW_HIDE) ; Затем заключил в вечную петлю прогресс бар, до тех пор, пока в системе висит процесс “cmd.exe”, т.е это значит, что до тех пор, пока будет делаться копирование... While 1 For $i = 5 To 100 GUICtrlSetData ($progressbar1, $i) Sleep(1) Next If Not ProcessExists("cmd.exe") Then ExitLoop Wend GUICtrlSetData ($progressbar1, 0) Но и это можно обойти, создав той-же ком. строкой, файл во временной папке %temp%, и по завершению копирования удалять его, а проверку для завершения прогресс бара, делать так: If Not ProcessExists("cmd.exe") or Not FileExists(@TempDir & "\mark.tmp") Then ExitLoop Или может есть более надёжный способ, но тогда нужно узнать, возможно ли, и как, проверять когда был запущен процесс (cmd.exe), и если именно этот процесс не существует, тогда выходить с петли. Если кто-то подскажет возможно ли такое, и если да, то как осуществить, то буду очень признателен. ---------------------- У меня есть ещё один вопрос, и тоже в другом направлении - Нужно взять в переменную, все последние символы идущие после определнного знака у значения другой переменной. Т.е, вот например значение переменной $Var ровняется c:\program files\my programm\test.zip - и нужно чтобы из этой переменной, вернулось такое значение - test.zip - в другую переменную, например в $Var1. Но заранее, не известно, ни количество слэшей (\) в пути, ни количество символов после последнего слэша. Возможно такое осуществить? Как я понимаю, тут как-то нужно задействовать одну из вариации команды String, но если честно, то я уже замучался в попытках подобрать подхолящюю для этой цели вариацию, и справка тоже не помогла ![]() Я временно это решил опять-таки ком. строкой ![]() $Var = "c:\program files\my programm\test.zip" ; Беру нужное значение, и вывожу последние его символы после последнего слэша, в файл test.tmp Run(@ComSpec & " /c for %a in (""" & $Var & "") do echo %~nxa> """ & @ScriptDir & "\test.tmp""") ; Помещаю новое значение (из файла) в переменную $Var1 $Var1 = FileReadLine(@ScriptDir & "\test.tmp", 1) MsgBox(0, "", The New Value is: " & $Var1) FileDelete (@ScriptDir & "\test.tmp") |
|
------- Отправлено: 19:50, 03-09-2006 | #348 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Creat0R
Цитата:
|
|
------- Отправлено: 02:17, 04-09-2006 | #349 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
|
|
Отправлено: 02:45, 04-09-2006 | #350 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|