[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
-
Creat0R
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Как с помощью скрипта AutoIt заблокировать клавиатуру и мышку, чтоб пользователь во время выполнения скрипта не мог случайно нажать клавишу, переместить мышку, активировать другое окно.
Вопрос отпал, нашел: BlockInput(1) или (0) - включить/выключить.
Вопрос отпал, нашел: BlockInput(1) или (0) - включить/выключить.
-
Рысь
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Цитата FaustPatron:
Что мне делать и как быть?
А почему именно в Mozilla это нужно делать? почему не в IE? для него есть библиотека IE.au3 (поставляется в комплекте с AutoIt).. впрочем и для Mozilla есть нечто подобное:
Что мне делать и как быть?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
А почему именно в Mozilla это нужно делать? почему не в IE? для него есть библиотека IE.au3 (поставляется в комплекте с AutoIt).. впрочем и для Mozilla есть нечто подобное:
FF.au3
(источник
), но не уверен что там можно также просто вставлять/получать текст в/с форм(у)...-
Painkiller
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Creat0R,
Цитата:
Не знаю на сколько будет полезно
в таком виде действительно пользы мало - по сути RegExpReplace() заменяется реализацией через RegExp(), и неясно причем тут технология CallBack
...но твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок:
Код:
P.S. Между прочим, такой код далеко небезукоризнен, так как каждый StringReplace() ищет вхождения с начала строки, поэтому в некоторых случаях замена может произойти раньше чем задумано.
Цитата:
Не знаю на сколько будет полезно
[Архив - Часть 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
EndFuncP.S. Между прочим, такой код далеко небезукоризнен, так как каждый StringReplace() ищет вхождения с начала строки, поэтому в некоторых случаях замена может произойти раньше чем задумано.
-
Creat0R
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
amel27,
Цитата amel27:
в таком виде действительно пользы мало
Ну да, я ж написал что это прототип
Цитата amel27:
неясно причем тут технология CallBack
Ну я так себе это представлял.. если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback
Цитата amel27:
твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок
Интересно... кстати, Valik мне там ответил в
Если не трудно, почитай тот запрос, может действительно у тебя получилось сделать то что там предлагается...
Цитата amel27:
в таком виде действительно пользы мало
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Ну да, я ж написал что это прототип
Цитата amel27:
неясно причем тут технология CallBack
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Ну я так себе это представлял.. если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback

Цитата amel27:
твой пост сподвиг меня на реализацию давней "хотелки" с использованием групповых подстановок
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Интересно... кстати, Valik мне там ответил в
тикете
, он утверждает что эта затея средствами UDF не реализуема, он привёл пример где моя функция провалилась, однако я натравил на его пример твою функцию, и она работает как обычный RegExpReplace... т.е значит это всё же возможно?Если не трудно, почитай тот запрос, может действительно у тебя получилось сделать то что там предлагается...
-
Painkiller
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
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
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
Цитата:
если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода Callback
"своего рода" может быть, AFAIK изначально CallBack был задуман для управления поведением бинарного кода, который неизменяем (так как уже скомпилирован) через использование указателей. Чем-то похоже на клиент-серверную технологию, только "серверу" передаются на обработку не данные, а код. Фишка еще в том, что «сервер» может выполняться с другими правами в системе. Но даже если понимать CallBack как вызов пользовательской UDF из сервисной, то в твоем случае CallBack-функцией будет как раз _UpperMatches(), а не *RegExpReplace*
Цитата:
Valik мне там ответил в тикете, он утверждает что эта затея средствами UDF не реализуема
гм… интересно, про PHP не знал… по сути, я уже озвучил точку зрения Valik'а в своем постскриптуме про StringReplace, хотя его пример уже совсем про другое – про особенность работы StringRegExp… что касаемо принципиальной невозможности реализации… имхо можно поизголяться
...вот пример с двумя реализациями UDF: первый показывает ошибку при использовании StringReplace, во втором я попытался ее обойти.
Код:
Цитата:
если вызывается подфункция которая возвращает значения в исходную функцию, то это как бы своего рода 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 скрипты .:[общие вопросы]:.
Всёравно не пашет. Ладно я убью процесс просто . Только как сделать, чтобы скрип подождал некоторое время?
-
Maza Faka
-
Maza Faka
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Спасибо всем кто помогал! Проблема решена убийством окна!
-
Creat0R
Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
6757439
Цитата:
Появилась еще одна проблема
Попробуй задать путь к папке с программой в качестве рабочего каталога:
Код:
Цитата:
Появилась еще одна проблема
Попробуй задать путь к папке с программой в качестве рабочего каталога:
Код:
Код: Выделить всё
Run("C:\Work\assistant.exe", "C:\Work")