powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / GetScaleFactorForMonitor - неверное значение
7 сообщений из 7, страница 1 из 1
GetScaleFactorForMonitor - неверное значение
    #39863743
Oleg6619
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть Windows10 с установленным масштабом <>100%.
Для определения этого параметра использую GetScaleFactorForMonitor.
Если установлен 125%, то функция возвращает 100.
Если - 150 или 175%, то - 140.

GetDpiForMonitor всегда выдает 96dpi.

Где "собака порылась"?
Использую Delphi2007, но т.к. GetScaleFactorForMonitor вызываю из DLL, то это не принципиально.
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863838
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg6619,
https://docs.microsoft.com/ru-ru/windows/win32/api/shtypes/ne-shtypes-device_scale_factor
https://docs.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getscalefactorformonitor

typedef enum DEVICE_SCALE_FACTOR {
DEVICE_SCALE_FACTOR_INVALID,
SCALE_100_PERCENT,
SCALE_120_PERCENT,
SCALE_125_PERCENT,
SCALE_140_PERCENT,
SCALE_150_PERCENT,
SCALE_160_PERCENT,
SCALE_175_PERCENT,
SCALE_180_PERCENT,
SCALE_200_PERCENT,
SCALE_225_PERCENT,
SCALE_250_PERCENT,
SCALE_300_PERCENT,
SCALE_350_PERCENT,
SCALE_400_PERCENT,
SCALE_450_PERCENT,
SCALE_500_PERCENT
} ;
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863841
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863860
Oleg6619
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но я это всё читал.

В переписке говорится, что DPI=144. А у меня GetDpiForMonitor тоже выдает 96dpi.

И никак с этим не справится.

Windows10 - последней сборки (Win32 will only return the correct value for version 1703 (Creator's Update)), так что должна по идее выдавать правильно. Но на деле.....
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863881
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если такую процедурку сперва вызвать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure CallSetProcessDPIAware;
var
  SetProcessDPIAware: function: Boolean; stdcall;
  H: THandle;
begin
  H := GetModuleHandle('User32.dll');
  if H > 0 then
  begin
    @SetProcessDPIAware := GetProcAddress(H, 'SetProcessDPIAware');
    if Assigned(SetProcessDPIAware) then
      SetProcessDPIAware();
  end;
end;
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863889
Oleg6619
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmSerА если такую процедурку сперва вызвать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure CallSetProcessDPIAware;
var
  SetProcessDPIAware: function: Boolean; stdcall;
  H: THandle;
begin
  H := GetModuleHandle('User32.dll');
  if H > 0 then
  begin
    @SetProcessDPIAware := GetProcAddress(H, 'SetProcessDPIAware');
    if Assigned(SetProcessDPIAware) then
      SetProcessDPIAware();
  end;
end;



А вот это помогло.
Спасибо!
...
Рейтинг: 0 / 0
GetScaleFactorForMonitor - неверное значение
    #39863970
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg6619,
Не знаю, как в 2007, но в XE3 есть глобальная переменная Screen :TScreen;
Код: pascal
1.
        H1 := Screen.PixelsPerInch; // получить текущее DPI экрана
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / GetScaleFactorForMonitor - неверное значение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]