![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одна программа должна нажать на кнопку другой программы [D7, XP]
Krozzz © (2009-02-03 18:46:00)Здраствуйте. Собственно задача:
Есть первая програма с одной кнопкой и одним компонентом Label1. При нажатии на кнопку в Label1 записывается случайный набор букв(20 штук). Есть вторая программа только лишь с одной кнопкой. При нажатии на эту кнопку должна нажаться кнопка в первой прграмме(если программа открыта). Как это можно реализовать?
Заранее спасибо.
Krozzz (2009-02-04 11:34:00) [1]Спасибо
Сергей М. (2009-02-04 11:32:00) [2]Ну наконец-то)
wnd := FindWindowEx(wnd, 0, 'TButton', 'Строго определенное название');
Krozzz (2009-02-04 11:28:00) [3]
> чем визуально отличаются
названием
Сергей М. (2009-02-04 11:19:00) [4]
> Krozzz (04.02.09 11:11) [15]
Ты русский понимаешь ?)
Вопрос же до смешного простой - чем визуальноотличаются эти три кнопки ?
Krozzz (2009-02-04 11:11:00) [5]
> Пользователь-то сам как ориентируется, на какую жмакать
> мышью ?
Я ненажимаю ни на одну из этих кнопок НЕПОСРЕДСТВЕННО МЫШЬЮ. Это за меня делает программа, код которой я написал выше.
И мне интересно, как заставить эту програму нажимать не на Button3, а на Button1.
Сергей М. (2009-02-04 11:04:00) [6]А что, разве на всех трех кнопках написано одно и то же- "ЖМАКНИ МЕНЯ" ?
Пользователь-то сам какориентируется, на какую жмакать мышью ? Они ж все на одно лицо у тебя) ..
Krozzz (2009-02-04 11:00:00) [7]Сергей М.
Была одна с именем Button1 (нажималась соответственно только она).
Появилсь еще две : Button2 и Button3. Нажиматься стала только Button3.
Как сделать, чтобы нажималась только Button1 (или Button2)?
Вот код:
procedure TForm1.Button1Click(Sender: TObject);
var wnd:Hwnd;
begin
wnd := FindWindow(nil,'Form2');
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, 'TButton', nil);
SendMessage(wnd, BM_CLICK, 0, 0);
end;
end;
В нем, насколько я могу видеть, нет привязки а имени кнопки, а только к типу.
Сергей М. (2009-02-04 10:50:00) [8]Ну вот что ты называешь "строго определенной" кнопкой ?
Например, "единственная зеленая кнопка среди других кнопок" ..
Или "вторая слева кнопка считая оттуда-то" ..
Или "единственная круглая кнопка среди других кнопок" ..
Или "единственная кнопка среди других кнопок, где написано ЖМАКНИ МЕНЯ"
??
Krozzz (2009-02-04 10:13:00) [9]
> Надо определиться с критериями "строгой определенности".
Как, если не секрет?
Сергей М. (2009-02-04 10:11:00) [10]
> то вторая программа будет всегда нажимать на последнюю созданную
> кнопку
Это почему же ?
> чтобы нажималась строго определенная кнопка
Надо определиться с критериями "строгой определенности".
Krozzz (2009-02-04 10:00:00) [11]А если у нас в первой программе не одна, а три кнопки , то вторая программа будет всегда нажимать на последнюю созданную кнопку.
Как сделать так, чтобы нажималась строго определенная кнопка?
Leonid Troyanovsky (2009-02-03 22:38:00) [12]
> Krozzz (03.02.09 20:46) [5]
> Каким нужно поставить Msg, wParam, lParam?
WM_COMMAND, msdn.
--
Regards, LVT.
Krozzz (2009-02-03 21:25:00) [13]DVM c - Огромное спасибо!!!
DVM (2009-02-03 20:54:00) [14]
> Каким нужно поставить Msg, wParam, lParam?
BM_CLICK, 0, 0
Krozzz (2009-02-03 20:46:00) [15]
> SendMessage()
Описание:
function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
Каким нужно поставить Msg, wParam, lParam?
DVM (2009-02-03 19:41:00) [16]
> А как отослать?
SendMessage()
Anatoly Podgoretsky (2009-02-03 19:18:00) [17]> Krozzz (03.02.2009 18:46:00) [0]
Очень просто - одна программа лишняя.
Krozzz (2009-02-03 18:56:00) [18]
> и отослать кнопке соответствующее сообщение
А как отослать?
DVM (2009-02-03 18:52:00) [19]
> Как это можно реализовать?
Найти окно первой программы FindWindow(), в нем найти окно кнопки FindWindowEx(), и отослать кнопке соответствующее сообщение о том, что ее нажали или иммитировать клик мышью.