Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: sergtch
Дата сообщения: 24.04.2008 11:36
Суть такая из файла читаю шаблон подстановки (регэсп) и что подставлять и
функцией StringRegExpReplace() заменяю в другом файле.

Все красиво до тех пор, пока в шаблон не попадают символы, с кодом более 127.
Тут красиво не получается, придется городить отдельный огород.
Автор: Mister_Che
Дата сообщения: 24.04.2008 12:01
Я отсылаю точку в английской раскладке, а на выходе - / Как точку отослать, скажите, пожалуйста.


Как русский текст удобно отослать? Чтоб скопировал, ставил и все норм. получилось.
Автор: NIKZZZZ
Дата сообщения: 24.04.2008 13:09
sergtch

Цитата:
пока в шаблон не попадают символы, с кодом более 127

А в чем проблема ?

Автор: ViSiToR
Дата сообщения: 24.04.2008 15:38
Mister_Che 13:01 24-04-2008
Цитата:
Как точку отослать

Есть вариант с переключением раскладки перед отсыланием (нажатие соотсветствующих клавиш), но он не надёжный.
Можно ещё сделать так (с использованием буфера обмена):


Код:
_SendEx(".")

Func _SendEx($sString, $iSendFlag=1, $iUseClipboard=1)
If $iUseClipboard = 1 Then
Local
$sOldClip = ClipGet()
ClipPut($sString)
Send("+{INSERT}")
ClipPut($sOldClip)
Else
Send($sString, $iSendFlag)
EndIf
EndFunc
Автор: NIKZZZZ
Дата сообщения: 24.04.2008 17:04
ViSiToR

Цитата:
Можно ещё сделать так (с использованием буфера обмена)

Хороший вариант, сам использовал, но если стоит какой-нибудь менеджер ClipBoard ...

Автор: Loopback
Дата сообщения: 24.04.2008 20:32

Цитата:
Как точку отослать


Еще вариант - если есть возможность получить хэндл окна, куда посылается символ, можно надежно переключить для этого окна раскладку так:


Код: ; Переключает в русскую
_SetKeyboardLayout("00000419", $hWnd)

; Переключает в английскую
_SetKeyboardLayout("00000409", $hWnd)

Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, _
"int", $WM_INPUTLANGCHANGEREQUEST, _
"int", 1, _
"int", $ret[0])
EndFunc
Автор: ViSiToR
Дата сообщения: 24.04.2008 20:58
NIKZZZZ 18:04 24-04-2008
Цитата:
но если стоит какой-нибудь менеджер ClipBoard ...

Да, с этим проблемы, мусорится история

Loopback 21:32 24-04-2008
Цитата:
можно надежно переключить для этого окна раскладку так

Вот именно потому что не всегда надёжно можно получить хендл окна, я и написал:

16:38 24-04-2008
Цитата:
Есть вариант с переключением раскладки перед отсыланием (нажатие соотсветствующих клавиш), но он не надёжный.


Также будут конфликты с прогами типа Punto Switcher.... так или иначе, я лично стараюсь вообще избегать подобных методов, и использовать ControlSetText() и т.п.
Автор: SysLam
Дата сообщения: 25.04.2008 06:20
sergtch

попробуй UDF, заменяющий в регулярном выражении все вхождения "\x##" на соответствующий ANSI-символ:

Код: Func _StringPreRegExp($sRegExp)
Local $aRegExp = StringRegExp($sRegExp, "(\\[^x]|\\x[[:xdigit:]]{2}|[^\\]+)", 3)
Local $sOutExp = ""
If IsArray($aRegExp) Then
For
$i=0 To UBound($aRegExp)-1
If StringLeft($aRegExp[$i], 2) == "\x" Then
$sOutExp &= Chr(Dec(StringTrimLeft($aRegExp[$i],2)))
Else
$sOutExp &= $aRegExp[$i]
EndIf
Next
EndIf
Return
$sOutExp
EndFunc
Автор: Mister_Che
Дата сообщения: 25.04.2008 12:09
ViSiToR, работает идеально Контролсеттекст в файрфоксе вроде сложно использовать.

А как эта программа с рандомными словами действует? Обьясните, пожалуйста. Вот эта:

Цитата:
$sWord = ""
For $i = 1 To 5
$sWord &= Chr(Random(97, 122, 1))
Next
Send($sWord)

Что значат цифры 97, 122 ?
Автор: Maza Faka
Дата сообщения: 25.04.2008 12:44
Mister_Che
Из справки:

Цитата:
Returns a character corresponding to an ASCII code.

Возвращает символ соответствующий ASCII коду.
В справке есть и описание функции и таблица символов.
Автор: Mister_Che
Дата сообщения: 25.04.2008 19:22
Maza Faka, да я в справку первым делом посмотрел. Все равно не понятно, почему эти цифры.
Автор: ViSiToR
Дата сообщения: 25.04.2008 19:50
Mister_Che 13:09 25-04-2008
Цитата:
Контролсеттекст в файрфоксе вроде сложно использовать

Для FireFox если не ошибаюсь есть библиотека на оф. сайте. Вот тут мне что-то предлагали.
Автор: ViSiToR
Дата сообщения: 26.04.2008 00:11
Mister_Che 13:09 25-04-2008
Цитата:
Что значат цифры 97, 122 ?

Это кодовые (Ascii) значения символов, вся таблица кодов есть в разделе «Appendix -> ASCII Character». для отображения значении этих кодов, используется как раз команда Chr(), а её противоположная команда это Asc() - к примеру букву "a" (англ.) перекодирует в 97, а "z" в 122 .
Автор: Mister_Che
Дата сообщения: 26.04.2008 01:53
Loopback

Цитата:
Еще вариант - если есть возможность получить хэндл окна, куда посылается символ, можно надежно переключить для этого окна раскладку так:

A у меня в английской раскладке вместо точки косая черта - /

Добавлено:
ViSiToR, на том форуме сообщили, что точно для ФФ нельзя контрол* делать и для Оперы тоже, только для ИЕ.
Автор: gregaz
Дата сообщения: 28.04.2008 16:24
Просьба ответить на пару вопросов по приведенному тестовому скрипту :



Код: #include <GuiTreeView.au3>

$gui= GuiCreate("TreeView_Test",500, 500)

$TreeView1 = GUICtrlCreateTreeView(10, 10, 300, 400)

$btUpdate = GUICtrlCreateButton ('Update', 10, 460, 80,30)
$btSort= GUICtrlCreateButton ("Sort", 100,-1, '','')
$BtQuit = GUICtrlCreateButton ( "Выход", 410, -1,'','')

TreViewCreate(); ===>

GUISetState ()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $btUpdate
_GUICtrlTreeView_DeleteAll($TreeView1)
TreViewCreate(); ===>
Case $btSort
_GUICtrlTreeView_Sort($TreeView1)
Case -3,$BtQuit
Exit
EndSwitch
WEnd

Func
TreViewCreate()
For $i=1 To 100
$TreeView2 = GUICtrlCreateTreeViewitem(Random (0, 100, 1), $TreeView1)
For $j=1 to 5
$TreeView3 = GUICtrlCreateTreeViewitem(Random(0, 5, 1), $TreeView2)
For $k=1 To 5
$TreeView4 = GUICtrlCreateTreeViewitem(Random(0, 5, 1), $TreeView3)
Next
Next
Next
EndFunc
Автор: gregaz
Дата сообщения: 29.04.2008 08:39
Проблема с 'Update' решилась созданиием TreeView с помощью UDF
Хотя интересно можно ли ее решить без применения UDF
Автор: LPA77145
Дата сообщения: 29.04.2008 10:14
Может кто-нибудь знает, как сменить раскладку клавиатуры перед InputBox?
Автор: Maza Faka
Дата сообщения: 29.04.2008 12:28
LPA77145
На предыдущей странице есть пример.
Автор: LPA77145
Дата сообщения: 29.04.2008 13:29
Все эти способы конечно хороши, но как узнать хэнд окна которое вызывается функцией Inputbox()?
Автор: ViSiToR
Дата сообщения: 29.04.2008 16:14
LPA77145 14:29 29-04-2008
Цитата:
как узнать хэнд окна которое вызывается функцией Inputbox()?

Нужно запустить InputBox дочерним скриптом, и дождаться его появления, ну или наоборот, дочерний скрипт пусть и устанавливает раскладку. Также можно использовать самопальный InputBox, где уже перед показом можно поменять раскладку используя $GUI.
Автор: Maza Faka
Дата сообщения: 29.04.2008 16:28
LPA77145

Цитата:
как узнать хэнд окна которое вызывается функцией Inputbox()?

Когда-то я приводил пример на офф-сайте, просто переделай его под свою задачу.
Автор: InferNO
Дата сообщения: 29.04.2008 17:42
Помогите разобраться
Делаю скрипт который должен кликать мышкой пока зажаты левая кнопка мыши:


Код:
Dim $isPressed[1]
While 1
$dll=DllOpen("user32.dll")

$IsPressed = DllCall($dll, "int", "GetAsyncKeyState", "int", '0x01') ; 0x01 - левая кнопка мыши

WHILE BitAND($IsPressed[0], 0x8000) = 0x8000
MouseClick("left")
Beep(3500,50) ; бипает для проверки работы
Sleep(20)
$IsPressed = DllCall($dll, "int", "GetAsyncKeyState", "int", '0x01')
WEND

DllClose($dll)
WEnd
Автор: Maza Faka
Дата сообщения: 30.04.2008 07:27
InferNO

Цитата:
Помогите разобраться

Странная логика, как можно кликать левой кнопкой мыши, если она зажата?
Вот так работает:

Код: #include <Misc.au3>

$dll = DllOpen("user32.dll")

ToolTip("Hold left mouse button", 0, 0)

Do
Sleep(20)
Until _IsPressed("01", $dll) = 1

ToolTip("")

While _IsPressed("01", $dll)
;MouseClick("left")
Beep(3500,50)
Sleep(20)
WEnd

DllClose($dll)
Автор: InferNO
Дата сообщения: 01.05.2008 14:07
Maza Faka

Цитата:
Странная логика, как можно кликать левой кнопкой мыши, если она зажата?


У меня есть этот скрипт в AutoHotKey'е. Хотел переделать его в AutoIT.
Как сделать HotKey активации/деактивации скрипта на Ctrl+Shift+LeftMouseClick разобрался, а вот с кликами мыши нет.


Вот так это сделано в AutoHotKey'e:
[more]
Loop
{
MouseClick, left,,, 1, 0, D
;delay between simu. mouse btn down and up
Sleep, 50
MouseClick, left,,, 1, 0, U
GetKeyState, LButtonState, LButton, P
If LButtonState = U
{
;break the loop if physical state of mouse btn is up.
break
}
;delay between each simu. click events
Sleep, 50
}
[/more]
Автор: hunter19
Дата сообщения: 04.05.2008 21:14
Подскажите пожалуйста. Это я не заметил в хелпе, но хочу реальзовать что-то типа этого шаблона (?:^Letter) в функции StringRegExp, т.е. чтобы эта функция производила поиск, пока не встретится слово Letter.
Автор: ViSiToR
Дата сообщения: 05.05.2008 00:32
hunter19 22:14 04-05-2008
Цитата:
чтобы эта функция производила поиск, пока не встретится слово Letter



Код: StringRegExp($String, "(?i)Letter")
Автор: SysLam
Дата сообщения: 05.05.2008 02:52
ViSiToR
тогда уж

Код: StringRegExp($sText, "(?i)\bLetter\b")
Автор: hunter19
Дата сообщения: 05.05.2008 04:57
ViSiToR, SysLam
Спасибо за ответы, но не работает. Шаблон должен быть таким, чтобы функция сначала находила все что задано в шаблоне, затем записывала все остальное в массив, пока не встретит другое слово "Letter".
Автор: ViSiToR
Дата сообщения: 05.05.2008 05:26
hunter19 05:57 05-05-2008
Цитата:
чтобы функция сначала находила все что задано в шаблоне, затем записывала все остальное в массив, пока не встретит другое слово "Letter"

Т.е по сути нужно найти текст между двумя Letter?


Код: #include <Array.au3>

$String = "Letter Some data Letter."

$aResults = StringRegExp($String, "(?i)Letter(.*)Letter", 3)

_ArrayDisplay($aResults)
Автор: hunter19
Дата сообщения: 06.05.2008 10:35
ViSiToR
Спасибо! То, что нужно.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.