Имитация клика мыши в Delphi

Введение

Многим пользователям часто необходимо сделать имитацию клика мыши. Например, пользователя нет за компьютером, но в определенное время необходимо что-то нажать или запустить. В таких случаях используются программы, которую имитируют одинарный или двойной клик мыши.

Но много таких программных продуктов, которые не выполняют свой функционал, либо же они стоят приличных денег. Поэтому мы сами рассмотрим возможность, как можно сделать свою собственную программу, которая будет имитировать одинарный клик мыши. Вы же можете ее доработать по своему усмотрению.

Для реализации нам понадобится среда разработки Delphi и соответственно небольшие знания в программировании. Кстати, по такому принципу работает программа Clicker.

Узнаем координаты нажатия клавиши мыши

Для того чтобы сделать имитацию клика мыши, необходимо знать координаты на месте экрана, по которым будет происходить одинарный клик мыши.  Координаты можно узнать очень легко в пределах вашей формы (приложения), можно воспользоваться сторонними приложениями, которые позволяют подобный функционал, но мы рассмотрим, как это можно сделать в своем приложении в любой точке экрана и за пределами своего приложения.

Для того чтобы это реализовать, необходимо организовать хук функцией. Если переводить с английского «hook» — это ловушка. Более понятным языком хук – это ловушка для функции. То есть, мы ловим нужную нам функцию Windows и управляем ей сами. Поэтому, чтобы нам узнать координаты в любом месте экрана за пределами своего приложения, необходимо написать хук, который у меня получился следующим образом:

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
 msg: PEVENTMSG;
begin
 if Code >= 0 then
 begin
   result:= 0;
   msg := Pointer(LParam);
   with Form1 do
     case msg.message of
       WM_LBUTTONUP:
       begin
        GetCursorPos(XY);
        Ini.WriteString('Mouse','X',IntToStr(XY.X));
        Ini.WriteString('Mouse','Y',IntToStr(XY.Y));
        Form1.Timer1.Enabled:=True;
       end;
     end;
 end else
   result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

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

Координаты мыши получены, теперь мы спокойно можем имитировать нажатие левой клавишей мыши. Да и не забывайте удалять подключаемую процедуру, установленную в цепочку hook-точек функцией SetWindowsHookEx. Например, следующим образом:

   if HookHandle <> 0 then
    UnhookWindowsHookEx(HookHandle);

Имитируем нажатие клавиши мыши

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

Когда физически нажимаете на кнопку мыши, вы сначала нажимаете, а затем отпускаете кнопку мыши, если программно этого не сделать, то левая кнопка мыши будет в нажатом состоянии. Имитировать клик левой кнопкой мыши можно следующим образом:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
   try  
    SetCursorPos(StrToInt(Ini.ReadString('Mouse','X','')),StrToInt(Ini.ReadString('Mouse','Y','')));
    Sleep(1000);
    Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, StrToInt(Ini.ReadString('Mouse','X','')), StrToInt(Ini.ReadString('Mouse','Y','')), 0, 0);
    Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, StrToInt(Ini.ReadString('Mouse','X','')), StrToInt(Ini.ReadString('Mouse','Y','')), 0, 0);
   except
    on e:Exception do
   end;
end;

При помощи функции SetCursorPos устанавливаем координаты мыши по тем, которые ранее записали в Ini-файл. Используя процедуру Mouse_Event сначала делаем нажатие левой кнопкой мыши по указанным координатам, а затем при помощи этой же процедуры делаем отпускание левой клавиши мыши по тем же координатам.

Заключение

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

Также можно доработать приложение таким образом, чтобы клик осуществлялся в определенное время. Можно также сделать планировщик, чтобы через определенный промежуток времени происходил одинарный или двойной клик мыши. Все зависит от ваших возможностей и потребностей.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Была ли эта статья полезна?

Статьи по теме

Оставить комментарий

Пожалуйста, авторизуйтесь чтобы добавить комментарий.
  Подписаться  
Уведомление о