Тема: AHK: определение завершения набора текста командой SendInput
Доброго времени суток!
Столкнулся с одной проблемой, которую никак не могу решить (в AHK новичок) - требуется помощь мастеров AHK.
В общем, требуется регулярная вставка текста, который содержится в буфере обмена. Причем не простая вставка, а именно имитация набора (для чего использую команду SendInput).
Текст может состоять из русских и английских символов различной длины.
Программа, в которую вставляется текст из буфера обмена, корректно распознает вставляемые символы только если раскладка окна переключена на английский язык. При этом 99% времени приходится работать в программе на русской раскладке. В связи с этим переключать окно на английский перед вставкой, а потом обратно, "руками" неудобно.
Для решения проблемы использую следующий код:
Home::
SendMessage, 0x50,, 0x4090409,, A ; перед вставкой переключаю активное окно на английский
cpbd = %clipboard%
TimeSleep := (StrLen(cpbd) * 3) ; "костыль" для расчета времени Sleep в зависимости от числа символов в буфере
if TimeSleep <= 50
{
SendInput {Raw}%clipboard%
Sleep, 50
}
else
{
SendInput {Raw}%clipboard%
Sleep, %TimeSleep%
}
SendMessage, 0x50,, 0x4190419,, A ; возвращаю активному окну русский язык
return
И всё было бы хорошо, если бы не один серьёзный минус: перед отработкой команды, которая возвращает окну русский язык, используется "костыль" в виде команды Sleep.
Дело в том, что если в программе работать из локальной сети, то всё ОК, но в последнее время всё чаще приходится работать удаленно - в результате прога регулярно подвисает. И как следствие этого, времени в Sleep'е просто не хватает и на русский окно переключается раньше времени, что приводит к некорректной вставке знаков и английских символов.
Увеличивать время в Sleep'е нерационально.
В связи с этим, возник вопрос: как можно определить, что вставка текста командой SendInput в окно программы закончена (т.е. текст точно полностью успел напечататься)?