| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Передать строку другому приложению |
| Автор: Alexzz 13.6.2010, 20:51 |
| Есть совтинка, которая выполняет очень нужную задачу. Какую - не важно. У совтинки простой интерфейс, окошко на подобии Tedit, в которое нужно вбить строку из цифр, нажать Enter, дальше открываются ещё объекты на форме, которые трогать не нужно, просто ещё 2 раза нажать на Enter. Всё, задача запускается. Проблема заключается в том, что задача выполняется минуты 3-4, затем нужно вбить следующее число и снова трижды нажать Enter. Таких чисел ещё порядка тысячи и они перечислены в файле. Требуется написать маленькую програмульку, которая бы автоматизировала процесс. Предполагаю, что возможно каким-то образом передать другому приложению цепочку как-бы нажатых клавиш. Ведь когда всё подвисает, всё нажатое на клавиатуре где-то сохраняется в каком-то буфере и после развисания всё что было нажато "вылетает". Вот если бы просто вдувать в этот буфер клавиатуры строку из нескольких цифр и трёх ентеров. Типа это всё было нажато с клавы. Наверняка есть возможность и напрямую заполнять Tedit.text, но так как совтинка чужая и что в ней как названо неизвестно, думаю это будет сложнее. |
| Автор: Keeper89 13.6.2010, 20:59 |
| Сперва нужно посмотреть, что это за окошко, с помощью, например, http://www.catch22.net/software/winspy. После этого, брать хендл окошка и посылать туда текст и нажатие клавиш. Относительно времени - можно смотреть либо в сторону 5-ти минутного ожидания, либо определять это каким-либо образом в самой сторонней программе. |
| Автор: Alexzz 14.6.2010, 01:09 | ||
Спасибо, но это как раз длинный путь. Проторчал весь вечер в гугле, перепробовал массу разных вариантов, всё например на блокнот работает а вот на эдит - нет. В конце концов нашёл вот такой вариант:
Тут не весь код, только то что относится к отправке строки другой программе. Изначально s - строка, которую нужно отправить. Всю строку и код клавиши Enter посылаем сразу, затем ещё через 4 секунды посылаем ещё 2 раза клавишу Enter. Вот такой вариант срабатывает на самых разных текстовых полях, и в мемо и в едитах и в комбобоксах, везде где пробовал. Да, после запуска этой проги, нужно быстро активировать другую программу и установить курсор на первое поле ввода. Для этого предусмотрел задержку 5 секунд. Ну а следующее заполнение просто по таймеру, через 3 минуты и все дела. Проверил - хватает. Поставлю на ночь, пусть выполняет мою работу. |
| Автор: Keeper89 14.6.2010, 02:06 |
| Это, конечно, тоже решение, но какое-то стремное оно |
| Автор: Alexzz 14.6.2010, 23:14 |
| Но ведь работает! Сегодня уже сделал большую часть работы, при этом сам плевался в потолок, тоесть занимался другим полезным делом. Добавлено через 4 минуты и 22 секунды Единственное добавил sleep(100) сразу после Sendinput. Иначе бывало что не все символы впечатывались, особенно если срабатывала подсказка (выпадало меню со старыми введёнными кодами) то несколько символов пропадало. А так, символы идут с небольшим интервалом и всё успевает нормально срабатывать. Ну и на вид эффектнее. |
| Автор: Keeper89 15.6.2010, 00:18 |
По поводу http://www.gunsmoker.ru/2010/05/blog-post_25.html |