Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Эмулятор клика мыши в Делфи


Автор: leonid4244 28.10.2011, 21:01
Здаствуйте
 У меня такая проблема не магу сделать так чтоб мыш просто кликала левой кнопкой где угодна в любом месте и в любом приложений просто клик нечего сверхъестественного но не как  делал по разному: 
Код

procedure TForm1.Timer2Timer(Sender: TObject);
var
  Pt: TPoint;
begin
  //Преобразуем Pt к аболютным координатам курсора мышки
  GetCursorPos(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);
end;


Код

procedure TForm1.Timer2Timer(Sender: TObject);
var
  foo: TPoint;
begin
  GetCursorPos(foo);
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, foo.X,foo.Y, 0, 0);
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, foo.X,foo.Y, 0, 0);
end;


Код

procedure TForm1.Timer2Timer(Sender: TObject);
var
  foo: TPoint;
begin
  GetCursorPos(foo);
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, foo.X,foo.Y, 0, 0);
  GetDoubleClickTime;
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, foo.X,foo.Y, 0, 0);
end;


Не большой результат был вот с этим кодам  но только сама форма реагировала как бы на клик  но ни одна кнопка на ней не среагировала.
Вот код
Код

procedure TForm1.Timer2Timer(Sender: TObject);
var
  foo: TPoint;
begin
  GetCursorPos(foo);
  sendmessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, foo.X +foo.Y shl 16);
  sendmessage(Handle, WM_LBUTTONUP, MK_LBUTTON, foo.X +foo.Y shl 16);
end;


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

У меня Windows 7 и Dlphi 2010  

Может в них какая заковырка в общем не знаю голова слетает с плеч прошу помогите.

Заранее способа буду  следить за ответами




Автор: DarkProg 28.10.2011, 21:22
Я делал так, в Vista работала, на Win7 лень проект открывать, да и БД той нету не запустится ничего...
Мне надо было обязатеьно счёлкнуть в правом верхнем углу формы, на одном объекте и именно мышой.

Код

Var koord:TPoint;
...
BlockInput(true);
GetCursorPos(koord);
x1:=koord.X;
y1:=koord.Y;
SetCursorPos(frmMain.Left+30,frmMain.Top+contbarMainControlBar.Height+60);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
Application.ProcessMessages;
sleep(30);
SetCursorPos(x1,y1);
BlockInput(false);

Автор: leonid4244 29.10.2011, 12:27
Спасибо замечательный пример все работает и даже на кнопках  

BlockInput(true) ведать памог (чтобы он значил ?)

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

Читал на форумах что современные онлайн игры запускают свои драйвера на Клаву и на мыш (правдо??) или защиту там какую та как 

это все обойти  программно обойти ??

Автор: DarkProg 29.10.2011, 16:59
Цитата(leonid4244 @  29.10.2011,  13:27 Найти цитируемый пост)
BlockInput(true) ведать памог (чтобы он значил ?)

Блокирование ввода с клавиатуры и мыши, я его использовал для того чтобы юзверь ничего никуда не утащил, а то есть всякие нервные, а у меня там Drag'n'Drop'а было немеренно.

Насчёт последнего вопроса - не знаю как помочь.

Автор: leonid4244 29.10.2011, 19:11
Жаль но и на том спасибо

Может кто другой поможет  ???

Автор: TheTipTop 1.11.2011, 19:03
Попробуйте добавить Sleep(10) между нажатием и отпусканием кнопки мыши.

Автор: leonid4244 1.11.2011, 22:47
Пробывал непомагло

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)