1

Тема: AHK: Проверка и изменение масштаба и разверстки

Как проверить, что значение не 100% и его поменять на 100% если истина?
http://prntscr.com/i3z7z9

2

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy, я догадывался что через MSDN в принципе, но не умею им пользоваться. Предполагаю SendMessage нужен тут? А как текущее значение получить в переменную установленного размера?

Поиском тоже пользовался, такой вопрос не поднимался.

3 (изменено: Странникх, 2018-01-23 04:42:17)

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

Как не поднимался, я даже проверил прежде чем писать: "Масштаб" - одна тема на этом форуме. Ну или куча тем в гугле, если перевести на ангийский.

Действительно поднимался, но гуглил этот вопрос я еще до декабря, поэтому так написал ранее Уверен раз Вы заверяете с гуглом, там тоже есть, но я не находил. Возможно не правильно слова на английском вставлял.

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
}

Функция не пашет. 125% втыкал, разницы никакой в возвращаемом значении. Возможно она относится к топику другого ТС'а по расчету формулы масштабирования.
Единственное, что выдает результат DisplayScale из регистра, и то показывает тоже не правильно, 96 значение, которое тоже не меняется если воткнуть 125%.

4

Re: AHK: Проверка и изменение масштаба и разверстки

https://docs.microsoft.com/en-us/window … y-settings

5

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

Насчет поменять я уже ответил выше.

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

stealzy пишет:

Кстати, причем тут разверстка?

Не при чем, разверстка не нужна. Мне нужно получить значение вот отсюда http://prntscr.com/i3z7z9. А как еще сделать если не из текста, так сразу понятно что требуется.

stealzy пишет:

Зачем менять системный масштаб из ahk?

Если "Изменение размера текста, приложений и других элементов" не такое же как 100% у меня, то у других пользователей (у которых 125%, 150% и т.д.) размеры элементов управления больше и пиксель соответственно не находится поскольку элементы сдвигаются, они по сути становятся в разы больше.

6

Re: AHK: Проверка и изменение масштаба и разверстки

Масштаб и разметка* не правильно я написал в первом посте.

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

7

Re: AHK: Проверка и изменение масштаба и разверстки

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

Я так понял из реестра это значение отвечает за "Масштаб и разметку", но почему-то когда я его меняю все равно показывает значение 96.

8 (изменено: stealzy, 2018-01-26 00:16:59)

Re: AHK: Проверка и изменение масштаба и разверстки

А вы что хотите еще свое разрешение экрана установить пользователям ?
Я такую задачу решал один раз, координаты любой точки можно описать формулой:
x := a + b*DisplayScalingRatio + c*WindowClientWidth, где a, b — целые, а c — действительное число. Если положение не зависит от ширины окна c = 0, если не зависит от масштаба b = 0.
В случае адаптивного дизайна, когда при смене разрешения/отношения сторон расположение элементов резко изменяется относительно друг друга, координаты будут описываться разными формулами в зависимости от условий.
Сюда же относятся минимальные размеры элементов.

9 (изменено: Странникх, 2018-01-25 21:23:03)

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

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

Да да верно) Вот только можно все упростить, если наши пиксели находятся в левом верхнем углу, от 0,0. В таком случае они меняются только от увеличения "Масштаба и разметки".

stealzy пишет:

x := a + b*DPI_Scale + c*Width, где a, b — целые, а c — действительное число.

x := x + (DPI_Scale-96) 

Тогда код получается такой. Вычитаем 96 поскольку координаты задавались из параметра 100% в "Масштабе и разметки" и плюсуем уже то на сколько сместился увеличением пиксель.

stealzy пишет:

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

RegRead, LogPixels, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI, LogPixels ; Одно и то же
RegRead, DPI_value, HKEY_LOCAL_MACHINE, Config\0001\Display\Settings, DPILogicalX ; вообще пусто

Да, для изменений в реестре данного параметра в Win10 придется выполнить перезагрузку.

10 (изменено: Странникх, 2018-01-25 23:32:54)

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

Т.е. масштаб в Win 10 изменяется сразу, без завершения сеанса пользователя (перезагрузки)?

Точнее с выходом из системы, перезагружать полностью не нужно. Формулу подправлю, сейчас буду дорабатывать.

RegRead, DPI_value, HKEY_LOCAL_MACHINE, Config\0001\Display\Settings, DPILogicalX ; вообще пусто

Только это возвращает пустое значение.

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

Вот тут воткнул 125%, вышел и зашел в систему, показал результат 120.

11

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

x := b*DisplayScalingRatio + c*WindowClientWidth, если положение не зависит от ширину окна c = 0, если не зависит от масштаба b = 0.

Там в процентном соотношении разница. 120 от 96, это +20% а не 25%, если сравнивать между 100% и 125% выбранными значениями. Значит нужно b брать как координату и к ней плюсовать появившийся процент, предварительно его "отформатировав", то есть если переменная DisplayScalingRatio = 120, то выставить вместо нее 25% процент при условии, что b координата взята из 100%/

12

Re: AHK: Проверка и изменение масштаба и разверстки

x := 10
MsgBox, % Convert(x)

Convert(coordinate) {
	RegRead, DPI_value, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI
	;~ DPI_value = 120
	Return coordinate * DPI_value // 96
}

Как-то странно, если координата у нас 10, то прибавив +25% (если вместо 100%, стоит 125% в "Масштаб и разметка") получится 12,5, а не 12, или в масштабируемости округление идет с остатка больше 5 ?

13 (изменено: Странникх, 2018-01-25 23:53:24)

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

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

Вот именно что никак, как тогда быть? Я получаю соотношение 1.25 , во столько раз оно больше, и даже на него умножая 10, все равно получается дробное число.

Есть координаты записанные при настройках "Масштаба и разметки" в 100%, как их конвертировать при другом масштабе?

stealzy пишет:

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

Я не знаю даст мне округление истинное значение или нет.

14 (изменено: Странникх, 2018-01-26 00:07:25)

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

Что есть истина и как ее проверить? В любом случае переходите на клиентские координаты, если окно не полноэкранное, удачи

Истина - позиция координаты взятая из масштаба 100% без дробного вида в другой опции масштаба. Помогите, подтолкните на решение с дробной координатой )

Вот поэтому всем пользователям проще установить масштаб в 100%, поскольку нельзя конвертировать формулой координату из 100% масштаба в 125%, появляется дробь.

15

Re: AHK: Проверка и изменение масштаба и разверстки

stealzy пишет:

Если даже так, надо спрашивать у вашей игры, как она округляет координаты

К сожалению, игра действительно не предсказуемо округляет, вывести точную формулу не получится. Придется через реестр менять всем в 100%, так зато надежнее.

16

Re: AHK: Проверка и изменение масштаба и разверстки

SetWindowsSettings()
SetWindowsSettings() {
	RegRead, DPI_value, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI
	If (DPI_value != "120") {
		MsgBox 0x40024, % "Change Windows Scale?", % "Your current Windows UI Scale is " DPI_value//24*25 ". If you do not change it to 125`% scripts will not work. Do you want me to do this for you now?"
		IfMsgBox Yes, {
			RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI, 120
			DllCall("ExitWindowsEx")
			Reload
		} Else IfMsgBox No, {
			ExitApp
		}	
	}
}

Написал код, который должен менять "Масштаб и разметку" в 125% и затем делать выход из системы для применения. Я вижу, что раздел в реестре меняется, но фактического эффекта нет. Что не так? Подскажите умные люди

17

Re: AHK: Проверка и изменение масштаба и разверстки

Странникх, я же вам ссылку привёл.
Не вижу, чтоб вы с ней ознакомились.

18

Re: AHK: Проверка и изменение масштаба и разверстки

Malcev, в принципе разобрался, нужно было отметить флажок Win8DpiScaling разрешающий установить пользовательское масштабирование.

SetWindowsSettings()
SetWindowsSettings() {
	RegRead, DPI_value, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI
	If (DPI_value != "120") {
		MsgBox 0x40024, % "Change Windows Scale?", % "Your current Windows UI Scale is " DPI_value//24*25 ". If you do not change it to 125`% scripts will not work. Do you want me to do this for you now?"
		IfMsgBox Yes, {
			RegWrite, REG_DWORD, HKEY_CURRENT_USER\Control Panel\Desktop, Win8DpiScaling, 1
			RegWrite, REG_DWORD, HKEY_CURRENT_USER\Control Panel\Desktop, LogPixels, 120
			RegWrite, REG_DWORD, HKEY_CURRENT_USER, Control Panel\Desktop\WindowMetrics, AppliedDPI, 120
			DllCall("ExitWindowsEx")
			Reload
		} Else IfMsgBox No, {
			ExitApp
		}	
	}
}

Но возникает следующая проблема http://prntscr.com/i5xjik. Скрипт этим флажком пользователю потом вручную не дает менять из выпадающего списка масштабирование, только ручной ввод. Если после всех изменений записать в реестр Win8DpiScaling в 0, то все настройки слетают Это можно как-то убрать?

19

Re: AHK: Проверка и изменение масштаба и разверстки

А зачем пользователю вручную после вашего скрипта что-то изменять?
Пусть ваш скрипт этим и занимается.