![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Тогда забил на это, но теперь снова вылезла задача, где двигать мышку просто не вориант. Вот даже тестовый вариант на осеове кода выше, который, в итоге кликает в томесто, где находиться мышка
Код:
procedure TForm1.Clicking(x,y:Integer);
var
aPT:TPoint;
begin
aPT.X:=x;
aPT.Y:=y;
//apt := ClientToScreen(apt);
apt.X := Round(apt.X * (65535 / Screen.Width));
apt.Y := Round(apt.Y * (65535 / Screen.Height));
ShowMessage('x= '+inttostr(apt.X)+'y= '+inttostr(aPT.Y));
Mouse_Event( MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTDOWN, apt.X, apt.Y, 0, 0 );
Sleep(500);
Mouse_Event( MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTUP, apt.X, apt.Y, 0, 0 );
end;apt на выходе содержит 36761,33799. В чем собственно проблема? если раскрыть Код:
//apt := ClientToScreen(apt); |
|
#2
|
||||
|
||||
|
Двигать однако придётся, без "фокуса" клика не будет, но можно запомнить положение курсора, а после нажима вернуть всё взад, вот проверенный пример из drkb:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Pt, oldPt : TPoint;
begin
Application.ProcessMessages;
Pt.x := Button2.Left + (Button2.Width div 2);
Pt.y := Button2.Top + (Button2.Height div 2);
Pt := ClientToScreen(Pt);
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
GetCursorPos(oldPt);
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);;
SetCursorPos(oldPt.X, oldPt.Y);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Нажалась Button2!');
end; |
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Цитата:
можно в качестве "защиты от дураков" перед смещением вызватьShowCursor(false), а в конце тоже самое, но с true, для гарантии |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (07.12.2015)
| ||
|
#5
|
|||
|
|||
|
Может вы вообще предложите как решить мою задачу без мышки.
Цель: есть некая кнопка, по клику на которую вызывается Pop-up класса '#32768', там выбрать саб-меню и потом элемент. Если реализовать по клюку то приходиться ставить слипы, чтобы меню виросовалась и с ним можно было работать. Но каждый слип увелизивает шанс. что юзер что-то испортит. |
|
#6
|
||||
|
||||
|
Цитата:
|