Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать строку другому приложению, нужно заполнить Tedit другого приложения 
:(
    Опции темы
Alexzz
Дата 13.6.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Есть совтинка, которая выполняет очень нужную задачу. Какую - не важно. У совтинки простой интерфейс, окошко на подобии Tedit, в которое нужно вбить строку из цифр, нажать Enter, дальше открываются ещё объекты на форме, которые трогать не нужно, просто ещё 2 раза нажать на Enter. Всё, задача запускается. 

Проблема заключается в том, что задача выполняется минуты 3-4, затем нужно вбить следующее число и снова трижды нажать Enter. Таких чисел ещё порядка тысячи и они перечислены в файле. 

Требуется написать маленькую програмульку, которая бы автоматизировала процесс. Предполагаю, что возможно каким-то образом передать другому приложению цепочку как-бы нажатых клавиш. Ведь когда всё подвисает, всё нажатое на клавиатуре где-то сохраняется в каком-то буфере и после развисания всё что было нажато "вылетает". Вот если бы просто вдувать в этот буфер клавиатуры строку из нескольких цифр и трёх ентеров. Типа это всё было нажато с клавы.

Наверняка есть возможность и напрямую заполнять Tedit.text, но так как совтинка чужая и что в ней как названо неизвестно, думаю это будет сложнее.

Это сообщение отредактировал(а) Alexzz - 13.6.2010, 20:56
PM WWW ICQ MSN   Вверх
Keeper89
Дата 13.6.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Сперва нужно посмотреть, что это за окошко, с помощью, например, WinSpy.
После этого, брать хендл окошка и посылать туда текст и нажатие клавиш.
Относительно времени - можно смотреть либо в сторону 5-ти минутного ожидания, либо определять это каким-либо образом в самой сторонней программе.


--------------------
PM MAIL WWW   Вверх
Alexzz
Дата 14.6.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Спасибо, но это как раз длинный путь. Проторчал весь вечер в гугле, перепробовал массу разных вариантов, всё например на блокнот работает а вот на эдит - нет.  В конце концов нашёл вот такой вариант:
Код
var z: taginput;
zz: tagkeybdinput;
s: string;
begin
      s:=s+chr(13);
      while s<>'' do begin
        zz.wVk:=ord(s[1]);
        zz.wScan:=0;
        zz.dwFlags:=0;
        zz.time:=0;
        zz.dwExtraInfo:=0;
        z.Itype:=1;
        z.ki:=zz;
        Sendinput(1,z,sizeof(z));
        delete(s,1,1);
      end;
      sleep(4000);
      Sendinput(1,z,sizeof(z));
      sleep(100);
      Sendinput(1,z,sizeof(z));
end;

Тут не весь код, только то что относится к отправке строки другой программе.
Изначально s - строка, которую нужно отправить. Всю строку и код клавиши Enter посылаем сразу, затем ещё через 4 секунды посылаем ещё 2 раза клавишу Enter. Вот такой вариант срабатывает на самых разных текстовых полях, и в мемо и в едитах и в комбобоксах, везде где пробовал. Да, после запуска этой проги, нужно быстро активировать другую программу и установить курсор на первое поле ввода. Для этого предусмотрел задержку 5 секунд. Ну а следующее заполнение просто по таймеру, через 3 минуты и все дела. Проверил - хватает.
Поставлю на ночь, пусть выполняет мою работу.  smile 

Это сообщение отредактировал(а) Alexzz - 14.6.2010, 01:11
PM WWW ICQ MSN   Вверх
Keeper89
Дата 14.6.2010, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Это, конечно, тоже решение, но какое-то стремное оно smile


--------------------
PM MAIL WWW   Вверх
Alexzz
Дата 14.6.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 9.4.2007
Где: Латвия

Репутация: 1
Всего: 1



Но ведь работает! 
Сегодня уже сделал большую часть работы, при этом сам плевался в потолок, тоесть занимался другим полезным делом.

Добавлено через 4 минуты и 22 секунды
Единственное добавил sleep(100) сразу после Sendinput. Иначе бывало что не все символы впечатывались, особенно если срабатывала подсказка (выпадало меню со старыми введёнными кодами) то несколько символов пропадало. А так, символы идут с небольшим интервалом и всё успевает нормально срабатывать. Ну и на вид эффектнее.
PM WWW ICQ MSN   Вверх
Keeper89
Дата 15.6.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Цитата(Alexzz @  14.6.2010,  23:14 Найти цитируемый пост)
Но ведь работает! 

По поводу Но ведь работает! smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.