Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2009, 12:30
vv_gulyaev vv_gulyaev вне форума
Прохожий
 
Регистрация: 02.04.2009
Сообщения: 2
Репутация: 10
По умолчанию Работа со сторонним приложением

Здравствуйте, суть задачи такова. Есть некоторое приложение, запущенное на компьютере. В окне у этого приложения есть какие-то кнопки. Возможно ли написать такую программу, которая организовывала бы нажатие на кнопку в этом стороннем приложении.
P.S. Литературу, посвященную работе с посторонними окнами читал, но то, что нужно не нашел.
Ответить с цитированием
  #2  
Старый 02.04.2009, 12:57
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Win32 API вам в руки.
Допустим, есть на чужом окне кнопка, подписанная как 'btn'. Вашему приложению необходимо найти дескриптор чужого окна (handle) и затем — дескриптор кнопки 'btn', которая тоже является (дочерним) окном по сути. Поиск окна по заголовку можно осуществлять с помощью функций FindWindow и FindWindowEx.
Вот, например, такой код позволит вам нажать кнопку 'btn', расположенную в чужом окне с заголовком, скажем, 'other form'.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  OtherWnd: HWND;
  BtnWnd: HWND;
begin
  OtherWnd := FindWindow(nil, PChar('other form'));
  BtnWnd := FindWindowEx(OtherWnd, 0, nil, PChar('btn'));
  SendMessage(BtnWnd, BM_CLICK, 0, 0);
end;
Ответить с цитированием
  #3  
Старый 02.04.2009, 13:00
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Можно. Только нужно знать абсолютные координаты кнопки.
Вот код:

Код:
procedure mouseclick(pt: tpoint; backcursor: boolean = true);

// Переводим экранные координаты к принятым в mouse_event
function screentoabsolute(const pt: tpoint): tpoint;
begin
result.x := round(pt.x * 65535 / screen.width);
result.y := round(pt.y * 65535 / screen.height);
end;

var
oldpt: tpoint;
begin
if backcursor then
oldpt := screentoabsolute(mouse.cursorpos);
pt := screentoabsolute(pt);
{Переместим курсор мыши}
mouse_event(mouseeventf_absolute or mouseeventf_move, pt.x, pt.y, 0, 0);
{Нажамаем левую кнопку мыши}
mouse_event(mouseeventf_absolute or mouseeventf_leftdown, pt.x, pt.y, 0, 0);
{Отпускаем левую кнопки мыши}
mouse_event(mouseeventf_absolute or mouseeventf_leftup, pt.x, pt.y, 0, 0);
if backcursor then
{Перемещаем кнопку мыши обратно}
mouse_event(mouseeventf_absolute or mouseeventf_move, oldpt.x, oldpt.y, 0, 0);
end;
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #4  
Старый 03.04.2009, 08:34
vv_gulyaev vv_gulyaev вне форума
Прохожий
 
Регистрация: 02.04.2009
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо за советы, буду пробовать.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025