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

Ответить
 • Просмотры: 17
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

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



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

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

Сообщение Рысь »

Цитата FaustPatron:



Что мне делать и как быть?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




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

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

Сообщение Painkiller »

Creat0R,
Цитата:



Не знаю на сколько будет полезно
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




в таком виде действительно пользы мало - по сути 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() ищет вхождения с начала строки, поэтому в некоторых случаях замена может произойти раньше чем задумано.
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

amel27,


Цитата amel27:



в таком виде действительно пользы мало
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Ну да, я ж написал что это прототип Изображение




Цитата amel27:



неясно причем тут технология CallBack
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Ну я так себе это представлял.. если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback Изображение




Цитата amel27:



твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




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

Если не трудно, почитай тот запрос, может действительно у тебя получилось сделать то что там предлагается...
Аватара пользователя
Painkiller

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

Сообщение Painkiller »

Run("IE8-WindowsXP-x86-RU-mui.exe")

WinWaitActive ("Установка Internet Explorer")

ControlClick('Установка Internet Explorer','','Button2') - тут всё окей

ControlClick('Установка Internet Explorer','','Button2')- тут всё окей

ControlClick('Установка Internet Explorer','','Button3')- тут не фига.

эТО НЕ ЧЕБОКC, а RadioButton. AutoIt Window Info Tool показывает что это Button3. Как вы видете в самом конце прописал. И всё равно не хочет переключать на другой RadioButton. Чё делать? Это установщик руссификации к Internet Explorer
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Creat0R


Цитата:



если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




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




Цитата:



Valik мне там ответил в тикете, он утверждает что эта затея средствами UDF не реализуема
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




гм… интересно, про 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
Аватара пользователя
Painkiller

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

Сообщение Painkiller »

Всёравно не пашет. Ладно я убью процесс просто . Только как сделать, чтобы скрип подождал некоторое время?
Аватара пользователя
Maza Faka

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

Сообщение Maza Faka »

Спасибо всем кто помогал! Проблема решена убийством окна!
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

6757439


Цитата:



Появилась еще одна проблема



Попробуй задать путь к папке с программой в качестве рабочего каталога:



Код:

Код: Выделить всё

Run("C:\Work\assistant.exe", "C:\Work")
Ответить

Вернуться в «AutoIt»