Что нового

Не получается выслать ENTER в поле Edit

Jotun

Новичок
Сообщения
31
Репутация
0
Есть 9 окон одной и той-же программы, пытаюсь послать во все в поле Edit какой либо текст. Текст вводится, но Enter не нажимается. Никак не пойму в чём дело.

Код:
#include <Array.au3>
$Winlist = WinList ( "[CLASS:Afx:00400000:0]" )
$txt = "aaaa"

For $i=1 To $Winlist[0][0]
$hWind = $Winlist[$i][0]
If $Winlist [$i][1] > "" Then ; Почему-то вместе с нужными окнами находит и окно SciTE без имени но с hWind
	$hC = ControlGetHandle ( $hWind, "", 1001 )
  	ControlSend ( $hWind, "", $hC, $txt )
	Sleep (250)
	ControlSend ( $hwind, "", $hC, "{ENTER}" );
	Sleep (250)
EndIf
Next

_ArrayDisplay ( $Winlist, "" )
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Re: Не получается выслать интер в поле Edit

Вообщето получается если я использую.

Код:
ControlSend ( $hwind, "", "[CLASS:Edit; INSTANCE:5]", "{ENTER}" )
Sleep (250)
ControlSend ( $hwind, "", "[CLASS:Edit; INSTANCE:6]", "{ENTER}" )
Sleep (250)


У части окон INSTANCE:5, у других 6, как бы это определять...

ID елемента 1001 и в разных окнах он одинаковый, но если я использую его - то Enter не нажимается
 
Сообщения
36
Репутация
-1
Re: Не получается выслать интер в поле Edit

Код:
ControlSend ( $hWind, "", $hC, $txt  & "{ENTER}")

или
Код:
ControlSend ( $hWind, "", $hC, $txt  & @LF)


У части окон INSTANCE:5, у других 6, как бы это определять...
можно за таким принципом:
Код:
$hWnd  = WinActivate(0x0003081C)

For $i = 1 To 9
$hControl = ControlGetHandle($hWnd, "", "Edit" & $i)
ControlSend($hWnd , "", $hControl, "текст" & @LF)
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Не получается выслать интер в поле Edit

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Re: Не получается выслать интер в поле Edit

fyviffitoffo сказал(а):
Код:
ControlSend ( $hWind, "", $hC, $txt  & "{ENTER}")

или
Код:
ControlSend ( $hWind, "", $hC, $txt  & @LF)


можно за таким принципом:
Код:
$hWnd  = WinActivate(0x0003081C)

For $i = 1 To 9
$hControl = ControlGetHandle($hWnd, "", "Edit" & $i)
ControlSend($hWnd , "", $hControl, "текст" & @LF)
Next

В этом примере он будет отсылать на EDIT1, EDIT2....EDIT9
Так не пойдёт :smile:
Способы я разные пробовал, но срабатывает когда я использую не ID элемента, а "[CLASS:Edit; INSTANCE:6]"
Проблема что значение INSTANCEE меняется - 5 и 6, вопрос можно ли как-то узнавать это значение.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Jotun

Во-первых, мне не нравится вот это "[CLASS:Afx:00400000:0]". Если вы используете только часть строки описания класса, то правильно так
Код:
$Winlist = WinList ( "[REGEXPCLASS:Afx:00400000:0]" )


Во-вторых, убедитесь, что элемент 1001 и instance:5/6 - это один и тот же элемент
Код:
ConsoleWrite(ControlGetHandle ( $hWind, "", 1001 ) & @CRLF)
ConsoleWrite(ControlGetHandle ( $hWind, "", "[CLASS:Edit; INSTANCE:5]" ) & @CRLF)
ConsoleWrite(ControlGetHandle ( $hWind, "", "[CLASS:Edit; INSTANCE:6]" ) & @CRLF)
Например, если в SciTE вызвать диалог замены, то оба поля Edit1 и Edit2 (которые внутри ComboBox'ов) имеют одинаковый ID 1001.

В-третьих, поля Edit у вас многострочные? Если это обычный Input, то с какой целью вы в него Enter посылаете?
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Класс "[CLASS:Afx:00400000:0]" мне тоже не нравится :smile: Но это полное название класса которое показыает Au3Info у главного окна программы L2Walker. Подозреваю что эти двоеточия в середине могут создавать проблемы.

Поле в кторое я хочу послать сообщение - это Чат. Сейчас я посмотрел получше и выяснил что это [CLASS:ComboBox; INSTANCE:2] и у него есть поле EDIT ( куда я и пробовал отправить текст ). Enter - для того чтобы отправить сообщение в чат. По всей видимости вы правы на счёт одинакового ID у разных EDIT.

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

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Jotun [?]
показывает Au3Info
Тогда переживать не о чем.

в разных окнах может быть разный INSTANCE
И это нормально - окна ведь разные. Каждое окно само создаёт себе элементы. Ваша задача - найти различия в окнах (разные заголовки, текст, классы, размеры, количество элементов...). После этого вы точно будете знать, в каком окне Edit5, а в каком Edit6. А если в окне нужный Edit последний, то можно так
Код:
If Not ControlSend($hwind, "", "Edit6", "{ENTER}") Then ControlSend($hwind, "", "Edit5", "{ENTER}")
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Понимаете в чём загвоздка. Определить элемент у меня получается. Я получаю его Handle. Я выслаю текст в элемент с этим Handle - текст пишется в строке, но послать {ENTER} не получается. Enter проходит только когда я вместо Handle использую INSTANCE, а он, зараза :smile:, меняется.
Au3Info поля name и text показывает пустыми.


Может нужно симмитировать нажатие Enter каким-то не стандартным способом?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Jotun [?]
когда я вместо Handle использую INSTANCE
Это говорит о том, что Handle вы используете не того элемента, который получаете через instance.
Сравните Handle элемента, который вы получаете через instance
Код:
ControlGetHandle ( $hWind, "", "[CLASS:Edit; INSTANCE:5]" )
c Handle элемента, в который не получается отправить ENTER.

[?]
Enter - для того чтобы отправить сообщение в чат
Можно ли как-нибудь ещё отправить сообщение, кроме нажатия ENTER в поле Edit ?
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Эхехех :'(

Что-то никак у меня это не выходит. Вы правы, ID который я получал - это ID Combo, видимо поэтому текст туда вводится, а Enter не отсылает текст в чат.
Я не совсем понимаю, выходит что поле Edit является частью элемента Combo, так? Как тогда найти Sub-Control Handle... или я не знаю как это называется :stars:

И да, по другому отослать сообщение нельзя.
 
Верх