1 (изменено: serzh82saratov, 2018-05-15 01:51:16)

Тема: AHK: Управление монитором, DDC/CI

Есть утилиты для управления настройками монитора, местами пишут что возможно переключать (что и требуется в первую очередь) доступные из меню профили (яркость, гамма, контраст и.т.д.).
На офф форуме тоже немного есть по теме DDC/CI. Кто сталкивался?

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

2

Re: AHK: Управление монитором, DDC/CI

Я не сталкивался, но используя готовый код по получению-изменению яркости можно изменять и другие настройки.
https://autohotkey.com/boards/viewtopic … 762#p45762
https://autohotkey.com/board/topic/9688 … ut-source/

3 (изменено: serzh82saratov, 2018-05-15 17:56:11)

Re: AHK: Управление монитором, DDC/CI

Спасибо, у немцев пример не видел. Добавил себе ещё контраст, уже можно задавать свои профили.
Так понимаю это всё что есть в этом интерфейсе?
Вроде как то можно получать ещё фичи самого монитора, глубина чёрного, игровой режим, гамма, громкость.
Может RequestAndCapabilitiesReply получает возможности монитора, и их как то можно использовать для запросов.

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

4

Re: AHK: Управление монитором, DDC/CI

Насчет CapabilitiesRequestAndCapabilitiesReply не знаю, но по второй ссылке автор запускает GetVCPFeatureAndVCPFeatureReply с данными по этой ссылке:
http://jaffar.cs.msu.su/oleg/ddcci/
А полную спецификацию VESA Monitor Control Command Set Standard я нашел тут:
https://milek7.pl/ddcbacklight/mccs.pdf

5

Re: AHK: Управление монитором, DDC/CI

Теперь ясно, вообщем весь стандартный интерфейс, с фичами конкретного монитора будет тёмный лес.
High-Level Functions это как бы несколько функций винапи делающих тоже самое, что может GetVCPFeatureAndVCPFeatureReply.
Но не понял как они возвращают минимальные значения, если GetVCPFeatureAndVCPFeatureReply возвращает только текущее и максимальное.

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

6

Re: AHK: Управление монитором, DDC/CI

На простом не получается, как выключить монитор.

Linux DDC/CI Tool page
Control 0xe1: +/1/1 [SAM: Power control (0 - off/1 - on)]
0xe1 SAM: Power control Sniffed (0 - off/1 - on)


SetVCP("0xe1", "0x0")


getMonitorHandle() { 
	HMON := DllCall("User32.dll\MonitorFromWindow", "Ptr", 0, "UInt", 0x02, "UPtr")
	DllCall("Dxva2.dll\GetNumberOfPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UIntP", PhysMons, "UInt") 
	VarSetCapacity(PHYS_MONITORS, (A_PtrSize + 256) * PhysMons, 0) ; PHYSICAL_MONITORS
	DllCall("Dxva2.dll\GetPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UInt", PhysMons, "Ptr", &PHYS_MONITORS, "UInt")
	HPMON := NumGet(PHYS_MONITORS, 0, "UPtr") 
	return  HPMON 
}

destroyMonitorHandle(handle) {
	DllCall("dxva2\DestroyPhysicalMonitor", "Ptr", handle) 
}

SetVCP(key, val) {
	handle := getMonitorHandle()
	DllCall("dxva2\SetVCPFeature"
	, "int", handle
	, "char", key
	, "uint", val)
	destroyMonitorHandle(handle)
}  

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

7

Re: AHK: Управление монитором, DDC/CI

SetVCP("0xd6", "0x4")

Нашёл, VESA стр70.

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

8

Re: AHK: Управление монитором, DDC/CI

Надо же, целая куча функций для управления монитором, а я всё в кнопки тыркаю. "Чего тут думать, трясти надо!" (с)

9

Re: AHK: Управление монитором, DDC/CI

Во, во!
Я тоже был удивлён, а оно уже давно есть.

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

10

Re: AHK: Управление монитором, DDC/CI

Никак не пойму как дойти именно до функций конкретного монитора, например в VESA не нашёл black boost (усиление чёрного).

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

11

Re: AHK: Управление монитором, DDC/CI

Попробуй через softMCCS посмотреть.
http://www.ddc-ci.com/

12

Re: AHK: Управление монитором, DDC/CI

Ничего не выудил. А ты что то пробовал?

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

13 (изменено: Malcev, 2018-05-22 21:53:44)

Re: AHK: Управление монитором, DDC/CI

У меня в мониторе нету black boost.
Программа  при запуске выдает разные Manufacturer reserved code, которые запускать я не хочу, чтобы не сбить настройки.

14

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Подскажите пожалуйста, есть монитор Samsung T220 и телевизор Samsung, возможно ли выключать только монитор, когда смотришь кино? Рабочий стол просто растянут, т.к. разные разрешения у дисплеев.

15

Re: AHK: Управление монитором, DDC/CI

Zak пишет:

Рабочий стол просто растянут, т.к. разные разрешения у дисплеев.

В смысле - Расширенный, на каждом своё разрешение?

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

16

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Да, 1680x1050 и 1920x1080, поэтому дублировать не получится. Но вот можно ли отключать только монитор, т.к. по таймеру энергопитания, они естественно отключаются оба, а на телевизоре ещё и плавает надпись "Нет сигнала".

17

Re: AHK: Управление монитором, DDC/CI

http://forum.script-coding.com/viewtopi … 932#p72932

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

18

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
А как оно работает? Как потом включить монитор? Мне использовать этот код?

Run DisplaySwitch.exe /internal ; первый монитор

19

Re: AHK: Управление монитором, DDC/CI

Почему бы не попробовать?



Run DisplaySwitch.exe /external ; второй монитор
Sleep  3000
Run DisplaySwitch.exe /internal ; первый монитор

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

20 (изменено: Zak, 2019-01-12 21:15:29)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Боюсь отключу все дисплеи и придётся хард-ресетить. Рискну.)

21 (изменено: Zak, 2019-01-12 21:31:07)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Попробовал, всё правильно, оказывается он полностью отключает монитор, я то хотел "гасить". Пишу с телевизора.)

По сути, он просто меняет параметр "Несколько дисплеев: Расширить эти экраны" на "Несколько дисплеев: Отобразить рабочий стол только на 1". Для частого просмотра кино не очень удобно, но видимо просто "гасить" один монитор невозможно.

Run DisplaySwitch.exe /internal ; первый монитор

22 (изменено: serzh82saratov, 2019-01-12 22:12:39)

Re: AHK: Управление монитором, DDC/CI

Значит выключить питание.


SetVCP("0xd6", "0x4")  ;	display off
Sleep  3000
SetVCP("0xd6", "0x1")  ;	display on

getMonitorHandle() { 
	HMON := DllCall("User32.dll\MonitorFromWindow", "Ptr", 0, "UInt", 0x02, "UPtr")
	DllCall("Dxva2.dll\GetNumberOfPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UIntP", PhysMons, "UInt") 
	VarSetCapacity(PHYS_MONITORS, (A_PtrSize + 256) * PhysMons, 0) ; PHYSICAL_MONITORS
	DllCall("Dxva2.dll\GetPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UInt", PhysMons, "Ptr", &PHYS_MONITORS, "UInt")
	HPMON := NumGet(PHYS_MONITORS, 0, "UPtr") 
	return  HPMON 
}

destroyMonitorHandle(handle) {
	DllCall("dxva2\DestroyPhysicalMonitor", "Ptr", handle) 
}

SetVCP(key, val) {
	handle := getMonitorHandle()
	DllCall("dxva2\SetVCPFeature"
	, "int", handle
	, "char", key
	, "uint", val)
	destroyMonitorHandle(handle)
}  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23 (изменено: Zak, 2019-01-12 22:20:38)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Класс, работает! Я поэтому и заинтересовался, т.к. понял, что Вы нашли внутренние команды для мониторов. Спасибо большое!

24 (изменено: serzh82saratov, 2019-01-12 23:20:45)

Re: AHK: Управление монитором, DDC/CI

Никто не пробовал получить MonitorManufacturer (самсунг такая то модель) из имени (\\.\DISPLAY1) или хэндла монитора. Код ниже у меня выводит только один из двух мониторов, причём в не зависимости главный он или нет.


objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" A_ComputerName "\root\cimv2")

For objDeskMon in objWMIService.ExecQuery("Select * from CIM_DesktopMonitor")
{
	DeviceID := objDeskMon.DeviceID, PNPDeviceID := objDeskMon.PNPDeviceID, MonitorType := objDeskMon.MonitorType, MonitorManufacturer := objDeskMon.MonitorManufacturer
	Msgbox %  DeviceID "`n"  PNPDeviceID "`n" MonitorType  "`n" MonitorManufacturer
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25 (изменено: Zak, 2019-01-12 23:51:11)

Re: AHK: Управление монитором, DDC/CI

Я вот нашёл аналогичный по задаче Ваш скрипт, но с заливкой монитора чёрным цветом, мне очень понравилось, как он работает с плеером MPC-BE. Можно ли, всё что касается заливки, заменить на выключение питания и включение, при перемещении обратно на левый монитор или закрытии плеера?


AHK: Заполнить монитор №1 чёрным цветом по горячей клавише


А у меня код выдаёт основной монитор, хотя он и второй в системе:

DesktopMonitor1
DISPLAY\SAM03E5\561472322&0&UID1078219
Универсальный монитор PnP
(Стандартные мониторы)

26 (изменено: serzh82saratov, 2019-01-13 15:47:45)

Re: AHK: Управление монитором, DDC/CI

Ну вам прям всё на блюдечке. )


#SingleInstance Force
#NoEnv

Title = ahk_class CalcFrame ahk_exe calc.exe 
 
Loop
{
	Sleep, 500
	If (!WinExist(Title)) 
	{ 
		If Show
		{
			SetVCP("0xd6", "0x1")  ;	power on
			Show := 0
		}
		Continue
	} 
	SysGet, Mon2, Monitor, 2 
	If (Mon2Top = "")
		Continue 
	WinGetPos, X, Y
	If (X >= Mon2Left && X <= Mon2Right && Y >= Mon2Top && Y <= Mon2Bottom) 
	{ 
		If Show
			Continue
		SetVCP("0xd6", "0x2")  ;	0x2 = standby, 0x4 = power off
		Show := 1
	}
	Else If Show
	{ 
		SetVCP("0xd6", "0x1")  ;	power on
		Show := 0
	}
}  

Escape::  ExitApp

getMonitorHandle() { 
	HMON := DllCall("User32.dll\MonitorFromWindow", "Ptr", 0, "UInt", 0x02, "UPtr")
	DllCall("Dxva2.dll\GetNumberOfPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UIntP", PhysMons, "UInt") 
	VarSetCapacity(PHYS_MONITORS, (A_PtrSize + 256) * PhysMons, 0) ; PHYSICAL_MONITORS
	DllCall("Dxva2.dll\GetPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UInt", PhysMons, "Ptr", &PHYS_MONITORS, "UInt")
	HPMON := NumGet(PHYS_MONITORS, 0, "UPtr") 
	return  HPMON 
}

destroyMonitorHandle(handle) {
	DllCall("dxva2\DestroyPhysicalMonitor", "Ptr", handle) 
}

SetVCP(key, val) { 
	handle := getMonitorHandle()
	DllCall("dxva2\SetVCPFeature"
	, "int", handle
	, "char", key
	, "uint", val)
	destroyMonitorHandle(handle)
}  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Ну Вы же понимаете, с околонулевыми познаниями в теме, будет множество затыков на каждом шагу, и только Вас замучаю лишними вопросами. Это как супер сложный квест, недавно разбирался с виртуальными кодами, чтобы переназначение клавиш не зависело от раскладки, так вот, написано "Укажите виртуальный код клавиши", по всем популярным и доверенным ссылкам (microsoft.com) эти коды в шестнадцатеричной системе счисления, долго я ломал голову, пока где-то не вычитал, что её нужно конвертировать в десятичную.


А Ваш скрипт просто фантастика! Спасибо огромное! Такое поведение должно было быть опциональным в Windows, а они добавляют всё что угодно, телеметрию, кортану, но не то, что действительно элементарно повышает удобство. В MPC-BE можно настроить чтобы плеер открывался на мониторе, а полный экран на телевизоре, и даже так работает!

28 (изменено: svoboden, 2019-01-13 08:21:15)

Re: AHK: Управление монитором, DDC/CI

У меня функции выше не выключают монитор, если монитор подключен к ноутбуку.
Так выключает:

Run "C:\Program Files (x86)\ScreenBright\ScreenBright.exe" -set 0xD6 4

Но нужна программа ScreenBright в этом случае.
А кто знает, как не выключать питание монитора, а гасить его. Так можно сделать, например, если включить черную заставку.

29

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

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

Вот же по ссылке код, там как раз тема об этом.


Посмотрел сериал с великолепным кодом от serzh82saratov, выключенный монитор отучает отвлекаться.
The Mist это какой-то ужас.)

30 (изменено: svoboden, 2019-01-13 08:48:18)

Re: AHK: Управление монитором, DDC/CI

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

31

Re: AHK: Управление монитором, DDC/CI

Гасить в смысле чтобы и подсветка выключалась? Такое бывает при переходе в режим ожидания.

32

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

Так выключает:

Что выключает, первый монитор который может быть и главным и неглавным.

svoboden пишет:

если монитор подключен к ноутбуку.

Как подключен - расширенный, главный...

svoboden пишет:

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

Но заставка запустится на всех мониторах.

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

33 (изменено: svoboden, 2019-01-13 15:18:08)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

Что выключает, первый монитор, который может быть и главным и не главным.

Хорошо, допустим монитор не главный, тогда как его выключить с помощью функций, которые выше.

serzh82saratov пишет:

Как подключен - расширенный, главный...

Дублированный.
Так тоже выключает, если указать номер монитора:

Run "C:\Program Files (x86)\ScreenBright\ScreenBright.exe" -set screen 1 0xD6 4

Ну ладно, с выключением питания монитора. А как его можно погасить, не выключая на одном мониторе в компьютере, не знаете?

ypppu пишет:

Гасить в смысле чтобы и подсветка выключалась? Такое бывает при переходе в режим ожидания.

А как перейти в этот режим?

34

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

тогда как его выключить с помощью функций

Надо передавать хэндл нужного монитора в SetVCP. Можно например выключить все кроме главного.
Самому интересно, сначала надо определить значение слова - погасить.

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

35

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

Чтобы подсветка выключалась, не отключая питания монитора.

Предположим если монитор один, как вы это сделаете?

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

36 (изменено: svoboden, 2019-01-13 15:16:40)

Re: AHK: Управление монитором, DDC/CI

Включу заставку черного цвета.

37

Re: AHK: Управление монитором, DDC/CI

Заставку для одного монитора включить наверное не получится, заставка для всего рабочего стола.
И если включить заставку, подсветка же работает.

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

38 (изменено: svoboden, 2019-01-13 15:26:13)

Re: AHK: Управление монитором, DDC/CI

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

39

Re: AHK: Управление монитором, DDC/CI

Как настроить монитор? У меня при выборе заставки "пустой экран" подсветка не выключается.

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

40

Re: AHK: Управление монитором, DDC/CI

Нашёл.

SetVCP("0xd6", "0x4")  ;	display off

0x2 - Off Standby
0x3 - Off Suspend

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

41

Re: AHK: Управление монитором, DDC/CI

Нужно перейти в энергосберегающий режим, а потом запустить заставку.

42

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

А как его можно погасить, не выключая на одном мониторе в компьютере, не знаете?

ypppu пишет:

Гасить в смысле чтобы и подсветка выключалась? Такое бывает при переходе в режим ожидания.

А как перейти в этот режим?

Это есть старая-старая теме на форуме, там всё просто.
Добавлено:
А, вот у себя нашёл.

HWND_BROADCAST = 0xFFFF
  WM_SYSCOMMAND = 0x0112
  SC_MONITORPOWER = 0xF170

  DllCall("SendMessage", "UInt", HWND_BROADCAST
                       , "UInt", WM_SYSCOMMAND
                       , "UInt", SC_MONITORPOWER
                       , "Int", 2)

43

Re: AHK: Управление монитором, DDC/CI

ypppu
Так это оба экрана погасит.
svoboden

0x2 - Off Standby

Не подходит?

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

44

Re: AHK: Управление монитором, DDC/CI

А что, можно переводить в режим ожидания отдельные выходы видеокарты?

45

Re: AHK: Управление монитором, DDC/CI

Думаю что сейчас код из 26 переводит в режим ожидания только основной монитор. Про отдельные выходы видеокарты незнаю.

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

46 (изменено: svoboden, 2019-01-13 16:26:50)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

Не подходит?

Не, не то.
Ладно, буду подбирать коды, может, найду необходимый.

47 (изменено: svoboden, 2019-01-13 16:33:16)

Re: AHK: Управление монитором, DDC/CI

ypppu пишет:

Это есть тема на форуме, там всё просто.

Тоже не то.

48

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

Нужно перейти в энергосберегающий режим, а потом запустить заставку.

У меня также не выключается подсветка.

svoboden пишет:

Не, не то.

Тогда не понимаю что требуется, у меня монитор ведёт себя так же как и в режиме ожидания, какие ещё варианты.

svoboden пишет:

буду подбирать коды, может, найду необходимый параметр.

Там кроме как "Power Mode" и смотреть некуда.

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

49

Re: AHK: Управление монитором, DDC/CI

Тогда что это за функция такая. Ну работает же. Хорошо, буду через заставку пока отключать.

50

Re: AHK: Управление монитором, DDC/CI

svoboden пишет:

Тогда что это за функция такая.

Какая?

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

51 (изменено: svoboden, 2019-01-13 17:11:51)

Re: AHK: Управление монитором, DDC/CI

Хорошо, у меня вопросов нету.

52

Re: AHK: Управление монитором, DDC/CI

А яркость монитора до нуля — это не отключение подсветки?

53 (изменено: serzh82saratov, 2019-01-13 18:36:37)

Re: AHK: Управление монитором, DDC/CI

У меня без яркости и контраста, равных нулю в меню монитора, все равно отчётливо видно картинку.

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

54

Re: AHK: Управление монитором, DDC/CI

Да, у меня тоже. А странно, вообще-то, нелогично. Нулевая яркость — это отсутствие света. Тогда уж в меню должны быть крайними ненулевые числа.

55

Re: AHK: Управление монитором, DDC/CI

В телефонах также, и из ожидания дисплеи не моментально выходят, видимо полное отключение подсветки аппаратно накладно.

На счёт самого интерфейса DDC/CI в проге

ScreenBright for Windows 2000, XP, Vista, 7
Copyright © 2006-2013 Berthold Jaksch
www.screenwhite.com
info@screenwhite.com

написано

Warning
-------

The memory for screen settings, usually EEPROM, can only be written a limited
number of times. For example, some EEPROMs can last 1000000 writes.

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

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

56

Re: AHK: Управление монитором, DDC/CI

Кстати, тогда, видимо, переключение яркости и контраста программно выгоднее. Потому что сразу пишутся нужные значения, а не пробегаются ещё и промежуточные, как через меню. Я меняю яркость и контраст два раза в день обычно. Пусть это 4 записи. Тогда получаем 250000 дней или 684 года.

57 (изменено: svoboden, 2019-01-14 00:12:35)

Re: AHK: Управление монитором, DDC/CI

Да, монитор реагирует на черный цвет и всегда отключается тогда. А так, мне бы нравилось отключения монитора по 0xD6 или через режим ожидания, если бы не всплывающее меню, которое появляется, когда монитор включается. Может, это меню можно как-то убрать программно.

58

Re: AHK: Управление монитором, DDC/CI

При включении после 0xd6 = 0x4 у меня логотип появлялся, и монитор долго включался. При включении после 0xd6 = 0x2 такого нет.

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

59

Re: AHK: Управление монитором, DDC/CI

YMP пишет:

Нулевая яркость — это отсутствие света

Кроме siemens-ов больше нигде ни встречал возможности выставить яркость в 0. На солнце картинку хорошо было видно в отраженном свете. На моих ноутбучных мониторах минимальная цифра 40%.
svoboden, всплывающее меню на моем регулируется в настройках монитора.

60

Re: AHK: Управление монитором, DDC/CI

А телевизор включать/выключать, с помощью скрипта, невозможно? Он не поддерживает эти команды, а то бы от кода из 26 выключались бы оба экрана?

61

Re: AHK: Управление монитором, DDC/CI

Так по нажатию 1 должны отключатся все мониторы кроме главного, на 2 включить.


 
#SingleInstance Force
#NoEnv

1::
	For HMON, M In MDMF_Enum() {
		If !M.Primary 
			SetVCP(HMON, "0xd6", "0x2")  ;	Standby
	}
	Return 
	
2::
	For HMON, M In MDMF_Enum() {
		M.Name "`n" HMON "`n" (M.Primary ? "Primary" : "")
		If !M.Primary 
			SetVCP(HMON, "0xd6", "0x1")  ;	display on
	} 
	Return 
	
Escape:: ExitApp

SetVCP(HMON, key, val) {
	handle := getMonitorHandle(HMON)
	DllCall("dxva2\SetVCPFeature"
	, "int", handle
	, "char", key
	, "uint", val)
	destroyMonitorHandle(handle)
}  

getMonitorHandle(HMON) { 
	DllCall("Dxva2.dll\GetNumberOfPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UIntP", PhysMons, "UInt")  
	VarSetCapacity(PHYS_MONITORS, (A_PtrSize + 256) * PhysMons, 0) ; PHYSICAL_MONITORS
	DllCall("Dxva2.dll\GetPhysicalMonitorsFromHMONITOR", "Ptr", HMON, "UInt", PhysMons, "Ptr", &PHYS_MONITORS, "UInt")
	HPMON := NumGet(PHYS_MONITORS, 0, "UPtr") 
	return HPMON 
}

destroyMonitorHandle(handle) {
	DllCall("dxva2\DestroyPhysicalMonitor", "Ptr", handle) 
}

MDMF_GetInfo(HMON) {
   NumPut(VarSetCapacity(MIEX, 40 + (32 << !!A_IsUnicode)), MIEX, 0, "UInt")
   If DllCall("User32.dll\GetMonitorInfo", "Ptr", HMON, "Ptr", &MIEX) {
      MonName := StrGet(&MIEX + 40, 32)    ; CCHDEVICENAME = 32
      MonNum := RegExReplace(MonName, ".*(\d+)$", "$1")
      Return {Name:      (Name := StrGet(&MIEX + 40, 32))
            , Num:       RegExReplace(Name, ".*(\d+)$", "$1")
            , Left:      NumGet(MIEX, 4, "Int")    ; display rectangle
            , Top:       NumGet(MIEX, 8, "Int")    ; "
            , Right:     NumGet(MIEX, 12, "Int")   ; "
            , Bottom:    NumGet(MIEX, 16, "Int")   ; "
            , WALeft:    NumGet(MIEX, 20, "Int")   ; work area
            , WATop:     NumGet(MIEX, 24, "Int")   ; "
            , WARight:   NumGet(MIEX, 28, "Int")   ; "
            , WABottom:  NumGet(MIEX, 32, "Int")   ; "
            , Primary:   NumGet(MIEX, 36, "UInt")} ; contains a non-zero value for the primary monitor.
   }
   Return False
}

MDMF_EnumProc(HMON, HDC, PRECT, ObjectAddr) {
   Monitors := Object(ObjectAddr)
   Monitors[HMON] := MDMF_GetInfo(HMON)
   Return True
}

MDMF_Enum(HMON := "") {
   Static EnumProc := RegisterCallback("MDMF_EnumProc")
   Static Monitors := {}
   If (HMON = "") ; new enumeration
      Monitors := {}
   If (Monitors.MaxIndex() = "") ; enumerate
      If !DllCall("User32.dll\EnumDisplayMonitors", "Ptr", 0, "Ptr", 0, "Ptr", EnumProc, "Ptr", &Monitors, "UInt")
         Return False
   Return (HMON = "") ? Monitors : Monitors.HasKey(HMON) ? Monitors[HMON] : False
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

62

Re: AHK: Управление монитором, DDC/CI

Zak пишет:

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

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

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

63

Re: AHK: Управление монитором, DDC/CI

Никак не могу понять, как получить имя типа "Acer KG241Q".
Здесь https://docs.microsoft.com/ru-ru/window … evicemodea

dmDeviceName
A zero-terminated character array that specifies the "friendly" name of the printer or display; for example, "PCL/HP LaserJet" in the case of PCL/HP LaserJet. This string is unique among device drivers. Note that this name may be truncated to fit in the dmDeviceName array.

вроде конкретно указано что должно быть нормальное имя.
Есть пример работы с этой структурой https://autohotkey.com/board/topic/7741 … ysettings/, но получение имени я не нашёл.

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

64

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
К сожалению, никакой вариант не работает с телевизором по HDMI. Жаль, отказаться от использования пульта было бы круто, ну и так Ваш 26 скрипт очень хорош, дисциплинирует. Сохраню скрипт, пригодится.

65

Re: AHK: Управление монитором, DDC/CI

У меня 2 монитор по HDMI. Может не поддерживает SetVCP(HMON, "0xd6", "0x2")  ; Standby, попробуйте SetVCP(HMON, "0xd6", "0x4").
И надо посмотреть есть ли у тв поддержка DDC.

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

66

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

Никак не могу понять, как получить имя типа "Acer KG241Q".

А как вы пытаетесь получить? По идее нужно читать строку через StrGet с адреса самой структуры.

67

Re: AHK: Управление монитором, DDC/CI

Это понятно, не могу сообразить где этот адрес.

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

68

Re: AHK: Управление монитором, DDC/CI

В смысле? А как вы получаете эту структуру? Я думал, сами создаёте и подсовываете какой-то функции.

69

Re: AHK: Управление монитором, DDC/CI

Так я же привёл пример с EnumDisplaySettings.

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

70

Re: AHK: Управление монитором, DDC/CI

В этой структуре по какому адресу имя?

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

71

Re: AHK: Управление монитором, DDC/CI

VarSetCapacity(device_mode,126)
success := DllCall("EnumDisplaySettings","uint",0,"uint",-1,"uint",&device_mode)
MsgBox, % StrGet(&device_mode)

72

Re: AHK: Управление монитором, DDC/CI

cdd

?

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

73

Re: AHK: Управление монитором, DDC/CI

У меня то же выдаёт, только большими буквами. Видимо сокращение от Current Display Device.

74

Re: AHK: Управление монитором, DDC/CI

Ну так это же совсем не то что в описании мсдн.
Если выполнить это в ком строке, то всегда правильно:

wmic /NameSpace:\\root\wmi PATH WmiMonitorID get /format:List

UserFriendlyName={65,99,101,114,32,75,71,50,52,49,81,0,0} = Acer KG241Q.
Если запустить:

objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" A_ComputerName "\root\cimv2")
For objDeskMon in objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
{
	DeviceID := objDeskMon.DeviceID, PNPDeviceID := objDeskMon.PNPDeviceID, MonitorType := objDeskMon.MonitorType, MonitorManufacturer := objDeskMon.MonitorManufacturer
	Msgbox %  DeviceID "`n"  PNPDeviceID "`n" MonitorType  "`n" MonitorManufacturer
}

То в MonitorType нужное значение, но оно не видит второго монитора.

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

75

Re: AHK: Управление монитором, DDC/CI

Пробуй получать через DisplayConfigGetDeviceInfo.
https://docs.microsoft.com/en-us/window … deviceinfo

76

Re: AHK: Управление монитором, DDC/CI

Для семёрки другие функции, и они только для неё.

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

77

Re: AHK: Управление монитором, DDC/CI

Название монитора у меня вот так получается:


VarSetCapacity(display_device, 840, 0)
NumPut(840, display_device, 0, "uint")
DllCall("EnumDisplayDevices", "str", "\\.\DISPLAY1", "uint", 0, "ptr", &display_device, "uint", 0)
MsgBox, % StrGet(&display_device + 68)

78

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

Для семёрки другие функции, и они только для неё.

Не понял, ты это к чему?

YMP пишет:

Название монитора у меня вот так получается:

У меня - Generic PnP Monitor, а не название.

79

Re: AHK: Управление монитором, DDC/CI

Круто.
Но из \\.\DISPLAY2 возвращает Универсальный монитор PnP, а в ком строке SMBX2250.

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

80

Re: AHK: Управление монитором, DDC/CI

Malcev
https://docs.microsoft.com/ru-ru/window … evice_name

Minimum supported client Available in Windows 7 Client.

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

81

Re: AHK: Управление монитором, DDC/CI

Malcev пишет:

У меня - Generic PnP Monitor, а не название.

А из ком строки?

wmic /NameSpace:\\root\wmi PATH WmiMonitorID get /format:List
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

82

Re: AHK: Управление монитором, DDC/CI

А ты для XP пишешь?

83 (изменено: serzh82saratov, 2019-01-15 17:15:57)

Re: AHK: Управление монитором, DDC/CI

Не понял, ты это к чему?

И к этому https://social.msdn.microsoft.com/Forum … mentissues.

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

84

Re: AHK: Управление монитором, DDC/CI

Malcev пишет:

А ты для XP пишешь?

Просто хочу знать как на других будет. И не факт что в 10 тоже заработает.

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

85

Re: AHK: Управление монитором, DDC/CI

Читаем и делаем выводы, что начиная с висты работать будет.

Minimum supported client Available in Windows Vista and later versions of the Windows operating systems.
Target Platform Universal
Header winuser.h (include Windows.h)
Library User32.lib; OneCoreUAP.lib on Windows 10
DLL User32.dll

86

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

Но из \\.\DISPLAY2 возвращает Универсальный монитор PnP, а в ком строке SMBX2250.

А второй параметр меняли на 1?

87

Re: AHK: Управление монитором, DDC/CI

YMP
Тогда пусто.

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

88

Re: AHK: Управление монитором, DDC/CI

YMP пишет:

VarSetCapacity(display_device, 840, 0)

И почему 840, не 240?

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

89

Re: AHK: Управление монитором, DDC/CI

В соответствии с определением структуры.

typedef struct _DISPLAY_DEVICE {
  DWORD cb;
  TCHAR DeviceName[32];
  TCHAR DeviceString[128];
  DWORD StateFlags;
  TCHAR DeviceID[128];
  TCHAR DeviceKey[128];
}DISPLAY_DEVICE, *PDISPLAY_DEVICE;

Для Юникода TCHAR = 2 байта.

Сейчас для проверки подключил второй монитор, и \\.\DISPLAY2 правильно его марку показывает (при втором параметре 0).

90

Re: AHK: Управление монитором, DDC/CI

Теперь понял, то что в скобках надо умножать, просто видел примеры с 240.
Попробую с DisplayConfigGetDeviceInfo.
Нужна видимо DISPLAYCONFIG_TARGET_DEVICE_NAME так как в ней есть monitorFriendlyDeviceName.

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

91 (изменено: serzh82saratov, 2019-01-15 20:16:12)

Re: AHK: Управление монитором, DDC/CI

DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS вторая часть DISPLAYCONFIG_TARGET_DEVICE_NAME.
DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS  = UINT32 * 4, или это один UINT32?

typedef struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS {
  union {
    struct {
      UINT32 friendlyNameFromEdid : 1;
      UINT32 friendlyNameForced : 1;
      UINT32 edidIdsValid : 1;
      UINT32 reserved : 29;
    } DUMMYSTRUCTNAME;
    UINT32 value;
  } DUMMYUNIONNAME;
} DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS;

если один, то как установить первый бит в 1?
И из чего взять adapterId и Id в DISPLAYCONFIG_DEVICE_INFO_HEADER, ведь обычно пишут откуда берутся специфичные значения.

VarSetCapacity(DISPLAYCONFIG_TARGET_DEVICE_NAME, 424, 0)

  ;	DISPLAYCONFIG_DEVICE_INFO_HEADER
NumPut(1, DISPLAYCONFIG_TARGET_DEVICE_NAME, 0, "uint")  ;	DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME := 2
NumPut(424, DISPLAYCONFIG_TARGET_DEVICE_NAME, 4, "uint")  ;	  size 404 + 20
  ;	LUID adapterId
NumPut(0, DISPLAYCONFIG_TARGET_DEVICE_NAME, 8, "uint")  ;	  DWORD LowPart;
NumPut(0, DISPLAYCONFIG_TARGET_DEVICE_NAME, 12, "uint")  ;	  LONG  HighPart;
  ;	id
NumPut(0, DISPLAYCONFIG_TARGET_DEVICE_NAME, 16, "uint")
  ;	DISPLAYCONFIG_TARGET_DEVICE_NAME
NumPut(1, DISPLAYCONFIG_TARGET_DEVICE_NAME, 20, "BYTE")  ; ?	DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS 1 bit = 1 

MsgBox % DllCall("DisplayConfigGetDeviceInfo", "Ptr", &DISPLAYCONFIG_TARGET_DEVICE_NAME)
  ;	ERROR_INVALID_PARAMETER 87 (0x57) The parameter is incorrect.
MsgBox, % StrGet(&DISPLAYCONFIG_TARGET_DEVICE_NAME + 36)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

92

Re: AHK: Управление монитором, DDC/CI

1) Размер union определяется самым большим его членом, следовательно -  UINT32 * 4.
2) https://docs.microsoft.com/en-us/window … playconfig

93

Re: AHK: Управление монитором, DDC/CI

Нет, там всего один UINT32. Единицы после двоеточия — это его биты. Установленный первый бит — это 1. Второй — 2. Третий — 4. Можно складывать или через OR объединять, результат будет один.

94

Re: AHK: Управление монитором, DDC/CI

А если бы без двоеточих было, то UINT32 * 4?

95

Re: AHK: Управление монитором, DDC/CI

Да, тогда бы четыре.

96 (изменено: Zak, 2019-01-15 21:32:01)

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

У меня 2 монитор по HDMI. Может не поддерживает SetVCP(HMON, "0xd6", "0x2")  ; Standby, попробуйте SetVCP(HMON, "0xd6", "0x4").
И надо посмотреть есть ли у тв поддержка DDC.

И так не работает, ну я и не надеялся, ведь у ТВ нет режима ожидания как у мониторов. А как посмотреть поддержку DDC? В AIDA64 такой информации нет, интересно, почему они не используют получение имени дисплея, а показыыают только из базы данных.

На LG, оказывается, DDC надо включать вручную. Надо понять как на самсунгах.

97

Re: AHK: Управление монитором, DDC/CI

Zak пишет:

у ТВ нет режима ожидания как у мониторов.

Вы пробовали SetVCP(HMON, "0xd6", "0x4").

Zak пишет:

А как посмотреть поддержку DDC?

http://forum.script-coding.com/viewtopi … 33#p125533
https://www.entechtaiwan.com/util/moninfo.shtm

Zak пишет:

Надо понять как на самсунгах.

Ну да, может же не определить поддержку, если отключено.

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

98

Re: AHK: Управление монитором, DDC/CI

serzh82saratov
Да, пробовал, спасибо, так и есть, у телевизора DDC: Not supported, в отличии от монитора, который на 5 лет старше.) Может и правда, где-то включить надо в инженерном меню, поразбираюсь.

99

Re: AHK: Управление монитором, DDC/CI

Сейчас у себя посмотрел на мониторе самсунг тоже Not supported, но всё работает, так что можно не доверять этому.

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

100

Re: AHK: Управление монитором, DDC/CI

serzh82saratov пишет:

ERROR_INVALID_PARAMETER 87 (0x57) The parameter is incorrect.

Это может означать неправильный размер структуры?

serzh82saratov пишет:

как установить первый бит в 1?

В UINT32.

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