Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

управление внешней програмой   Найти похожие ветки 

 
Wolferio ©   (2006-03-10 16:31) [0]

Добрый день

У меня вопрос: как мне можна управлять  внешней программой из под делфи. например я запустил внешнюю программу, после чего мне нужно сделать ряд операций из под неё например нажать програмно кнопку F10, потом Shift+F3 после чего вийти из нее.
Коротше говоря как мне управлять внешней програмой програмно!


Спасибо!


 
Сергей М. ©   (2006-03-10 16:35) [1]

Может не стоит горячиться насчет кнопок ?
Может "внешняя программа" реализована как сервер автоматизации ?


 
Jeer ©   (2006-03-10 17:38) [2]

Да напиши свою, пока не разобрался с чужой.


 
Кашперук Иван   (2006-03-10 17:42) [3]

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


 
Morgoth_   (2006-03-11 00:01) [4]

FindWindow(nil, "загаловак тута"); - искать окно
 FindWindowEx - искать элемент по его классу

послать Enter
 PostMessage(H,WM_KeyDown,VK_RETURN,0);
 PostMessage(H,WM_KeyUp,VK_RETURN,0);

для нажатия сочетания клавиш, например Ctrl + S я делал так:
   keybd_event(VK_CONTROL, 0, 0, 0); // опускаем Ctrl
   keybd_event(Ord("S"), 32, 0, 0);      // опускаем S
   keybd_event(Ord("S"), 32, KEYEVENTF_KEYUP, 0); // поднимаем S
   keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0); // поднимаем Ctrl
Почему именно так не помню, по-моему из-за программы, которой надо было управлять.


 
Eraser ©   (2006-03-11 02:08) [5]


> Wolferio ©   (10.03.06 16:31)

название внешней программы - в студию.


 
Anatoly Podgoretsky ©   (2006-03-11 09:30) [6]

Партия дай порулить.


 
IceBeerg ©   (2006-03-11 12:16) [7]

Morgoth_   (11.03.06 0:01) [4]
PostMessage(

А почему не SendMessage(... я это, не конкретно про Enter?


 
Morgoth_   (2006-03-13 10:18) [8]

> А почему не SendMessage(... я это, не конкретно про Enter?

Я сначала и писал SendMessage, но не работало, может из-за особенностей программы... А разница между ними, насколько я понял перевод, в том, что SendMessage ставит сообщение в очередь, а при PostMessage выполняется немедленно.
Если ошибся, то может кто поправит?


 
Wolferio ©   (2006-03-20 19:12) [9]

Что делать когда программа DOSовская? :-))


 
StriderMan ©   (2006-03-20 19:26) [10]


> Я сначала и писал SendMessage, но не работало, может из-
> за особенностей программы... А разница между ними, насколько
> я понял перевод, в том, что SendMessage ставит сообщение
> в очередь, а при PostMessage выполняется немедленно.
> Если ошибся, то может кто поправит?


Наоборот


 
0bsid ©   (2006-03-21 14:29) [11]


> > А почему не SendMessage(... я это, не конкретно про Enter?
>
>
> Я сначала и писал SendMessage, но не работало, может из-
> за особенностей программы... А разница между ними, насколько
> я понял перевод, в том, что SendMessage ставит сообщение
> в очередь, а при PostMessage выполняется немедленно.
> Если ошибся, то может кто поправит?

Post как бы получает уведомление о том, что сообщение послано, а Send посылает и пофиг, получит ли его программа


 
clickmaker ©   (2006-03-21 15:10) [12]


> Post как бы получает уведомление о том, что сообщение послано,
>  а Send посылает и пофиг, получит ли его программа

почти наоборот
Post получает уведомление, что сообщение поставлено в очередь (но не факт, что получено)
Send вызывает WndProc, поэтому прога его по-любому получит, но ее право - проигнорировать


 
Morgoth_   (2006-03-21 15:35) [13]

спасибо за поправки...
есть в управлении чужими программами еще один интересный момент: если нужная кнопочка лежит на панельке, которая лежит на еще одной панельке (и т.д.), до добираться до нее приходится перебирая рекурсией все панели и панели а панелях )))
есть ли другой способ?


 
clickmaker ©   (2006-03-21 15:38) [14]


> есть ли другой способ?

нет


 
Morgoth_   (2006-03-21 15:50) [15]

так я и думал, ну и ладно )



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
15-1144293995
Rentgen
2006-04-06 07:26
2006.04.30
какой коэффициент счетчика, если известны Ктт и Ктн ???


2-1144925925
Случайный прохожий
2006-04-13 14:58
2006.04.30
Архивация в делфи


2-1144814332
Officeman
2006-04-12 07:58
2006.04.30
"105.00" и "105,00" Как иcправить этот глюк?


2-1144428693
TimScorp
2006-04-07 20:51
2006.04.30
Условия отбора


15-1144599489
Yanis
2006-04-09 20:18
2006.04.30
Опять...