GetSystemMetrics

https://msdn.microsoft.com/ja-jp/library/ms648072.aspx https://msdn.microsoft.com/ja-jp/library/ms632626.aspx https://msdn.microsoft.com/ja-jp/library/ms533266.aspx https://msdn.microsoft.com/ja-jp/library/cc428502.aspx

さまざまなシステムメトリックの値(表示要素の幅と高さ)とシステムの現在の構成を取得します。表示要素とは、ウィンドウの一部、またはシステムが表示する画面の一部を意味します(詳細については、GetSysColor 関数の説明を参照してください)。GetSystemMetrics 関数は、すべてのサイズをピクセル単位で取得します。

int GetSystemMetrics(
  int nIndex   // システムメトリックまたは現在の構成
);

パラメータ

nIndex
取得するべきシステムメトリックまたは現在の構成を指定します。SM_CX*(System Metric Configuration x)は幅を、SM_CY*(System Metric Configuration y)は高さを表します。次の値のいずれかを指定します。
意味
SM_ARRANGE 最小化ウィンドウの配置方法を示す値を取得します。最小化ウィンドウの詳細については、この関数の「解説」を参照してください。
SM_CLEANBOOT システムがどのように起動されたかを示す値を取得します。

    0  通常の起動
   1  「Safe モード」での起動
   2  「ネットワークを使った Safe モード」での起動

Safe モードによる起動を行うと、ユーザーのスタートアップファイルは無視されます。

SM_CMONITORS Windows 98 と Windows 2000:デスクトップ上のモニタの数(マルチモニタ)を取得します。詳細については、この関数の「解説」を参照してください。
SM_CMOUSEBUTTONS マウスボタンの数(マウスがないときは 0)を取得します。
SM_CXBORDER,
SM_CYBORDER
立体効果のないウィンドウの境界の幅と高さを取得します。立体効果付きウィンドウの SM_CXEDGE と SM_CYEDGE の各値に相当します。
SM_CXCURSOR,
SM_CYCURSOR
カーソル(マウスカーソル)の幅と高さを取得します。システムは、他のサイズのカーソルを作成することはできません。
SM_CXDLGFRAME,
SM_CYDLGFRAME
SM_CXFIXEDFRAME および SM_CYFIXEDFRAME と同じことを意味しまるです。
SM_CXDOUBLECLK,
SM_CYDOUBLECLK
ダブルクリック操作を行う際に、最初のクリックが発生したときのカーソル(マウスカーソル)の位置を基準として、2 回目のクリック位置の許容範囲の幅と高さをピクセル単位で取得します。1 回目のクリックの後、この許容範囲内でもう一度マウスをクリックすると、ダブルクリックが行われたものと見なされます。(これら 2 回のクリックが許容時間内で発生することも必要です。)

ダブルクリックの範囲を規定する長方形の幅と高さを設定するには、SPI_SETDOUBLECLKHEIGHT と SPI_SETDOUBLECLKWIDTH の各フラグを指定して、SystemParametersInfo 関数を呼び出します。

SM_CXDRAG,
SM_CYDRAG
ドラッグ操作の開始とは見なされない範囲が既定で設定されていますが、この範囲に相当する長方形の幅と高さをピクセル単位で取得します。マウスボタンを押した後、この範囲を越えてマウスを動かすと、ドラッグ操作が開始されたものと見なされます。この結果、ユーザーは意図していない場所でドラッグ操作を開始することなく、簡単にマウスボタンをクリックし、その後放すことができます。
SM_CXEDGE,
SM_CYEDGE
立体効果付きのウィンドウの境界線の幅と高さを取得します。SM_CXBORDER と SM_CYBORDER の 3D 版です。
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME
タイトルバーがあり、サイズが変更できないウィンドウの周囲を囲む枠の幅と高さをピクセル単位で取得します。SM_CXFIXEDFRAME は垂直枠の幅、SM_CYFIXEDFRAME は水平枠の高さを表します。

SM_CXDLGFRAME および SM_CYDLGFRAME と同じことを意味します。

SM_CXFRAME,
SM_CYFRAME
SM_CXSIZEFRAME および SM_CYSIZEFRAME と同じことを意味します。
SM_CXFULLSCREEN,
SM_CYFULLSCREEN
プライマリモニタの最大化ウィンドウのクライアント領域の幅と高さを取得します。システムのタスクバーやアプリケーションのツールバーが占有する領域を除いた画面領域の座標を取得するには、SPI_GETWORKAREA を指定して SystemParametersInfo 関数を使います。
SM_CXHSCROLL,
SM_CYHSCROLL
水平スクロールバーの矢印の幅、または水平スクロールバーの高さをピクセル単位で取得します。
SM_CXHTHUMB 水平スクロールバーのスクロールボックス(つまみ)の幅をピクセル単位で取得します。
SM_CXICON,
SM_CYICON
アイコンの既定の幅と高さをピクセル単位で取得します。 関数がロードできるアイコンは、このサイズのものに限定されています。
SM_CXICONSPACING,
SM_CYICONSPACING
アイコンを整列するときに使われるグリッドのサイズをピクセル単位で取得します。整列を行うと、各アイテム(アイコン)はこのサイズの長方形の中に収容されます。これらの値は必ず、SM_CXICON および SM_CYICON 以上の大きさになります。
SM_CXMAXIMIZED,
SM_CYMAXIMIZED
プライマリモニタの最大化ウィンドウのサイズをピクセル単位で取得します。
SM_CXMAXTRACK,
SM_CYMAXTRACK
タイトルバーがあり、サイズが変更できないウィンドウの既定の最大サイズを取得します。このサイズは、デスクトップ全体に相当します。ユーザーは、このサイズを超えてウィンドウの枠をドラッグすることはできません。アプリケーション内で メッセージを処理すると、これらの値を無効にできます。
SM_CXMENUCHECK,
SM_CYMENUCHECK
メニューのチェックマークの既定のサイズをピクセル単位で取得します。
SM_CXMENUSIZE,
SM_CYMENUSIZE
マルチドキュメントインターフェイス(MDI)の子ウィンドウの「閉じる」ボタンなど、メニューバーに表示されるボタンのサイズをピクセル単位で取得します。
SM_CXMIN,
SM_CYMIN
ウィンドウの最小サイズの幅と高さをピクセル単位で取得します。
SM_CXMINIMIZED,
SM_CYMINIMIZED
最小化ウィンドウの通常のサイズを取得します。
SM_CXMINSPACING
SM_CYMINSPACING
最小化ウィンドウの配置に使われるグリッドのサイズを取得します。整列を行うと、各最小化ウィンドウはこのサイズの長方形の中に収容されます。これらの値は必ず、SM_CXMINIMIZED および SM_CYMINIMIZED 以上の大きさになります。
SM_CXMINTRACK,
SM_CYMINTRACK
ウィンドウの最小トラッキングサイズの幅と高さを取得します。ユーザーはウィンドウの枠をドラッグする際に、このサイズより小さいウィンドウを指定することはできません。アプリケーション内で WM_GETMINMAXINFO メッセージを処理すると、これらの値を無効にできます。
SM_CXSCREEN,
SM_CYSCREEN
プライマリモニタの画面全体の幅と高さを取得します。これらは、(hdcPrimaryMonitor, HORZRES/VERTRES) を呼び出して取得するのと同じ値です。
SM_CXSIZE,
SM_CYSIZE
ウィンドウのタイトルバー内のボタンの幅と高さをピクセル単位で取得します。
SM_CXSIZEFRAME,
SM_CYSIZEFRAME
サイズ変更可能なウィンドウの周囲を囲む枠の幅と高さをピクセル単位で取得します。SM_CXSIZEFRAME は垂直枠の幅、SM_CYSIZEFRAME は水平枠の高さを表します。

SM_CXFRAME および SM_CYFRAME と同じことを意味します。

SM_CXSMICON,
SM_CYSMICON
小アイコンの推奨サイズをピクセル単位で取得します。小アイコンは通常、ウィンドウのタイトルバー内、および(エクスプローラなどの)小アイコンの一覧で表示されます。
SM_CXSMSIZE
SM_CYSMSIZE
タイトルバー内の小さいボタンのサイズをピクセル単位で取得します。
SM_CXVIRTUALSCREEN,
SM_CYVIRTUALSCREEN
Windows 98 と Windows 2000:仮想画面の幅と高さをピクセル単位で取得します。仮想画面とは、すべてのモニタを囲む境界長方形のことです。SM_XVIRTUALSCREEN および SM_YVIRTUALSCREEN の各値は、仮想画面の左上隅の座標を表します。
SM_CXVSCROLL,
SM_CYVSCROLL
垂直スクロールバーの幅、または垂直スクロールバーの矢印の高さをピクセル単位で取得します。
SM_CYCAPTION 通常のタイトルバーの高さをピクセル単位で取得します。
SM_CYKANJIWINDOW ダブルバイト文字セット(DBCS)を使うシステムで、画面下の漢字ウィンドウの高さを取得します。
SM_CYMENU 1 行分のメニューバーの高さをピクセル単位で取得します。
SM_CYSMCAPTION 小さなタイトルバーの高さを取得します。
SM_CYVTHUMB 垂直スクロールバーのスクロールボックス(つまみ)の高さを取得します。
SM_DBCSENABLED ダブルバイト文字セット(DBCS)の User.exe がインストール済みかどうかを示す値を取得します。インストール済みの場合は 0 以外の値が、インストールされていない場合は 0 が返ります。
SM_DEBUG デバッグ版の User.exe がインストール済みかどうかを示す値を取得します。デバッグ版がインストール済みの場合は 0 以外の値(TRUE)が、デバッグ版がインストールされていない場合は 0(FALSE)が返ります。
SM_IMMENABLED Windows 2000:IME(Input Method Manager/Input Method Editor)機能が有効になっている場合は 0 以外の値(TRUE)が返ります。無効になっている場合は 0(FALSE)が返ります。

SM_IMMENABLED は、システムが Unicode ベースのアプリケーションで、Unicode ベースの IME を使う準備ができているかどうかを示します。特定の言語に依存する IME が動作するかどうか確認するには、SM_DBCSENABLED とシステムの ANSI コードページをチェックしてください。それ以外の場合、ANSI/Unicode 間の変換が正しく実行されないことや、フォントやレジストリエントリのようなコンポーネントが存在しないことがあります。

SM_MENUDROPALIGNMENT メニューバーの項目に対して、ドロップダウンメニューを右寄せするかどうかを示す値を取得します。右寄せする場合は 0 以外の値(TRUE)が、左寄せする場合は 0(FALSE)が返ります。
SM_MIDEASTENABLED ヘブライ語やアラビア語(右から左へ表示)が利用可能なシステムかどうかを示す値を取得します。利用可能な場合、0 以外の値(TRUE)が返ります。
SM_MOUSEPRESENT マウスが接続されているかどうかを示す値を取得します。接続されている場合は 0 以外の値(TRUE)が、接続されていない場合は 0(FALSE)が返ります。
SM_MOUSEWHEELPRESENT Windows NT 4.0 以降と Windows 98:ホイール付きのマウスが接続されているかどうかを示す値を取得します。接続されている場合は 0 以外の値(TRUE)が、接続されていない場合は 0(FALSE)が返ります。
SM_NETWORK ネットワークが存在するかどうかを示す値を取得します。存在する場合は最下位ビットが 1 の値が、存在しない場合は最下位ビットが 0 の値が返ります。他のビットは将来の使用に備えて予約されています。
SM_PENWINDOWS Windows for Pen computing extensions がインストールされているかどうかを示す値を取得します。インストールされている場合は 0 以外の値(TRUE)が、インストールされていない場合は 0(FALSE)が返ります。
SM_REMOTESESSION Windows NT 4.0 SP4 以降:この値は、Terminal Services 環境で使うことを意図しています。呼び出し側プロセスが Terminal Services のクライアントセッションに関連付けられている場合は 0 以外の値(TRUE)が返ります。呼び出し側プロセスが Terminal Services のコンソールセッションに関連付けられている場合 0(FALSE)が返ります。
SM_SECURE セキュリティが存在するかどうかを示す値を取得します。存在する場合は 0 以外の値(TRUE)が、存在しない場合は 0(FALSE)が返ります。
SM_SAMEDISPLAYFORMAT Windows 98 と Windows 2000:複数のモニタが存在する場合、すべてのモニタが同じカラーフォーマットを使っているかどうかを表す値を取得します。すべてのモニタが同じカラーフォーマットを使っている場合、0 以外の値(TRUE)が返ります。それ以外の場合、0(FALSE)が返ります。2 台のモニタが同じ色深度(ビット数)を使っていても、カラーフォーマットが異なる可能性があることに注意してください。たとえば、各ピクセルの RGB のビット数が異なっている(16 ビットの場合 RGB が 565 というのが一般的ですが、アルファブレンディング;輝度の 1 ビットを追加して ARGB1555 という組み合わせもあります)ことや、RGB の順序が異なっていることもあります。
SM_SHOWSOUNDS ユーザー補助機能の「サウンド解説を使う」が有効になっているかどうかを調べます。有効になっている場合は 0 以外の値(TRUE)が、無効になっている場合は 0 が返ります。
SM_SLOWMACHINE コンピュータのプロセッサが遅いかどうかを示す値を取得します。遅い場合は 0 以外の値(TRUE)が、それ以外の場合は 0(FALSE)が返ります。
SM_SWAPBUTTON 左右のマウスボタンの機能を交換しているかどうかを示す値を取得します。交換している場合は 0 以外の値(TRUE)が、交換していない場合は 0(FALSE)が返ります。
SM_XVIRTUALSCREEN,
SM_YVIRTUALSCREEN
Windows 98 と Windows 2000:仮想画面の左端と上端の座標を表します。仮想画面とは、すべてのモニタを囲む境界長方形のことです。SM_CXVIRTUALSCREEN および SM_CYVIRTUALSCREEN の各値は、仮想画面の幅と高さを表します。

戻り値

関数が成功すると、要求した値または現在の構成が返ります。

関数が失敗すると、0 が返ります。GetLastError 関数は、拡張エラー情報を提供しません。

解説

システムメトリックは、画面ごとに異なります。

GetSystemMetrics(SM_CMONITORS) は、モニタだけを数えます。EnumDisplayMonitors 関数が、モニタと、実際の表示を行わない擬似モニタを列挙する仕様とは異なっています。

SM_ARRANGE を指定すると、最小化ウィンドウの配置方法を示す値が返ります。配置方法は、開始位置と方向によって構成されています。開始位置は、次の値のいずれかになります。

意味
ARW_BOTTOMLEFT スクリーンの左下隅から表示を開始します(既定の位置)。
ARW_BOTTOMRIGHT スクリーンの右下隅から表示を開始します。ARW_STARTRIGHT と同じことを意味します。
ARW_HIDE 最小化ウィンドウを画面の可視領域の外へ移動し、非表示にします。
ARW_TOPLEFT スクリーンの左上隅から表示を開始します。ARW_STARTTOP と同じことを意味します。
ARW_TOPRIGHT スクリーンの右上隅から表示を開始します。ARW_STARTTOP | ARW_STARTRIGHT と同じことを意味します)

方向は、次の値のいずれかになります。

意味
ARW_DOWN 上から下へ、垂直方向に配置します。
ARW_LEFT 左から右へ、水平方向に配置します。
ARW_RIGHT 右から左へ、水平方向に配置します。
ARW_UP 下から上へ、垂直方向に配置します。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用

参照

, SystemParametersInfo

表示: