Форум: "Основная";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
Внизуправление внешней програмой Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c