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

Вниз

Управлять другим приложением!   Найти похожие ветки 

 
grigory ©   (2005-01-12 16:16) [0]

Здравсвуйте! Подскажите..можно ли, и как, из одного приложения работать с другим? то есть например нажимать кнопки..или выбирать пункт меню! Наверно нужно SendMessage послать окну сообщение?если можно пример.. Спасибо!


 
kaZaNoVa ©   (2005-01-12 16:32) [1]

кусок реально работающего кода
(писал давно, просьба не пинать:)))

procedure TForm1.Button4Click(Sender: TObject);
begin
TxtLength := SendMessageTimeout(w,WM_GETTEXTLENGTH,0,0,SMTO_NORMAL,700,w1);
txtlength := txtlength+1;
setlength (buffer, 412);
SendMessageTimeout(w,wm_gettext,412,longint(@buffer[1]),SMTO_NORMAL,750,w1);
label2.Caption:=inttostr(currentuin);
if currentuin>login( buffer) then currentuin:=login( buffer);
if currentuin=login( buffer) then exit;
currentuin:=login( buffer);

Potok:=TFailo.Create(true);
Potok.Priority:=tpLowest;
Potok.FreeOnTerminate:=true;
Potok.Resume;

SetWindowPos(Handle, HWND_TOPMOST, Left, Top,//поверх всех окон
Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE) ;

end;


 
grigory ©   (2005-01-12 16:44) [2]

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


 
Eraser ©   (2005-01-12 16:47) [3]

grigory
Именно SendMessage или PostMessage.


 
GanibalLector ©   (2005-01-12 20:49) [4]

2 grigory[0]
Нормальные пацаны COM для этого используют.Скажу больше,на этом форуме как раз есть ветка "COM и Corba".


 
Anatoly Podgoretsky ©   (2005-01-12 21:09) [5]

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


 
Eraser ©   (2005-01-12 21:16) [6]

GanibalLector
для того чтобы использовать COM необходимо, чтобы приложение, которым ты хочешь управлять, поддерживало то самый COM, ну ка поуправляй Winamp"om при помощи COM... а через сообщения- как два пальца об асфальт))


 
Sumor   (2005-01-12 21:20) [7]

2 варианта и совершенно разные:
1. Нужно работать со своим, но другим приложением. Тогда действительно лучше COM, возможно устаревший DDE или просто Pipe/mailslot

2. Нужно работать с чужим приложением, которое конечно же не умеет нажимать на кнопки через COM. Тогда необходимо найти нужную кнопку на экране с помощью FindWindow и FindWindowEx и послать ей сообщение SendMessage (или PostMessage). Типы сообщений представлены в справке. Некоторые сообщения не хотят посылаться чужим окнам, опять же читайте справку, возможно надо AttachThreadInput или что-то ещё


 
grigory ©   (2005-01-17 20:49) [8]

просто не совсем пойму..как конкретно выбрать определенную кнопку..например нажать "файл",а затем пункт меню! Как имя кнопки узнать, чтоб уже послать СендМесседж конкретно ей!


 
Eraser ©   (2005-01-17 20:54) [9]

grigory ©
А слышал про понятие ДЕСКРИПТОР?


 
Sumor   (2005-01-18 00:24) [10]

Что касается кнопки:
Ищешь окно, где расположена кнопка (FindWindow).
Затем пробегаешь по её подчинённым элементам с помощью FindWindowEx, указывая например текст кнопки. Затем посылаешь ей сообщение о том что она нажата.
Что касается меню. Также ищешь окно, где расположено меню (FindWindow). Затем получаешь его меню (GetMenu), Перечисляешь его пункты (всего их GetMenuItemCount) и ищешь нужный (GetMenuItemInfo). Далее берёшь хендл подменю, например подменю Файл (GetSubMenu). перечисляешь подменю аналогичным образом как и с главным меню. Находишь нужное - посылаешь сообщение о том, что оно нажато.
На самом деле, в самом простом случае иногда достаточно знать параметры сообщения WM_COMMAND чтобы симитировать нажатие кнопки или пункта меню. Эти параметры можно отловить через Spy или WinSight.
А теперь за книжки, и читать про все указанные здесь функции :)


 
grigory ©   (2005-01-18 12:07) [11]


> Sumor

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


 
Sumor   (2005-01-18 19:06) [12]

Точно такая и есть



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

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

Наверх




Память: 0.49 MB
Время: 0.033 c
1-1108450650
Pashkerton
2005-02-15 09:57
2005.02.27
Динамическое TMemo


1-1108396972
Коля
2005-02-14 19:02
2005.02.27
Как использовать автоматически добавляемое PopupMenu в своём?


1-1107968377
alexa
2005-02-09 19:59
2005.02.27
Gif


14-1107415284
Jay1982
2005-02-03 10:21
2005.02.27
ЖК-Монитор


1-1108024952
VladRaven
2005-02-10 11:42
2005.02.27
RxDBLookupList как програмно установить (выделить синим).