|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Клик в точку без SetCursorPos
Тогда забил на это, но теперь снова вылезла задача, где двигать мышку просто не вориант. Вот даже тестовый вариант на осеове кода выше, который, в итоге кликает в томесто, где находиться мышка
Код:
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
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
Цитата:
каким оброзом можно добраться до меню? ведь я и хедл его не знаю(код чужой) Ну допустим я вызову попап кликом, получу хендл, а как выбрать сабменю ? |
#8
|
||||
|
||||
На самом деле нужно смотреть ресурсы мастер-программы, меню\попапки могут храниться там под индексами что пользует мастер, их возможно можно и вытащить, хотя раз хэндла нету...
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |