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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.08.2008, 22:20
CRASH009 CRASH009 вне форума
Прохожий
 
Регистрация: 17.08.2008
Сообщения: 2
Репутация: 10
Вопрос Имитация клика мыши

Здравствуйте! Подскажите, как возможно реализовать программу, которая будет имитировать клик мышки в заданной точке экрана? То есть если в область клика попадает объект стороннего приложения (кнопка), то она будет нажиматься.
Спасибо.
Ответить с цитированием
  #2  
Старый 17.08.2008, 23:17
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Используй WinApi функции:
Код:
var P: TPoint;
...
GetCursorPos(P); // получить координаты курсора

SetCursorPos(P); // установить

// нажимаем левую кнопку мыши по заданным координатам
Mouse_Event(MOUSEEVENTF_LEFTDOWN, P.X, P.Y, 0, 0);
// отпускаем
Mouse_Event(MOUSEEVENTF_LEFTUP, P.X, P.Y, 0, 0);
Ответить с цитированием
  #3  
Старый 18.08.2008, 15:45
CRASH009 CRASH009 вне форума
Прохожий
 
Регистрация: 17.08.2008
Сообщения: 2
Репутация: 10
По умолчанию

Да, спасибо. Понял
Но задача немного усложнилась - мне теперь нужно наоборот, чтобы координаты курсора вносились на форме при клике мыши вне пространства формы. Именно при клике. То есть я кликаю мышкой вне формы в другой области экрана, а координаты вносятся на форме. Ведь получается, что форма неактивна и клик мыши мимо формы не будет выполнять событие этой формы...
Ответить с цитированием
  #4  
Старый 19.08.2008, 00:14
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Ну первое что пришло на ум это ловушка...
Создаешь dll приложение, и пишешь:
Код:
library hook;

uses
  Windows, Messages, SysUtils;

var
  SysHook: HHook = 0;

function SysMsgHook(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT stdcall;
var
 Text: String;
begin
  if (Code = HC_ACTION) and
     (wParam = WM_LBUTTONDOWN) then
  begin
   Text := Format('X: %d, Y: %d', [TMouseHookStruct(Pointer(lParam)^).pt.X,
                                   TMouseHookStruct(Pointer(lParam)^).pt.Y]);
   {
    каким либо образом выводишь эту строку
   }
  end;

 Result := CallNextHookEx(SysHook, Code, wParam, lParam);
end;

procedure RunHook() export; stdcall;
begin
 SysHook := SetWindowsHookEx(WH_MOUSE, @SysMsgHook, HInstance, 0);
end;

procedure StopHook() export; stdcall;
begin
 UnhookWindowsHookEx(SysHook);
end;

exports RunHook index 1;
exports StopHook index 2;

begin
end.

В самой программе поле строчки
Код:
var
  Form1: TForm1;

пишешь
Код:
procedure RunHook() stdcall; external 'hook.dll';
procedure StopHook() stdcall; external 'hook.dll';

Далее активируешь ловушку
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 RunHook();
end;

И уничтожешь
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 StopHook();
end;

Чесно говорю, сам не тестил, но должно работать
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter