Что нового

Не вставляется текст

mazef

Новичок
Сообщения
6
Репутация
0
Код сделан для автоматизации определенных действий, и он повторяется в одном скрипте много раз . В одной области кода, есть момент где он должен вставить ранее скопированный текст, эмуляцией клавиш ctrl+v, но по какой-то причине, после 20+ повторения, он может этого не сделать...
Т.к. проблема возникает на более чем 20-м повторении, и нельзя сказать, на каком именно это призойдет, вполне возможно, что причиной может быть слишком большая нагрузка, для стабильной работы скрипта. Т.к. скрипт открывает программы, которые прилично грузят пк. Поэтому, мне нужен вариант, где я смогу сделать так, что бы код точно вставлял текст, неважно каким образом. Либо способ для фикса этой проблемы, если все же это не из-за большой нагрузки.

Код:
WinSetState("program 1", "", @SW_MINIMIZE)
Sleep (200)
SendKeepActive("program 2")
Send('+{INS}')
Send("{enter}")
SendKeepActive("")
WinActivate("program 3")
WinWaitActive("program 3")
 

lettterssino

Новичок
Сообщения
19
Репутация
1
Не удивительно, как я понимаю, вы каждую новую программу просто скрываете, а не закрываете и в какой-то момент система загрузится очень сильно
 
Автор
M

mazef

Новичок
Сообщения
6
Репутация
0
Не удивительно, как я понимаю, вы каждую новую программу просто скрываете, а не закрываете и в какой-то момент система загрузится очень сильно
Я тебе больше скажу, я их даже не сварачиваю и не скрываю. Поэтому мне и нужно сделать скрипт таким, что бы он смог работать в таких условиях.
 

Andrey_A

Осваивающий
Сообщения
203
Репутация
37
нужно сделать скрипт таким, что бы он смог работать в таких условиях
Для вашей задачи нужно ТОЧНОЕ определение куда посылать.
1. Точный дескриптор окна программы WinGetHandle()
2. При вызове программы, нужно точно знать что она существует WinExists() или WinActive() или WinWait() или WinWaitActive() или поочерёдная проверка нужного до '+{INS}'
3. Если оно существует его надо активировать и передать фокус WinActivate()
4. Далее лучше не Send() , а послать текст (он же в буфере) в точный элемент окна ControlSend() или ControlSetText() + до этого ему передать фокус ControlFocus()
5. Возможно ещё будут нюансы
---
В общем стрелять в программу, которая ещё "не проснулась" не имеет смысла - вернее, как вы и писали, рано или поздно даст сбой
---
Если бы вы дали ряд небольших программ в которые отправляете текст в цикле, то можно было бы дать точный ответ.
 
Последнее редактирование:
Верх