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