Что нового

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

mfcs

Новичок
Сообщения
13
Репутация
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

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

mfcs

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

Andrey_A

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