1 (изменено: Dexp205, 2019-03-22 12:59:11)

Тема: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Всем привет! У нас есть заданные координаты относительно экрана. В них нужно послать нажатие мыши. Пока использую вот такой "костыль":


CoordMode, Mouse, Screen
SetDefaultMouseSpeed, 0 
...
	BlockInput, On
	MouseGetPos, Xmouse, Ymouse   
    Click %Xc%, %Yc%
    MouseMove, %Xmouse%, %Ymouse%
	BlockInput, Off
...

Есть ли возможность реализовать задуманное иначе?

2 (изменено: Dexp205, 2019-03-22 18:56:03)

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

stealzy
Функция Click перемещает курсор и только потом посылает нажатие. Мне нужно, чтобы нажатие ЛКМ происходило без перемещения курсора, как это происходит при Controlclick. Функцию Controlclick я использовать не могу, так как мне известны только лишь координаты относительно экрана.

3

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

stealzy пишет:

Да, отсылка предполагалась к ControlClick. Но раз вы кликаете в конкретное окно, в чем проблема узнать его местоположение и вычесть его из экраных координат?

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

4

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Если в любое окно, то так попробуйте.

X := 155
Y := 255

1::  
	ControlClickScreen(X, Y)
	Return
	
ControlClickScreen(X, Y, WhichButton = "LEFT", ClickCount = 1, Delay = 20) {
	If !hWnd := DllCall("WindowFromPoint", "Int64", X & 0xFFFFFFFF | Y << 32) 
		Return
	WinGetPos, wX, wY, , , ahk_id %hWnd%
	Loop % ClickCount
	{
		ControlClick, % "x" X - wX " y" Y - wY, ahk_id %hWnd%, , %WhichButton%, , D Pos
		Sleep %Delay%
		ControlClick, % "x" X - wX " y" Y - wY, ahk_id %hWnd%, , %WhichButton%, , U Pos
		Sleep %Delay%
	} 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: Dexp205, 2019-03-23 14:55:37)

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

serzh82saratov
Спасибо, API-функция WindowFromPoint - это то, что нужно!
Не могли бы вы мне для общего развития пояснить, что происходит в этом месте:


... "Int64", X & 0xFFFFFFFF | Y << 32 ...


А так же почему при использовании более понятной мне формы


..."int", X, "int", Y...

клик посылается сквозь окно на рабочий стол?

6 (изменено: serzh82saratov, 2019-03-23 15:16:33)

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Упаковка координат в структуру размером Int64.

У меня так нормально работает, никакой разницы с Int64.

DllCall("WindowFromPoint", "Int", X, "Int", Y) 

А для общего развития сам бы хотел узнать почему вместо одного параметра POINT, можно передавать два параметра.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

serzh82saratov
Возможно дело в этом:

Далее ПРЕДНАМЕРЕННО передаем функции слишком много параметров,
потому что каждый параметр является 32-разрядным, что позволяет функции
автоматически комбинировать их в один параметр в 64 бита (а именно в структуру POINT)

Все же полная работоспособность у меня получается при использовании варианта:


DllCall("WindowFromPoint", "Int64", X & 0xFFFFFFFF | Y << 32)

Остановлюсь пока на нем.

8

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

А откуда эта цитата?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Нашёл. Разобрался.
Тогда не понятно почему у вас есть какая то разница при их применении.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Тогда не понятно почему у вас есть какая то разница при их применении.

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

11

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

Ну в вашем случае, наверное никто не осмелится предположить.
Опишите более подробно что у вас происходит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Нажатие ЛКМ в координаты экрана без перемещения курсора.

На данный момент, способ


DllCall("WindowFromPoint", "Int64", X & 0xFFFFFFFF | Y << 32)

меня полностью удовлетворяет.
Еще раз, спасибо за содействие!