Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Управление чюжим приложением [D7, Win95/98]


BVV ©   (2004-07-17 17:26:00) 

Как в чужом приложении програмно нажать нужную мне Button?
Пробовал так, не катит.

while Hnd=0 do Hnd:= FindWindow(nil, 'окно');
if Hnd 0 then begin
while HndBtn=0 do HndBtn:=FindWindowEx(Hnd,0,'Button','& Да');
if HndBtn< > 0 then begin
IdBtn:=GetDlgCtrlID(HndBtn);
if IdBtn< > 0 then begin
SendMessage(HndAsc,WM_Command,MakeWPara (IdBtn,BN_CLICKED),HndBtn);


shvez_igor   (2004-07-26 10:41:00) [1]

Привет. Я хочу вот что у вас спросить. У меня такая проблема. Мне нужно написать программу управления фотошопом. Я писал програму управления вынапом и всё получилась, это я делал так
1. Находим Handle окна Winamp'a. (можно так - findwindow('Winamp v1.x',nil) )
2. С помощью команды Sendmessage, посылаем окну сообщение вида WM_COMMAND или WM_USER c определёнными параметрами (см. Приложение)
Итак, напишем, например, процедуру для проигрывания заданного трека с заданной громкостью. В дальнейшем, её можно будет использовать в плагине или в программе, работающей совместно с Winamp.
procedure play_track_with_volume(track_number:integer;volume:integer);
// Track_number - номер трека (от 1 до величины количества треков)
// Volume - громкость (от 0 до 255)
var
 h: hwnd;
begin
 h:=findwindow('Winamp v1.x',<STRONg>nil); // Находим окно
 sendmessage(h,WM_USER,track_number-1,121); // Устанавливаем номер трека
 sendmessage(h,WM_USER,volume,122); // Устанавливаем громкость
 sendmessage(h,WM_COMMAND,40045,0); // Проигрываем трек
end;
А как этл сделать з фотошопом ? подскажите плиз.


shvez_igor   (2004-07-26 10:41:00) [2]

Привет. Я хочу вот что у вас спросить. У меня такая проблема. Мне нужно написать программу управления фотошопом. Я писал програму управления вынапом и всё получилась, это я делал так
1. Находим Handle окна Winamp'a. (можно так - findwindow('Winamp v1.x',nil) )
2. С помощью команды Sendmessage, посылаем окну сообщение вида WM_COMMAND или WM_USER c определёнными параметрами (см. Приложение)
Итак, напишем, например, процедуру для проигрывания заданного трека с заданной громкостью. В дальнейшем, её можно будет использовать в плагине или в программе, работающей совместно с Winamp.
procedure play_track_with_volume(track_number:integer;volume:integer);
// Track_number - номер трека (от 1 до величины количества треков)
// Volume - громкость (от 0 до 255)
var
 h: hwnd;
begin
 h:=findwindow('Winamp v1.x',<STRONg>nil); // Находим окно
 sendmessage(h,WM_USER,track_number-1,121); // Устанавливаем номер трека
 sendmessage(h,WM_USER,volume,122); // Устанавливаем громкость
 sendmessage(h,WM_COMMAND,40045,0); // Проигрываем трек
end;
А как этл сделать з фотошопом ? подскажите плиз.


Pavel Zholudev   (2004-07-23 11:00:00) [3]

U menia poluchilos':

procedure TForm1.Button1Click(Sender: TObject);
var Hnd, HndBtn:HWND;
begin
Hnd:=FindWindow(nil,'KONICA MINOLTA PagePro 1300W');
HndBtn:=FindWindowEx(Hnd,0,'Button','Proceed');
SendMessage (HndBtn, BM_Click, 0, 0);
end;


BRemB   (2004-07-21 15:56:00) [4]


> меню "плавает" в зависимости от тек.размеров окна-владельца

вот именно, вот это я и хочу узнать


Digitman   (2004-07-21 15:49:00) [5]

BM_CLICK - то с какого перепугу ? это сообщение к кнопочным контролам относится ..

WM_LBUTTONDOWN + WM_LBUTTONUP должны подойти ... только вот как ты будешь расчитывать позицию элемента, если это элемент раскрывающегося субменю ? да и если это элемент главного меню ? главное меню "плавает" в зависимости от тек.размеров окна-владельца


BRemB   (2004-07-21 15:33:00) [6]


> WM_LEFTDOWN и WM_LEFTUP

Сорри, WM_LBUTTONDOWN, WM_LBUTTONUP


BRemB   (2004-07-21 15:27:00) [7]

А для нажатия выбранного пункта подойдет событие BM_CLICK или два последовательных события WM_LEFTDOWN и WM_LEFTUP?


Digitman   (2004-07-21 15:20:00) [8]

идентифицируй элемент меню и посылай сообщение WM_MENUSELECT

The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item.


BRemB   (2004-07-21 15:08:00) [9]


> Digitman

вполне справедливо, с "рисованной" кнопкой. Хорошо, тут можно по координатам расчитать, а если в другом приложении надо выбрать определенный пункт меню (MainMenu и PopUp). Как быть?


Digitman   (2004-07-21 15:01:00) [10]


> BRemB


тогда дело твое - швах ... никуда не денешься - затея терпит фиаско ... можно еще как-то подергаться, если чужое приложение сделано в той же версии Делфи, но если в иных средах - увы и ах !

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


BRemB   (2004-07-21 14:52:00) [11]


> расчитай координаты области визуализации целевой кнопки
>

тулбар постоянно меняестя кнопки могут также находиться в разных местах


Digitman   (2004-07-21 14:49:00) [12]


> чтоб нажать кнопку на тулбаре надо указть рисунок чтоли


расчитай координаты области визуализации целевой кнопки и посылай в окно тулбара сообщение о событии  мышиного клика в этой области


BRemB   (2004-07-21 14:36:00) [13]

на тулбаре несколько кнопок (пусть 5) мне надо нажать 4 слева. Если при нажатии кнопки в чужом приложении надо указать текст кнопки, то чтоб нажать кнопку на тулбаре надо указть рисунок чтоли!!!!!!!????????? :))


VMcL   (2004-07-21 14:28:00) [14]

>>BRemB  (21.07.04 14:22) [2]

Тогда это вполне может оказаться не кнопка типа BUTTON, а наследник TGraphicControl.


BRemB   (2004-07-21 14:22:00) [15]


> BM_CLICK
> ?

а если кнопка находжиться на тулбаре?


VMcL   (2004-07-17 18:44:00) [16]

BM_CLICK
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо