Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Послать текст не используя Send() (http://forum.oszone.net/showthread.php?t=172122)

morgan1991 03-04-2010 18:56 1384354

Послать текст не используя Send()
 
Здравствуйте!
Столкнулся с такой проблемой, на Windows 7 не работает функция Send(), после её вызова сбиваются все клавиши в ОС. Например по нажатию левой клавиши мыши открываются мои документы.
Подскажите пожалуйста, как вставить уже имеющийся текст, причём с русскими символами?

Суть программы в следующем:
Пользователь ставит курсор в поле ввода в браузере, программе, не важно, затем жмёт компбинацию клавишь и в этом месте появляется заранее выбранный текст.

Пробовал копировать в буфер обмена, затем высылать ^V {RCTRL}V не получается.
Send() не катит.
Параметры поля в котороё нужно вставить текст, неизвестны.

Может есть какая UDF или чтонибудь похожее?
Помогите пожалуйста...

morgan1991 04-04-2010 15:43 1384854

Ещё пробовал сделать так:
ControlSend("", "", ControlGetFocus(""), $Text)
но, так он вводит посимвольно весь текст, а не вставляет (впрочем как и send).
А самое плохое, что введённый этой функцией текст зависит от выбранного языка ввода.
Т.е. если у меня включен русский язык, а текст на английском, то функция введёт текст русскими буквами. И аналогично...

kaster 04-04-2010 15:50 1384861

morgan1991, Используй
Код:

ControlSetText()

morgan1991 04-04-2010 19:32 1384955

Цитата:

Цитата kaster
morgan1991, Используй »

я уже пробовал:
Код:

ControlSetText("", "", ControlGetFocus(""), $Text)
вообще ничего не вставляет...

morgan1991 04-04-2010 20:19 1384975

Код:

Local $ArrPosWin = WinGetCaretPos()
ControlSetText("", "", " [X:" & $ArrPosWin[0] & "; Y:" & $ArrPosWin[1] & "]", $Text)

Так тоже не работает...

kaster 04-04-2010 21:36 1385020

morgan1991, почитай в справке синтаксис команды ControlSetText. Сначала тебе нужно найти идентификатор нужного тебе поля и после этого вставлять его в вышеобозначенную функцию.
Код:

$ctrlID = '[CLASS:someclass; INSTANCE:someinstance]'; найдешь с помощью AutoIt v3 Window Info
ControlSetText("Title", '', $ctrlID, "new text")


morgan1991 04-04-2010 23:00 1385063

kaster, дак читал я справку, иначе откуда бы знал про эту функцию?
Целый день уже в справке сижу и в английской и в русской.
Цитата:

Цитата kaster
найдешь с помощью AutoIt v3 Window Info »

Я же писал что поле ввода, каждый раз меняется, в этом то и проблема...
Цитата:

Цитата morgan1991
Параметры поля в котороё нужно вставить текст, неизвестны. »

Я думаю тут можно скопировать текст в буфер, затем симулировать комманду вставить в Windows (CTRL+V) и очистить буфер.
Но как симулировать эту кооманду я не знаю.
Send("^V") - не подходит, я уже писал выше, почему...

kaster 04-04-2010 23:06 1385069

Цитата:

Цитата morgan1991
иначе откуда бы знал про эту функцию? »

так ты приводишь примеры где заголовки окон пустые. откуда я знаю, ты их оставил таковыми от незнания или просто для демонстрации того, что знаешь как пользоваться функциями но для экономии времени опускаешь некоторые вещи.
как правило Send, ControlSend сильно зависимы от поставленной по умолчанию раскладки клавиатуры. Попробуй методы поуниверсальнее -
Copy - Ctrl+Ins
Paste - Shift+Ins

morgan1991 04-04-2010 23:16 1385080

kaster, Send("+{INS}") - работает, спасибо.


Время: 13:31.

Время: 13:31.
© OSzone.net 2001-