Имя пользователя:
Пароль:
 | Правила  

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

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Аватара для EvgeniuXP

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


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

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


Как с помощью скрипта AutoIt заблокировать клавиатуру и мышку, чтоб пользователь во время выполнения скрипта не мог случайно нажать клавишу, переместить мышку, активировать другое окно.

Вопрос отпал, нашел: BlockInput(1) или (0) - включить/выключить.

Последний раз редактировалось EvgeniuXP, 05-10-2008 в 23:48.


Отправлено: 23:23, 05-10-2008 | #961



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

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


Аватара для Creat0R

Must AutoIt


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

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


Цитата FaustPatron:
Что мне делать и как быть? »
А почему именно в Mozilla это нужно делать? почему не в IE? для него есть библиотека IE.au3 (поставляется в комплекте с AutoIt).. впрочем и для Mozilla есть нечто подобное: FF.au3 (источник), но не уверен что там можно также просто вставлять/получать текст в/с форм(у)...

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

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

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


Отправлено: 04:38, 06-10-2008 | #962


Googler


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

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


Creat0R,
Цитата:
Не знаю на сколько будет полезно »
в таком виде действительно пользы мало - по сути RegExpReplace() заменяется реализацией через RegExp(), и неясно причем тут технология CallBack ...но твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок:
Код: Выделить весь код
$sString  = "c:\DIR1\file1.txt" &@CRLF
$sString &= "c:\DIR1\file2.doc" &@CRLF

$sRetVar = _StringRegExpReplaceEx($sString, "((?:[^\r\n\\]+\\)+)([^\r\n\\]+?)(\.[^.\r\n]+)", "_ChPathExt")

MsgBox(64, "Results", StringFormat("Было:\n%s\n\nСтало:\n%s\n\n\n" & _
        "Для всех файлов исходный путь заменяется на резервный, а к расширению добавляется 'BAK'", $sString, $sRetVar))

Func _StringRegExpReplaceEx($sString, $sPattern, $sFunction)
    Local $sReplace
    Local $aM1 = StringRegExp($sString, $sPattern, 4), $aM2
    If IsArray($aM1) Then
        For $i=0 To UBound($aM1)-1
            Local $as[10]=['','','','','','','','','','']
            $aM2=$aM1[$i]
            For $j=0 To UBound($aM2)-1
                $as[$j]=$aM2[$j]
            Next
            $sReplace = Call($sFunction, $as)
            $sString = StringReplace($sString, $aM2[0], $sReplace, 1, 1)
        Next
    EndIf
    Return $sString
EndFunc

Func _ChPathExt($aGroups)
    Local Const $sNewPath = "d:\DIR2\"
    Local Const $sNewExtn = $aGroups[3] &".Bak"

    Return $sNewPath & $aGroups[2] & $sNewExtn
EndFunc
P.S. Между прочим, такой код далеко небезукоризнен, так как каждый StringReplace() ищет вхождения с начала строки, поэтому в некоторых случаях замена может произойти раньше чем задумано.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 06-10-2008 | #963


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата amel27:
в таком виде действительно пользы мало »
Ну да, я ж написал что это прототип

Цитата amel27:
неясно причем тут технология CallBack »
Ну я так себе это представлял.. если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback

Цитата amel27:
твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок »
Интересно... кстати, Valik мне там ответил в тикете, он утверждает что эта затея средствами UDF не реализуема, он привёл пример где моя функция провалилась, однако я натравил на его пример твою функцию, и она работает как обычный RegExpReplace... т.е значит это всё же возможно?
Если не трудно, почитай тот запрос, может действительно у тебя получилось сделать то что там предлагается...

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

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

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:45, 06-10-2008 | #964


Новый участник


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

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


Creat0R, Подскажи где взять описание на русском для библиотеки IE.au3
Если перевод существует конечно.

Последний раз редактировалось FaustPatron, 07-10-2008 в 02:53.


Отправлено: 01:03, 07-10-2008 | #965


Googler


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

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


Creat0R
Цитата:
если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback »
"своего рода" может быть, AFAIK изначально CallBack был задуман для управления поведением бинарного кода, который неизменяем (так как уже скомпилирован) через использование указателей. Чем-то похоже на клиент-серверную технологию, только "серверу" передаются на обработку не данные, а код. Фишка еще в том, что «сервер» может выполняться с другими правами в системе. Но даже если понимать CallBack как вызов пользовательской UDF из сервисной, то в твоем случае CallBack-функцией будет как раз _UpperMatches(), а не *RegExpReplace*

Цитата:
Valik мне там ответил в тикете, он утверждает что эта затея средствами UDF не реализуема »
гм… интересно, про PHP не знал… по сути, я уже озвучил точку зрения Valik'а в своем постскриптуме про StringReplace, хотя его пример уже совсем про другое – про особенность работы StringRegExp… что касаемо принципиальной невозможности реализации… имхо можно поизголяться ...вот пример с двумя реализациями UDF: первый показывает ошибку при использовании StringReplace, во втором я попытался ее обойти.
Код: Выделить весь код
$sString  = "c:\DIR1\DIR1\file1.txt" &@CRLF
$sString &= "c:\DIR1\DIRA\file2.doc" &@CRLF
$sString &= "c:\DIR1\file1.txt" &@CRLF

$sRetVar1 = _StringRegExpReplaceEx1($sString, "(?i)(c:\\DIR1)([^\r\n]+)", "_ChPathExt")
$sRetVar2 = _StringRegExpReplaceEx2($sString, "(?i)(c:\\DIR1)([^\r\n]+)", "_ChPathExt")

MsgBox(64, "Results", StringFormat("Было:\n%s\nСтало_1:\n%s\n\nСтало_2:\n%s\n\n" & _
    "Для всех файлов в исходном пути убирается корневая папка.", $sString, $sRetVar1, $sRetVar2))

Func _StringRegExpReplaceEx1($sString, $sPattern, $sFunction)
    Local $aM1 = StringRegExp($sString, $sPattern, 4)
    Local $sReplace, $aM2

    If IsArray($aM1) Then
        For $i=0 To UBound($aM1)-1
            Local $as[10]=['','','','','','','','','','']
            $aM2=$aM1[$i]
            For $j=0 To UBound($aM2)-1
                $as[$j]=$aM2[$j]
            Next
            $sReplace = Call($sFunction, $as)
            $sString = StringReplace($sString, $aM2[0], $sReplace, 1, 1)
        Next
    EndIf
    Return $sString
EndFunc

Func _StringRegExpReplaceEx2($sString, $sPattern, $sFunction)
    Local $sSqueeze = StringRegExpReplace($sString, $sPattern, Chr(0))
    Local $aSqueeze = StringSplit($sSqueeze, Chr(0))
    Local $sResult = ""

    Local $aM1 = StringRegExp($sString, $sPattern, 4), $aM2
    If IsArray($aM1) Then
        For $i=0 To UBound($aM1)-1
            Local $as[10]=['','','','','','','','','','']
            $aM2=$aM1[$i]
            For $j=0 To UBound($aM2)-1
                $as[$j]=$aM2[$j]
            Next
            $sResult &= $aSqueeze[$i+1] & Call($sFunction, $as)
        Next
    EndIf
    Return $sResult & $aSqueeze[$aSqueeze[0]]
EndFunc

Func _ChPathExt($aGroups)
    Local Const $sNewRoot = "c:"

    Return $sNewRoot & $aGroups[2]
EndFunc

Последний раз редактировалось amel27, 07-10-2008 в 06:36.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:43, 07-10-2008 | #966


Новый участник


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

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


Всем привет! Я недавно начал пользоваться этой программой и уже столкнулся с проблемой. У меня никак не получается перезаписать ini файл. Задача состоит в том, что нужно скопировать ячейку в .xls файле и записать эту информацию в определенный ключ в ini файле. И сделать это еще раз.
Проблему в этой строчке "IniWrite("C:\Work\Test.ini", "DB", "sn", Send ('+{INS}'))", а именно в комманде записи ключа из буфера обмена, я не могу решить сам.
Была идея заносить что скопировано в переменную, а потом её выводить в файл, но и это у меня не получилось.
Прошу вашего совета.

Код: Выделить весь код
WinActivate ("Microsoft Excel - филиалы.xls")
	$1 = WinWaitActive ("Microsoft Excel - филиалы.xls", "", "2")
		If $1 = True Then
			SEND("{RIGHT}")
			Sleep (100)
			Send ('^{INS}')
			Sleep (100)
			IniWrite("C:\Work\Test.ini", "DB", "sn", Send ('+{INS}'))
			WinActivate ("Microsoft Excel - филиалы.xls")
			SEND("{RIGHT}")
                        Sleep (100)
			Send ('^{INS}')
                        Sleep (100)
			SEND("{LEFT}")
			SEND("{LEFT}")
			IniWrite("C:\Work\Test.ini", "DB", "dn", Send ('+{INS}'))
		Else
			MsgBox (0, "Ошибка", "")
		EndIf

Отправлено: 15:49, 07-10-2008 | #967


Новый участник


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

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


6757439, потому что Вы не совсем корректно используете функцию IniWrite, в месте, где у Вас "Send ('+{INS}')" нужно постить текст..

чтобы вставить содержимое буфера обмена, нужно использовать такую связку:

$a = ClipGet() ; Содержимое буфера обмена присваивается переменной $a
IniWrite("C:\Work\Test.ini", "DB", "sn", $a) ; Здесь при записи вместо какого-либо текста используется содержимое буфера обмена
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:31, 07-10-2008 | #968


Новый участник


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

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


Все получилось благодаря подсказке Рысь. Появилась еще одна проблема:
При запуске программы (через AutoIt3), которая использует вышеописанный ini файл, выводится сообщение об ошибке "не удалось прочитать данные из .ini файла". Хотя если запускаю через эксплорер - все отлично открывается.
В чем может быть загвоздка?
Для запуска использую следующую строку:

Код: Выделить весь код
Run("C:\Work\assistant.exe")

Отправлено: 17:30, 07-10-2008 | #969


Аватара для Maza Faka

Ветеран


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

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


6757439
Цитата:
Появилась еще одна проблема
Попробуй задать путь к папке с программой в качестве рабочего каталога:
Код: Выделить весь код
Run("C:\Work\assistant.exe", "C:\Work")

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:27, 07-10-2008 | #970



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

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 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




 
Переход