Windowsのディスプレイ(モニター)設定の拡大率を取得 ~Delphiソースコード集
プロジェクトの作成
Delphi IDEを起動し、「ファイル」⇒「Windows VCLアプリケーション -Delphi」をクリックします。フォームにTButtonを1個と、TMemoを1個をドラッグ&ドロップします。
ソースコードの記述
Button1をダブルクリックして以下ソースコードを記述します。unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Winapi.ShellScaling, Winapi.ShlObj; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private 宣言 } //DPIが変更された時に以下関数が呼び出される procedure DPIChanged(var msg:TMessage);message WM_DPICHANGED; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:Integer; mon:TMONITOR; dsf:DEVICE_SCALE_FACTOR; begin Memo1.Clear; //このアプリのウィンドウのあるモニターを選択(最も近いモニターを選択) mon:=Screen.MonitorFromWindow(Self.Handle, TMonitorDefaultTo.mdNearest); //モニターの拡大率を取得する GetScaleFactorForMonitor(mon.Handle, dsf); Memo1.Lines.Add( Format('モニターの拡大率:%d%%',[Ord(dsf)]) ); //全てのモニタの拡大率を取得する Memo1.Lines.Add('モニターの数:'+IntToStr(Screen.MonitorCount)); for i := 0 to Screen.MonitorCount-1 do begin GetScaleFactorForMonitor(Screen.Monitors[i].Handle, dsf); Memo1.Lines.Add(Format(' モニター[%d]の拡大率:%d%%',[i+1, Ord(dsf)])); end; end; procedure TForm1.DPIChanged(var msg: TMessage); var mon:TMONITOR; dsf:DEVICE_SCALE_FACTOR; begin //全てのモニタの拡大率を取得する Memo1.Lines.Add('モニターのDPI設定が変更されました'); //このアプリのウィンドウのあるモニターを選択(最も近いモニターを選択) mon:=Screen.MonitorFromWindow(Self.Handle, TMonitorDefaultTo.mdNearest); //モニターの拡大率を取得する GetScaleFactorForMonitor(mon.Handle, dsf); Memo1.Lines.Add( Format('モニターの拡大率:%d%%',[Ord(dsf)]) ); end; end.
実行する
実行ボタンを押すとコンパイルされ実行ファイルが生成して実行します。Button1をクリックしたり、ディスプレイの拡大率を変更すると、Memo1に拡大率が表示されます。