Опубликовать это как ответ (хотя это не так), так как мне нужно пробел, чтобы показать, что я сделал до сих пор - на случай, если это поможет кому-нибудь к ответу. В настоящее время я просматриваю другие библиотеки API Windows, чтобы попытаться найти ответ.
@ MinerBob, я вчера видел код этого парня, но не смог заставить его работать, поэтому я изменил несколько вещей и Теперь я представляю данные как можно точнее, но, просматривая структуру, она не содержит информацию, к которой вы стремитесь, но вот как вы можете сгенерировать вывод, чтобы просмотреть его самостоятельно:
Add-Type "
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Forms;
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE
{
private const int CCHDEVICENAME = 0x20;
private const int CCHFORMNAME = 0x20;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public ScreenOrientation dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
}
public static class user32
{
[DllImport(`"user32.dll`")]
public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
public const int ENUM_CURRENT_SETTINGS = -1;
public const int ENUM_REGISTRY_SETTINGS = -2;
public static void GetDisplaySettings()
{
DEVMODE vDevMode = new DEVMODE();
if (EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref vDevMode))
{
Console.WriteLine(@`"
dmDeviceName = {0}
dmSpecVersion = {1}
dmDriverVersion = {2}
dmSize = {3}
dmDriverExtra = {4}
dmFields = {5}
dmPositionX = {6}
dmPositionY = {7}
dmDisplayOrientation = {8}
dmDisplayFixedOutput = {9}
dmColor = {10}
dmDuplex = {11}
dmYResolution = {12}
dmTTOption = {13}
dmCollate = {14}
dmFormName = {15}
dmLogPixels = {16}
dmBitsPerPel = {17}
dmPelsWidth = {18}
dmPelsHeight = {19}
dmDisplayFlags = {20}
dmDisplayFrequency = {21}
dmICMMethod = {22}
dmICMIntent = {23}
dmMediaType = {24}
dmDitherType = {25}
dmReserved1 = {26}
dmReserved2 = {27}
dmPanningWidth = {28}
dmPanningHeight = {29}
`",
vDevMode.dmDeviceName,
vDevMode.dmSpecVersion,
vDevMode.dmDriverVersion,
vDevMode.dmSize,
vDevMode.dmDriverExtra,
vDevMode.dmFields,
vDevMode.dmPositionX,
vDevMode.dmPositionY,
vDevMode.dmDisplayOrientation,
vDevMode.dmDisplayFixedOutput,
vDevMode.dmColor,
vDevMode.dmDuplex,
vDevMode.dmYResolution,
vDevMode.dmTTOption,
vDevMode.dmCollate,
vDevMode.dmFormName,
vDevMode.dmLogPixels,
vDevMode.dmBitsPerPel,
vDevMode.dmPelsWidth,
vDevMode.dmPelsHeight,
vDevMode.dmDisplayFlags,
vDevMode.dmDisplayFrequency,
vDevMode.dmICMMethod,
vDevMode.dmICMIntent,
vDevMode.dmMediaType,
vDevMode.dmDitherType,
vDevMode.dmReserved1,
vDevMode.dmReserved2,
vDevMode.dmPanningWidth,
vDevMode.dmPanningHeight
);
}
}
}
" -ReferencedAssemblies System.Windows.Forms
[user32]::GetDisplaySettings()
ОБНОВЛЕНИЕ 1 :
В соответствии с документацией MSDN для EnumDisplaySettings:
Функция EnumDisplaySettings устанавливает значения для следующих пяти членов DEVMODE:
dmBitsPerPel
dmPelsWidth
dmPelsHeight
dmDisplayFlags
dmDisplayFrequency
то, что я изначально фокусировал на 'dmScale', похоже, указано для c для принтеров - как, например, только функции принтера, которые заполняют структуру DEVMODE, заполнят это поле.
Обновление 2:
Похоже, все под ключом GraphicsDrivers обновляется драйвером графики, который загружен для этого монитора. Очень Интуитивно. В каждой статье, которую я мог найти, говорится об изменении значения в пользовательском интерфейсе c, определяемом поставщиком, который взаимодействует с его драйвером, или использовании соответствующей клавиши монитора в разделе Драйверы графики для взаимодействия с этой функцией.
Должно быть какое-то Windows Документация по графическим драйверам, в которой говорится о каждом обновлении / соблюдении этих значений каждым драйвером. Ищите это сейчас для подтверждения.
Обновление 3:
Обновлен источник, включающий сигнатуру структуры DEVMODE из pinvoke. net. Кроме того, я думаю, что я нашел пистолет для курения в документации Windows драйвера:
Масштабирование зависит от исходного и целевого режимов, которые используются для пути. Кроме того, вызывающая сторона может вызывать SetDisplayConfig без указания информации о целевом режиме (то есть установка параметра modeInfoArray является необязательной и может иметь значение NULL). Поэтому вызывающая сторона обычно не может предсказать, должно ли SetDisplayConfig выполнять какое-либо масштабирование. Кроме того, не существует API для получения полного списка типов масштабирования, поддерживаемых графическим адаптером. Функция EnumDisplaySettings Win32 (описанная в документации Windows SDK) возвращает DMDFO_DEFAULT в элементе dmDisplayFixedOutput структуры DEVMODE, на который указывает параметр lpDevMode, когда вызывающая сторона запрашивает новые Windows 7 типы масштабирования.
Масштабирование, которое вызывающая сторона передает SetDisplayConfig, является намерением масштабирования, а не явным запросом на выполнение операции масштабирования. Если требуется масштабирование (например, исходное и целевое разрешения различаются), SetDisplayConfig использует масштабирование, предоставляемое вызывающей стороной. Если предоставленное масштабирование не поддерживается, SetDisplayConfig использует масштабирование по умолчанию для графического адаптера. Когда исходное и целевое разрешения, которые вызывающий абонент передает SetDisplayConfig, совпадают, SetDisplayConfig всегда устанавливает идентификационное масштабирование.
... мой выделенный жирным шрифтом акцент. DMDFO_DEFAULT, согласно заголовочному файлу, равен 0.
Источники: