|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. |
|
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
|
(*.*) Сообщения: 36561 |
Внимание! В связи с созданием отдельного форума по 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
Цитата:
If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param=1 ^File "C:\Program Files\Some App\File - Name.txt" /URL "http://google.com"' MsgBox(64, "", _ _GetCmdLine($CmdLineRaw, "/Param=") & @LF & _ _GetCmdLine($CmdLineRaw, "/URL") & @LF & _ _GetCmdLine($CmdLineRaw, "^File")) Func _GetCmdLine($sCmdLine, $sArgument) If Not StringInStr($sCmdLine, $sArgument) Then Return SetError(1, 0, "") Local $sRegExp = '(?i)^.*?\Q'& $sArgument &'\E\s*(?:(?:"([^"]*)")|([^"\s]+)).*$' Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1\2') If $sRetCmd = $sCmdLine Then Return SetError(2, 0, "") Return StringStripWS($sRetCmd, 3) EndFunc ![]() |
|
Отправлено: 08:22, 01-12-2008 | #1231 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
![]() Хотя есть проблема с путями без кавычек, они обрубаются на перевом пробеле ![]() Цитата amel27:
|
||
------- Отправлено: 12:21, 01-12-2008 | #1232 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать В принципе, можно было бы указать постоянный разделитель, но он должен быть опционально задан в параметре. Т.е вся строка может содержать параметры только одного характера, но нужно сделать так, чтобы функцию можно было применять на разные строки. Вот что у меня (не) получилось:
If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param="1" /File=C:\Program Files\Some App\File - Name.txt /URL="http://google.com"' MsgBox(64, "", _ _GetCmdLine($CmdLineRaw, "/Param=") & @LF & _ _GetCmdLine($CmdLineRaw, "/URL=") & @LF & _ _GetCmdLine($CmdLineRaw, "/File=")) Func _GetCmdLine($sCmdLine, $sArgument, $sCmd_Delim='/.*=') If Not StringInStr($sCmdLine, $sArgument) Then Return SetError(1, 0, "") Local $sRegExp = '(?i)^.*?\Q' & $sArgument & '\E\s*(?:(?:"([^"]*)")|([^"]+)' & $sCmd_Delim & ').*$' Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1\2') If $sRetCmd = $sCmdLine Then Return SetError(2, 0, "") Return StringStripWS($sRetCmd, 3) EndFunc P.S $sCmd_Delim это и есть указатель на резделитель, т.е в одной строке могут быть только такие разделители: /Param=, или только такие: -Param=, или такие например: -Param:, но не смешанные (как я задумывал в начале). |
------- Отправлено: 13:03, 01-12-2008 | #1233 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
$CmdLineRaw = '/Param="/URL http://mail.ru" .File "C:\Program Files\Some App\File - Name.txt" /URL "http://google.com"' Цитата:
Цитата:
|
|||
Отправлено: 13:17, 01-12-2008 | #1234 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Может кто нибудь подсказать как можно взять из файла символы и отправить их в активное окно как нажатие их на клавиатуре
|
Отправлено: 20:29, 01-12-2008 | #1235 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
![]() Цитата amel27:
![]() kronic Цитата kronic:
|
|||
------- Отправлено: 22:49, 01-12-2008 | #1236 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() Цитата:
насколько я понял, ты хочешь заменить стандартные спецсимволы кавычки и пробела на свои - символы начала/конца блока параметра ("/-"), внутри которого имя параметра от его значения разделяется другими спецсимволами ("=: "), не будет ли это сменой "шила на мыло" ![]() If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param=1 /Fil\e "C:\Program Files\Some App\File" - "Name.txt" /URL:"http://google.com"' MsgBox(64, "", _ _GetCmdLine($CmdLineRaw, "Param") & @LF & _ _GetCmdLine($CmdLineRaw, "URL") & @LF & _ _GetCmdLine($CmdLineRaw, "Fil\e")) Func _GetCmdLine($sCmdLine, $sArgument, $sParPrefix="/", $sValPrefix="=: ") ; Экранируем спецсимволы $sParPrefix = StringRegExpReplace($sParPrefix, "[-^\]", "\\1") $sValPrefix = StringRegExpReplace($sValPrefix, "[-^\]", "\\1") $sArgument = "\Q"& StringReplace($sArgument,"\E","\E\\E\Q") &"\E" #Region Построение регулярного выражения Local $ExpandVarStrings = Opt("ExpandVarStrings", 1) Local $sParClassIn = '[$sParPrefix$]' ; класс начала имени параметра Local $sValClassIn = '[$sValPrefix$]' ; класс конца имени/начала значения Local $sAllClassEx = '[^$sParPrefix$"]' ; класс обычных символов Local $sRegExp = '(?i)^.*?$sParClassIn$$sArgument$(?:$sValClassIn$+((?:"[^"]*"|$sAllClassEx$+)+))?.*$' ConsoleWrite($sRegExp &@CRLF) Opt("ExpandVarStrings", $ExpandVarStrings) #EndRegion Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1') If @extended Then Return $sRetCmd Return SetError(1, 0, "NOT FOUND") EndFunc |
||
Последний раз редактировалось amel27, 02-12-2008 в 07:31. Отправлено: 06:02, 02-12-2008 | #1237 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
Цитата:
Цитата Creat0R:
Цитата Creat0R:
P.S Спасибо за пример, но там тоже есть проблемы, например если убрать кавычки у /URL, то возвращается только «http:». Также парамтеры должны разделяться не одним префиксом, а ещё и пробелом в начале, т.е чтобы значение считалось до того момента, пока не обнаружен пробел с префиксом (где «/Param1=Val1/Param2=Val2» уже неверная строка, тут значением считается Val1/Param2=Val2, вот если бы после Val1 был пробел, тогда второй параметр не входил в значение ![]() |
||||
------- Отправлено: 10:14, 02-12-2008 | #1238 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param=12 /XXX /Fil\e "C:\Program Files\Some App\File" - "Name.txt" /URL:"http://google.com"' MsgBox(64, "", _ "Param: "&@TAB& _GetCmdLine($CmdLineRaw, "Param") & @LF & _ "XXX: " &@TAB& _GetCmdLine($CmdLineRaw, "XXX") & @LF & _ "YYY: " &@TAB& _GetCmdLine($CmdLineRaw, "YYY") & @LF & _ "URL: " &@TAB& _GetCmdLine($CmdLineRaw, "URL") & @LF & _ "Fil\e: "&@TAB& _GetCmdLine($CmdLineRaw, "Fil\e")) Func _GetCmdLine($sCmdLine, $sArgument, $sParPrefix="/", $sValPrefix="=:") $sPar = StringRegExpReplace ($sParPrefix, "[-^\]", "\\1") $sVal = StringRegExpReplace ($sValPrefix, "[-^\]", "\\1") $sArg = "\Q"& StringReplace($sArgument,"\E","\E\\E\Q") &"\E" Local $sRegExp = '(?i)^(?:|.*?\s)['&$sPar&']'&$sArg&'['&$sVal&' ]+(?:$|['&$sPar&']|((?:"[^"]*"|[^"])+?)(?:$|\s['&$sPar&'])).*' ConsoleWrite($sRegExp &@CRLF) Local $sRetCmd = StringRegExpReplace($sCmdLine, $sRegExp, '\1') If @extended Then Return $sRetCmd Return SetError(1, 0, "NOT FOUND") EndFunc |
||
Отправлено: 12:50, 02-12-2008 | #1239 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
Цитата amel27:
Пример: If $CmdLine[0] = 0 Then $CmdLineRaw = '-Param=1 -XXX=xVal -File=C:\Program Files\Some App\File - Name.txt -URL=http://google.com' MsgBox(64, "", _ "Param: " & @TAB & _GetCmdLine($CmdLineRaw, "Param") & @LF & _ "XXX: " & @TAB & _GetCmdLine($CmdLineRaw, "XXX") & @LF & _ "YYY: " & @TAB & _GetCmdLine($CmdLineRaw, "YYY") & @LF & _ "URL: " & @TAB & _GetCmdLine($CmdLineRaw, "URL") & @LF & _ "File: " & @TAB & _GetCmdLine($CmdLineRaw, "File")) ![]() P.S Теперь что получается, нужно почти при каждом использовании RegExp, применять метод отмены спец. символов (\Q...\E)? |
||
------- Отправлено: 13:40, 02-12-2008 | #1240 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[архив - Часть 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 |
|