1 (изменено: Viruzober, 2017-12-02 21:53:51)

Тема: AHK: Функции в параметрах, разрешение, масштабирование.

Здравствуйте, что не правильно? Не работают функции. В руководстве нет примера как их использовать в параметрах.

^::
click, width(366), height(193), left, down
click, width(366), height(193), left, up
return
width(pw)
{
npw := round((1920*pw)/A_ScreenWidth)
}
height(ph)
{
nph :=round( (1080*ph)/A_ScreenHeight)
return nph
}
win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

2 (изменено: Alectric, 2017-12-01 13:12:04)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Неправильно использована функция Click.
Лучше использовать MouseClick.


В функции width(pw) нехватает return.

^:: ; Shift+6
MouseClick, L, width(366), height(193),,, D
MouseClick, L, width(366), height(193),,, U
return

width(pw)
{
  return round((1920*pw)/A_ScreenWidth)
}
height(ph)
{
  return round( (1080*ph)/A_ScreenHeight)
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Alectric Спасибо, все работает, вот только не совсем так как я ожидал. Решил я запилить скрипт под все разрешения, который будит нажимать в определенной координате. Вроде все работает, но когда меняю разрешение на своем ноутбуке, не работает, кликает не в том месте, а со старыми координатами все отлично, как такое возможно, на разных разрешениях, и одинаковые координаты? Подставляю функции, и курсор улетает в прекрасное далеко. Может на других устройствах попробовать?

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

4 (изменено: stealzy, 2017-12-02 00:26:47)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober пишет:

Функции в параметрах.

Не вижу ф-ий в параметрах. Где они?

Viruzober пишет:

курсор улетает

Ну возьмите калькулятор, если арифметику забыли: 1920*366 / 1280=366 * 1920/1280.

Viruzober пишет:

(1920*pw)/A_ScreenWidth

Чушь какая-то. Чтобы кликать по фиксированным координатам не надо никаких ф-ий. Чтобы кликать по центру экрана, достаточно умножить 0.5 и A_ScreenWidth.

5 (изменено: Viruzober, 2017-12-02 20:57:20)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

stealzy
Функции Width и height

width(pw)
{
return npw := round(A_ScreenWidth/1920*pw)
}
height(ph)
{
return nph := round(A_ScreenHeight/1080*ph)
}

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

MouseClick, L, width(366), height(193), D
MouseClick, L, width(366), height(193), U

Или я чего-то действительно не понимаю, формулу брал отсюда.
http://forum.script-coding.com/viewtopic.php?id=9860
Мне не надо кликать по центру, надо там где это прописано.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

6 (изменено: stealzy, 2017-12-02 04:31:10)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober пишет:

подгонять координаты под разрешение

Координаты объекта в окне могут измениться только что из-за изменения размеров окна вследствие изменения разрешения.

Viruzober пишет:

срабатывают фиксированные координаты

Что это означает не очень понятно.

Судя по тому, что вы пользуетесь A_Screen переменными у вас должно быть полноэкранное окно, но ниже я буду говорить о обычном окне как более общем случае.
Координаты объектов в клиентской части обычного окна могут реагировать на изменение разрешения экрана или размера окна обычно следующими образами:
1) Игнорировать. Как кликали по 366 пикселю слева или 42-му справа, так и кликаете.
2) Растягиваться вместе с окном:
Вычисляем относительное положение объекта npw := КлиентскаяКоординатаОбъекта / КлиентскаяШиринаОкна.
Далее чтобы получить координату объекта умножаем npw на текущую ширину клиентской области окна. Допустим npw = 0.5, если ширина 640, то координата x = 0.5*640=320, если ширина 1000, то x = 500.
3) Сохранять фиксированное смещение от точки растяжения, например 20 пикселей вниз от центра окна.
4) Более сложными способами, когда в зависимости от соотношения сторон и разрешения меняется компоновка элементов.
При чем в одном и том же окне разные элементы могут вести себя разным образом.

7 (изменено: serzh82saratov, 2017-12-02 09:06:28)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober
Ну так вы дальше первого поста там читали? Там передаются числа дробные в пределах от 0 до 1. В AhkSpy они есть и относительно окна, и относительно клиентской области, и относительно контрола.
http://forum.script-coding.com/viewtopi … 562#p85562
Если очень хочется кормить координатами относительно фуллхд, то так:

pw = 192
MsgBox % round(A_ScreenWidth/(1920/pw))
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Функции в параметрах, разрешение, масштабирование.

stealzy Так и предполагалось, но после изменения разрешения, координаты объекта остались теми же. А я пытался их подогнать под любое разрешение, тут  еще дело в размерах экрана , у меня 15.6 дюйм, а если скрипт запустить например на 17.3, то это будут совершенно другие координаты Даже с моим разрешением? Или нет?

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

9

Re: AHK: Функции в параметрах, разрешение, масштабирование.

serzh82saratov Да, просмотрел всю тему, но с этими числами так и не понял, ваша формула работает, но у меня координаты при изменении разрешения остаются теми же. Похоже надо на других устройствах пробывать.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

10

Re: AHK: Функции в параметрах, разрешение, масштабирование.

stealzy Я спрашиваю, не зависят ли координаты каким нибудь образом от размера экрана? Возня то похоже была напрасна, Надо пробовать на других устройствах, будит ли на них такое же поведение.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

11 (изменено: teadrinker, 2017-12-02 13:33:41)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Не знаю, об этом ли речь, но на ноутбуках с небольшим экраном кроме разрешения нужно учитывать ещё масштабирование. Например, у меня есть ноутбук с экраном 13.5, разрешение там 1920х1080. Если поставить масштаб 100%, размеры теста и элементов экрана будут слишком мелкими, поэтому рекомендуемый масштаб 150%, все окна увеличиваются в полтора раза, и внутренние координаты в GUI перестают соответствовать внешним. Чтобы избежать такого масштабирования для своего GUI есть опция -DPIScale.

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

12

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober,в этом сообщении уберите избыточное цитирование и оформите ссылку тегом URL.

Поставьте точку: http://forum.script-coding.com/viewtopi … 94#p117594.

13

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker Попробовал проверить скрипт на другом ноутбуке, там разрешение 160x900, все работает без всяких изменений координат. Вообщем-то я не правильно к вопросу изначально подошел, Я как понимаю разбираться надо не с разрешением, а с маштабированием. Из этого следует вопрос, как конвертировать координаты под разное маштабирование? Похоже надо изменить название темы. Или нет?

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

14

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Да, лучше изменить, попозже напишу, как масштабирование вычислить.

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

15

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker, не стоит спешить, у Viruzober, судя по его коду полноэкранное окно, скорее всего игрушка, масштабирование там никаким боком. Человек ищет и решает высосанные из пальца проблемы.
А вообще:

RegRead, DisplayScale, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI

16 (изменено: Viruzober, 2017-12-02 22:33:39)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

stealzy Вы вовсе не правы, не игрушка, а разработка скриптов доступности для людей с нарушениями зрения, для музыкального плагина NI Kontakt 5. Не высосанные из пальца, а возможные в будущем, для того чтобы создавать такие скрипты, нужно продумать все возможные проблемы. А так как я чайник в ahk, да и вообще в программировании, вообщем-то так вот приходится высасывать из пальца.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

17

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober, можете скриншот привести, описать, куда нужно кликать, и как расчитываете координаты? Кроме того, можете попробовать на любом устройстве выставить масштабирование 100% через настройки экрана и проверить работоспособность скрипта, потом изменить масштабирование и снова проверить.

Вообще, при смене разрешения, если масштабирование не меняется, координаты объектов не должны меняться. Если меняется масштабирование, обычно меняются координаты объектов внутри окон относительно левого верхнего угла окна.

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

18 (изменено: Viruzober, 2017-12-02 23:14:36)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker Скрин по позже сделаю, А насчет масштабирования, пробовал, работает только на 100. Координаты беру из встроенной утилиты в AHK. Вот я изначально не правильно копать начал, при смене разрешения все работает, а вот с масштабированием нет.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

19 (изменено: Viruzober, 2017-12-02 23:28:55)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker кнопка add Library, и все пункты открытого меню. В первом посте координаты кнопки add Library. Контролов этот софт не отдает, так как написан на qt. Эти координаты при разрешении 1920x1080. Масштабирование 100%. И звените, скрин не сразу понял как прикрепить. А вообще, как рассчитать масштабирование? хотелось бы разобраться.

Post's attachments

Снимок экрана (5).png 126.39 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.
win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

20 (изменено: teadrinker, 2017-12-02 23:33:21)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Попробуйте координаты, полученные по формуле для разных разрешений ещё домножить на ScalingRatio

MsgBox, % ScalingRatio := GetScalingRatio()

GetScalingRatio()  {
   hDC := DllCall("GetDC", Ptr, 0, Ptr)
   hDPI := DllCall("GetDeviceCaps", Ptr, hDC, Int, LOGPIXELSX := 88)
   DllCall("ReleaseDC", Ptr, 0, Ptr, hDC)
   Return hDPI/24*25/100
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Исправил, забыл на 100 поделить.

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

22

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker Огромное спасибо что помогаете. У меня правильная формула в первом посте? И еще, пните в сторону справки по функциям из dll, надо когда-то и их осваивать.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

23 (изменено: stealzy, 2017-12-03 01:24:28)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

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

hWnd := WinExist("A")
myWinPos := WinGetP(hWnd)
WinGetTitle titl, ahk_id %hWnd%

MsgBox % titl "`n" myWinPos.x " " myWinPos.y " " myWinPos.w " " myWinPos.h "`n"
. myWinPos.Client.x " " myWinPos.Client.y " " myWinPos.Client.w " " myWinPos.Client.h "`n"
. myWinPos.Client2Win.x " " myWinPos.Client2Win.y " " myWinPos.Client2Win.w " " myWinPos.Client2Win.h

WinGetP(hwnd) {
	WinGetPos, x, y, w, h, ahk_id %hWnd%
	WinP := {x:x, y:y, w:w, h:h}
	VarSetCapacity(pt, 16)
	NumPut(x, pt, 0) || NumPut(y, pt, 4) || NumPut(w, pt, 8) || NumPut(h, pt, 12)
	if (!DllCall("GetClientRect", "uint", hwnd, "uint", &pt))
		Return
	if (!DllCall("ClientToScreen", "uint", hwnd, "uint", &pt))
		Return
	x := NumGet(pt, 0, "int"), y := NumGet(pt, 4, "int")
	w := NumGet(pt, 8, "int"), h := NumGet(pt, 12, "int")
	Client := {x:x, y:y, w:w, h:h}
	Client2Win := {x:x-WinP.x, y:y-WinP.y, w:w, h:h}
	Return WinP := {x:WinP.x, y:WinP.y, w:WinP.w, h:WinP.h, Client2Win:Client2Win, Client:Client}
}

24

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker пишет:

Попробуйте координаты, полученные по формуле для разных разрешений ещё домножить на ScalingRatio

А в чём отличие?

X := 100
MsgBox % X * (A_ScreenDPI / 96)
teadrinker пишет:

Чтобы избежать такого масштабирования для своего GUI есть опция -DPIScale.

Вот, потому в общем случае будет полезен DPI самого окна, а не общий.

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

25 (изменено: Viruzober, 2017-12-03 12:38:55)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

serzh82saratov  А как все таки рассчитывать координаты по отношению к масштабированию? Столько вариантов, пробовал со ScalingRatio, 193 выдало как 241.25 при масштабе 1.50. Засунул это все в основной скрипт, и курсор улетел не туда. Сейчас попробую с вашим вариантом что нибудь сообразить. Нашел руководство по A_ScreenDPI. Проверил ваш вариант, 193 превратилось в 289.5 при масштабе 1.5, и опять мимо.

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

26 (изменено: stealzy, 2017-12-03 14:16:27)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Viruzober, вы всегда сначала суете, а потом думаете?
Может сначала стоит определить, подвержено ли содержимое окна масштабированию? Измерьте отличаются ли расстояния при разных DPI.
Интерфейс нестандартный, значит скорее всего нет, масштабированию подвергается только внешняя часть окна, а не клиентская область.

CoordMode Mouse, Client

27

Re: AHK: Функции в параметрах, разрешение, масштабирование.

serzh82saratov пишет:

А в чём отличие?

А я и не знал про A_ScreenDPI.

serzh82saratov пишет:

Вот, потому в общем случае будет полезен DPI самого окна, а не общий.

Что за DPI окна? Можно как-то узнать, масштабируется окно, или нет?

Viruzober пишет:

пробовал со ScalingRatio, 193 выдало как 241.25 при масштабе 1.50. ... Нашел руководство по A_ScreenDPI. Проверил ваш вариант, 193 превратилось в 289.5 при масштабе 1.5, и опять мимо.

Хотите сказать, эти варианты выдают разные числа при одинаковом масштабе?

MsgBox, % 193*A_ScreenDPI/96 . "`n" . 193*GetScalingRatio()

GetScalingRatio()  {
   hDC := DllCall("GetDC", Ptr, 0, Ptr)
   hDPI := DllCall("GetDeviceCaps", Ptr, hDC, Int, LOGPIXELSX := 88)
   DllCall("ReleaseDC", Ptr, 0, Ptr, hDC)
   Return hDPI/24*25/100
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28 (изменено: serzh82saratov, 2017-12-03 20:01:05)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

teadrinker пишет:

Что за DPI окна?

Аналогично -DPIScale или +DPIScale.

teadrinker пишет:

Можно как-то узнать, масштабируется окно, или нет?

Не знаю, не пробовал. Вот вроде для 10. Для неизветного окна на практике это видимо не понадобится, а для известного это можно проверить на практике. Вывод: если у окна +DPIScale, то просто умножаем координаты на (A_ScreenDPI / 96), иначе ничего не делаем. Координаты конечно только в клиентской области.

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

29 (изменено: Viruzober, 2017-12-03 21:27:14)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

stealzy Хорошо, как выделить клиентскую часть окна, точнее как указывать координаты, чтобы они относились к этой части? То что подразумевается здесь под клиентской частью, не отдает контролов, все что возвращает эта часть независимо от выбранного объекта. NIVSTChildWindow00007FF9138500001

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

30

Re: AHK: Функции в параметрах, разрешение, масштабирование.

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

win 10.0.14393 Build 14393 x64, AutoHotkey 1.1.26.01.

31 (изменено: stealzy, 2018-01-22 20:48:09)

Re: AHK: Функции в параметрах, разрешение, масштабирование.

Меню Пуск → Программы → AutoHotkey → Active Window Info (Window Spy) → Mouse Position → Client.

RegRead DisplayScale, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI
MsgBox % DisplayScale / 96
MsgBox % GetScalingRatio()
MsgBox % A_ScreenDPI / 96

GetScalingRatio()  {
	hDC := DllCall("GetDC", Ptr, 0, Ptr)
	hDPI := DllCall("GetDeviceCaps", Ptr, hDC, Int, LOGPIXELSX := 88)
	DllCall("ReleaseDC", Ptr, 0, Ptr, hDC)
	Return hDPI/24*25/100
}