Это код, который я использую для получения DPI системы:
// Get system DPI
Matrix m = PresentationSource.FromVisual(Application.Current.MainWindow).CompositionTarget.TransformToDevice;
if (m.M11 > 0 && m.M22 > 0)
{
dpiXFactor = m.M11;
dpiYFactor = m.M22;
}
else
{
// Sometimes this can return a matrix with 0s. Fall back to assuming normal DPI in this case.
dpiXFactor = 1;
dpiYFactor = 1;
}
Это будет коэффициент нормального DPI (96), который есть в системе.Система будет иметь горизонтальный DPI dpiXFactor * 96 и вертикальный DPI dpiYFactor * 96. Вы можете проверить это в Windows 7, перейдя в меню «Пуск» -> «dpi» и выбрав «Сделать текст и другие элементы больше или меньше».100% означает коэффициент 1 и значение DPI 96. 125% означает коэффициент 1,25 и значение DPI 120. 150% означает коэффициент 1,5 и значение DPI 144.
к отчету о сбое клиента, который, я думаю, мог быть вызван только матрицей преобразования, имеющей все нули.Возможно, существует более надежный способ получения DPI системы (может быть, pinvoke?), Но я не знаю об этом.