Что нового

Непонятно поведение ControlSend

blacklis

Новичок
Сообщения
64
Репутация
1
Добрый день.
имеем функцию
Код:
Func start()
	$kolvo = _GUICtrlListView_GetItemCount($ListView)
	$n = 0
do
 $a = _GUICtrlListView_GetItemTextString($ListView, $n)
 sleep(1000)
 $n = $n + 1
  _IENavigate ($oIE, $a )
sleep(1000)
 ; ToolTip('ввод' ,0,1)
_IETagClassClick($oIE, 'div', 'input_back_content', 'Написать сообщение..')
sleep(1000)
$text2 = GUICtrlRead($text)
sleep(1000)
ControlSend ( $winname, '', '', $text2)
sleep(5000)
$text2 = 
	;ToolTip($kolvo ,0,1)
sleep(500)
	sleep(1000)
	;_IEAEAction($oPCode, "click"); это должно было нажимать кнопку "отправить", а на деле до него не доходит, отправляет ControlSend
Until $n = 1;$kolvo
EndFunc
Func _IETagClassClick($o_Obj, $s_TagName, $s_ClassName, $s_Innertext = '') ;взята с форума
    Local $o_Tags
    If Not IsObj($o_Obj) Then Return SetError(1)
    If (Not $s_TagName Or Not $s_ClassName) Then Return SetError(1)
    $o_Tags = _IETagNameGetCollection($o_Obj, $s_TagName)
    If @error Then Return SetError(1)
    For $o_Tag In $o_Tags
        If $o_Tag.ClassName == $s_ClassName Then
            If $s_Innertext Then
                If $o_Tag.innertext == $s_Innertext Then
                    _IEAction($o_Tag, 'click')
                    If @error Then Return SetError(1)
                    _IELoadWait($o_Obj)
                    If @error Then Return SetError(1)
                    Return SetError(0)
                EndIf
            Else
                _IEAction($o_Tag, 'click')
                If @error Then Return SetError(1)
                _IELoadWait($o_Obj)
                If @error Then Return SetError(1)
                Return SetError(0)
            EndIf
        EndIf
    Next
    Return SetError(2)
EndFunc   ;==>_IETagClassClick



По задумке, функция переходит на страницу(группа в вк),, ссылка на которую берётся из таблицы, активирует поле для ввода текста, вставляет текст с переменной и нажимает отправить
Так вот, ControlSend вставляет информацию некорректно, иногда не полностью, ещё и сам отправляет по 2-3 раза (не нажимая кнопку "отправить").
Почему так? И как исправить?
 

madmasles

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


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

blacklis

Новичок
Сообщения
64
Репутация
1
Решил проблему сам.
Дело было в том, что при считывании строки из edit, считывались переходы строки, и видимо эмулировались подобно интеру и из-за этого ControlSend отправлял сообщения кусками, разрывая в тех местах, где были переходы строк.
Заменил на это:
Код:
do
 $a = _GUICtrlListView_GetItemTextString($ListView, $n)
 sleep(1000)
  ;MsgBox(4160, "Информация", "Текст 2-го пункта: "  & _GUICtrlListView_GetItemTextString($ListView, $n))
$n = $n + 1
  _IENavigate ($oIE, $a )
sleep(1000)
 ; ToolTip('ввод' ,0,1)
_IETagClassClick($oIE, 'div', 'input_back_content', 'Написать сообщение..')
sleep(1000)
	$text2 = GUICtrlRead($text)
ClipPut ( $text2 )
ControlSend ( $winname, '', '', '^v')
sleep(200)
ControlSend ( $winname, '', '', '{ENTER}')
sleep(200)
ControlSend ( $winname, '', '', '^{ENTER}')

	;ToolTip($kolvo ,0,1)
sleep(500)
	sleep(1000)
Until $n = 1;$kolvo
EndFunc

Далеко не самый лучший вариант, но мне подходит
Тема решена. ;)
 
Верх