![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
управление внешней програмой [D7]
Wolferio © (2006-03-10 16:31:00)Добрый день
У меня вопрос: как мне можна управлять внешней программой из под делфи. например я запустил внешнюю программу, после чего мне нужно сделать ряд операций из под неё например нажать програмно кнопку F10, потом Shift+F3 после чего вийти из нее.
Коротше говоря как мне управлять внешней програмой програмно!
Спасибо!
Morgoth_ (2006-03-21 15:50:00) [1]так я и думал, ну и ладно )
clickmaker (2006-03-21 15:38:00) [2]
> есть ли другой способ?
нет
Morgoth_ (2006-03-21 15:35:00) [3]спасибо за поправки...
есть в управлении чужими программами еще один интересный момент: если нужная кнопочка лежит на панельке, которая лежит на еще одной панельке (и т.д.), до добираться до нее приходится перебирая рекурсией все панели и панели а панелях )))
есть ли другой способ?
clickmaker (2006-03-21 15:10:00) [4]
> Post как бы получает уведомление о том, что сообщение послано,
> а Send посылает и пофиг, получит ли его программа
почти наоборот
Post получает уведомление, что сообщение поставлено в очередь (но не факт, что получено)
Send вызывает WndProc, поэтому прога его по-любому получит, но ее право - проигнорировать
0bsid (2006-03-21 14:29:00) [5]
> > А почему не SendMessage(... я это, не конкретно про Enter?
>
>
> Я сначала и писал SendMessage, но не работало, может из-
> за особенностей программы... А разница между ними, насколько
> я понял перевод, в том, что SendMessage ставит сообщение
> в очередь, а при PostMessage выполняется немедленно.
> Если ошибся, то может кто поправит?
Post как бы получает уведомление о том, что сообщение послано, а Send посылает и пофиг, получит ли его программа
StriderMan (2006-03-20 19:26:00) [6]
> Я сначала и писал SendMessage, но не работало, может из-
> за особенностей программы... А разница между ними, насколько
> я понял перевод, в том, что SendMessage ставит сообщение
> в очередь, а при PostMessage выполняется немедленно.
> Если ошибся, то может кто поправит?
Наоборот
Wolferio (2006-03-20 19:12:00) [7]Что делать когда программа DOSовская? :-))
Morgoth_ (2006-03-13 10:18:00) [8]> А почему не SendMessage(... я это, не конкретно про Enter?
Я сначала и писал SendMessage, но не работало, может из-за особенностей программы... А разница между ними, насколько я понял перевод, в том, что SendMessage ставит сообщение в очередь, а при PostMessage выполняется немедленно.
Если ошибся, то может кто поправит?
IceBeerg (2006-03-11 12:16:00) [9]Morgoth_ (11.03.06 0:01) [4]
PostMessage(
А почему неSendMessage(...я это, не конкретно про Enter?
Anatoly Podgoretsky (2006-03-11 09:30:00) [10]Партия дай порулить.
Eraser (2006-03-11 02:08:00) [11]
> Wolferio © (10.03.06 16:31)
название внешней программы - в студию.
Morgoth_ (2006-03-11 00:01:00) [12]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
Почему именно так не помню, по-моему из-за программы, которой надо было управлять.
Кашперук Иван (2006-03-10 17:42:00) [13]Это реализуется с помощью отправки сообщений окну этой самой программы. Примеров здесь много, поищите. Но проблема здесь именно в том, чтобы знать, класс или caption этой программы, если это Оконное приложение, конечно-же, и того элемента, в который вы хотите что-то ввести, к примеру
Jeer (2006-03-10 17:38:00) [14]Да напиши свою, пока не разобрался с чужой.
Сергей М. (2006-03-10 16:35:00) [15]Может не стоит горячиться насчет кнопок ?
Может "внешняя программа" реализована как сервер автоматизации ?