1 (изменено: OmTatSat, 2021-08-10 03:31:36)

Тема: AHK: получить координаты мышки как в AhkSpy

Здравствуйте, в окне есть 2 области с разными ahk_id, AhkSpy определяет позицию мышки в соответствии положения мышки в области.
Но когда я использую mousegetpos, то получаю координаты позиции в соответствии с полным размером окна.
CoordMode, Mouse, Client ничего не меняет. Стандартный Active Window Info также не меняет координаты для разных методов CoordMode.
Как получить координаты мышки как в AhkSpy а именно - как в скрине х = 25?

http://forum.script-coding.com/misc.php?action=pun_attachment&item=2210&download=0

Post's attachments

Tim Hox - Area 51 - Radio Edit 08-10-2021 в 02.24.34.PNG 456.01 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: получить координаты мышки как в AhkSpy

Попробуйте так:

~LButton::
   CoordMode, Mouse
   MouseGetPos, x, y,, hCtrl, 2
   WinGetPos, xCtrl, yCtrl,,, ahk_id %hCtrl%
   ToolTip, % "X: " . x - xCtrl . " Y:" . y - yCtrl
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: получить координаты мышки как в AhkSpy

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

4

Re: AHK: получить координаты мышки как в AhkSpy

Этот код показывает именно положение курсора относительно верхнего левого угла контрола, над которым он находится.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: OmTatSat, 2021-08-10 11:44:38)

Re: AHK: получить координаты мышки как в AhkSpy

teadrinker да, вы правы, не полностью повторил ваш код - в тултип вывел координаты с wingetpos.
Если полностью повторить ваш вариант, то в тултипе пустые координаты.
http://forum.script-coding.com/misc.php?action=pun_attachment&item=2211&download=0

Post's attachments

Spotify Free 08-10-2021 в 10.39.58.PNG 751.07 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

6

Re: AHK: получить координаты мышки как в AhkSpy

Проверил, xCtrl над кнопками выдаёт пустое значение, в другой области окна получает значение.
DetectHiddenWindows, on не помогает.

7 (изменено: OmTatSat, 2021-08-10 12:15:15)

Re: AHK: получить координаты мышки как в AhkSpy

MouseGetPos, x, y,, hCtrl, 2

hCtrl выдаёт пустое значение над кнопками.

8 (изменено: OmTatSat, 2021-08-10 12:30:23)

Re: AHK: получить координаты мышки как в AhkSpy

teadrinker спасибо ещё раз, чуть подправил ваш вариант, перешел - на ahk_id и получил то, что хотел.

mButton::
   CoordMode, Mouse
   MouseGetPos, x, y,ahk_id, hCtrl, 2
   WinGetPos, xCtrl, yCtrl,,, ahk_id %ahk_id%
   ToolTip, % "X: " . x - xCtrl . " Y:" . y - yCtrl "`n" "x:" x "`n" "xctrl:" xctrl "`n" "hCtrl:" hCtrl "`n" "ahk_id:" ahk_id
   Return

9

Re: AHK: получить координаты мышки как в AhkSpy

Эти кнопки не являются контролами. Можно так:

~LButton::
   CoordMode, Mouse
   MouseGetPos, X, Y
   AccObj := AccObjectFromPoint(child)
   Pos := AccLocation(AccObj, child)
   ToolTip, % "X: " . X - Pos.x . " Y:" . Y - Pos.y
   Return

AccObjectFromPoint(ByRef _idChild_ = "", x = "", y = "") {
   static VT_DISPATCH := 9, F_OWNVALUE := 1, h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
   
   AccObject := 0
   (x = "" || y = "") ? DllCall("GetCursorPos", "Int64P", pt) : pt := x & 0xFFFFFFFF | y << 32
   VarSetCapacity(varChild, 8 + 2*A_PtrSize, 0)
   if	DllCall("oleacc\AccessibleObjectFromPoint", "Int64", pt, "PtrP", pAcc, "Ptr", &varChild) = 0
      _idChild_ := NumGet(varChild, 8, "UInt"), AccObject := ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
   Return AccObject
}

AccLocation(Acc, ChildId := 0, ByRef Position := "") {
   static type := (VT_BYREF := 0x4000) | (VT_I4 := 3)
   try Acc.accLocation( ComObject(type, &x := 0), ComObject(type, &y := 0)
                      , ComObject(type, &w := 0), ComObject(type, &h := 0), ChildId )
   catch
      Return
   _x := NumGet(x, "int"), _y := NumGet(y, "int"), _w = NumGet(w, "int"), _h := NumGet(h, "int")
   Position := "x" . _x . " y" . _y . " w" . _w . " h" . _h
   Return {x: _x, y: _y, w: _w, h: _h}
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: получить координаты мышки как в AhkSpy

teadrinker так тоже работает, как предпочтительней? Что быстрее работает и меньше нагружает пк?

11

Re: AHK: получить координаты мышки как в AhkSpy

Предыдущий вариант.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder