Что нового

Вопрос по действию функции ControlSend

greg6

Новичок
Сообщения
7
Репутация
1
Интересует может ли при подвисании компьютера/загруженности компьютера данная функция отправить клавишу несколько раз подряд? Даже просто гипотетически. После вставки из буфера таким образом избавлялся от Enter, который неизбежно копируется с excel. Есть способ обрезать через autoit, так и сделаю если выяснится, что правда может отправить несколько нажатий(предполагаю что за счет нагруженности он 'удерживает' клавишу дольше чем надо, паузы на нажатия клавиши стандартные в коде, ничего не менял).Пишу таким образом:
Код:
ControlSend("сообщений","", "[CLASS:TRichViewEdit; INSTANCE:1]","{BACKSPACE}")

Вопрос задан чтобы упростить себе поиск ошибки. Если послать клавишу несколько раз он не может никак, то ошибка явно не тут, тогда буду копать макросы в excel.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
для работы с excel есть библиотека
 
Автор
G

greg6

Новичок
Сообщения
7
Репутация
1
joiner сказал(а):
для работы с excel есть библиотека

Большое спасибо, ей и пользуюсь. Данный контрол работает не с экселем а с аськой, ага. Даже титул в сообщении намекает: ControlSend("сообщений"...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А может правильнее было бы сначала удалить из данных, взятых из excel, символ, называемый ТС "Enter"
Код:
StringRegExpReplace($text, "\R", "")


а потом уже вставлять корректные данные в аську?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
C2H5OH [?]
правильнее было бы
Я так понял, что данный вариант greg6 почему-то рассматривает только, как резервный:
Есть способ обрезать через autoit, так и сделаю если выяснится


greg6 [?]
может отправить несколько нажатий
он 'удерживает' клавишу дольше чем надо
Это совсем не одно и то же. Функция отправляет элементу "нажатие - отжатие" (wm_keydown, wm_char, [пауза], wm_keyup). Причём функция проверяет только наличие элемента, а не его работоспособность. И если функция выполняется один раз, то несколько нажатий она послать не может.
Теперь по поводу удержания. Обычно на удержание реагируют только игры. Оконные элементы, как правило, не проверяют время нажатия. Чтобы в этом убедиться проведите эксперимент с большой задержкой нажатия на незагруженном компьютере. Если у вас текст удалится, в чём я сомневаюсь, значит, теоретически, возможно "удержание дольше, чем надо". Но здесь будет виноват не AutoIt, а само приложение.
Код:
; вариант 1
Opt("SendKeyDownDelay", 2000)
ControlSend("сообщений","", "[CLASS:TRichViewEdit; INSTANCE:1]","{BACKSPACE}")

; вариант 2
ControlSend("сообщений","", "[CLASS:TRichViewEdit; INSTANCE:1]","{BACKSPACE DOWN}")
Sleep(2000)
ControlSend("сообщений","", "[CLASS:TRichViewEdit; INSTANCE:1]","{BACKSPACE UP}")
 
Автор
G

greg6

Новичок
Сообщения
7
Репутация
1
Я так понял, что данный вариант greg6 почему-то рассматривает только, как резервный:
Есть способ обрезать через autoit, так и сделаю если выяснится

Всё верно, именно как резервный(просто потому что если дело таки не в нажатии то зачем переписывать?).


Спасибо за совет, буду пробовать увеличивать время) Отпишу после проверки могут ли быть проблемы при загруженном компе, но это ближе к вечеру/завтра. :beer:
 
Верх