次の方法で共有


WM_SYSCOMMAND メッセージ

ウィンドウは、ユーザーが ウィンドウ メニュー (旧称システムまたはコントロール メニュー) からコマンドを選択したとき、またはユーザーが最大化ボタン、最小化ボタン、復元ボタン、または閉じるボタンを選択したときに、このメッセージを受け取ります。

#define WM_SYSCOMMAND                   0x0112

Example

 case WM_SYSCOMMAND:
        if ((wParam & 0xFFF0) == SC_CLOSE)
        {
            EndDialog (hDlg, TRUE);
            return(TRUE);
        }
        break;

GitHub Windows クラシック サンプル の例。

パラメーター

wParam

要求されたシステム コマンドの種類。 wParam パラメーターの 4 つの下位ビットは、システムによって内部的に使用されます。 ビット 4 から 15 には、次のいずれかの値を指定できるコマンド コードが含まれています。

価値 Meaning
SC_CLOSE
0xF060
ウィンドウを閉じます。
SC_CONTEXTHELP
0xF180
ポインターを使用してカーソルを疑問符に変更します。 ユーザーがダイアログ ボックスでコントロールをクリックすると、コントロールは WM_HELP メッセージを受け取ります。
SC_DEFAULT
0xF160
既定の項目を選択します。ユーザーがウィンドウ メニューをダブルクリックしました。
SC_HOTKEY
0xF150
アプリケーション指定のホット キーに関連付けられているウィンドウをアクティブにします。 lParam パラメーターは、アクティブ化するウィンドウを識別します。
SC_HSCROLL
0xF080
水平方向にスクロールします。
SC_KEYMENU
0xF100
キーストロークの結果としてウィンドウ メニューを取得します。 詳細については、「解説」を参照してください。
SC_MAXIMIZE
0xF030
ウィンドウを最大化します。
SC_MINIMIZE
0xF020
ウィンドウを最小化します。
SC_MONITORPOWER
0xF170
表示の状態を設定します。 このコマンドは、バッテリ駆動のパーソナル コンピューターなど、省電力機能を備えているデバイスをサポートします。
lParam パラメーターには、次の値を指定できます。
  • -1 (ディスプレイの電源が入ります)
  • 1 (ディスプレイが低電力になる)
  • 2 (ディスプレイがシャットダウン中)
SC_MOUSEMENU
0xF090
マウス クリックの結果としてウィンドウ メニューを取得します。
SC_MOVE
0xF010
ウィンドウを移動します。
SC_NEXTWINDOW
0xF040
次のウィンドウに移動します。
SC_PREVWINDOW
0xF050
前のウィンドウに移動します。
SC_RESTORE
0xF120
ウィンドウを通常の位置とサイズに戻します。
SC_SCREENSAVE
0xF140
System.ini ファイルの [boot] セクションで指定されたスクリーン セーバー アプリケーションを実行します。
SC_SIZE
0xF000
ウィンドウのサイズを変更します。
SC_TASKLIST
0xF130
[スタート] メニューをアクティブにします。
SC_VSCROLL
0xF070
垂直方向にスクロールします。

コマンド コードが SC_SCREENSAVEされている場合、4 つの下位ビットで次のフラグを使用できます。

Flag Meaning
SCF_ISSECURE
0x0001
スクリーン セーバーは安全です。

lParam

ウィンドウ メニュー コマンドをマウスで選択した場合、カーソルの水平方向の位置を画面座標で指定します。 それ以外の場合、このパラメーターは使用されません。

マウスでウィンドウ メニュー コマンドを選択した場合、高次ワードはカーソルの垂直位置を画面座標で指定します。 このパラメーターは、システム アクセラレータを使用してコマンドを選択した場合は 1、ニーモニックを使用する場合は 0 です。

戻り値

このメッセージを処理する場合、アプリケーションは 0 を返す必要があります。

注釈

画面座標の位置座標を取得するには、次のコードを使用します。

xPos = GET_X_LPARAM(lParam);    // horizontal position 
yPos = GET_Y_LPARAM(lParam);    // vertical position

DefWindowProc 関数は、前の表で指定した定義済みアクションのウィンドウ メニュー要求を実行します。

WM_SYSCOMMANDメッセージでは、wParam パラメーターの 4 つの下位ビットがシステムによって内部的に使用されます。 wParam 値からコマンド コードを取得するには、アプリケーションは、上の例に示すように、ビットごとの AND 演算子を使用して、0xFFF0値と wParam 値を結合する必要があります。

ウィンドウ メニューのメニュー項目は、GetSystemMenu、AppendMenuInsertMenuModifyMenuInsertMenuItemおよび SetMenuItemInfo 関数を使用して変更できます。 ウィンドウ メニューを変更するアプリケーションは、 メッセージWM_SYSCOMMAND 処理する必要があります。

アプリケーションは、WM_SYSCOMMAND メッセージをDefWindowProc に渡すことによって、いつでも任意のシステム コマンドを実行できます。 アプリケーションによって処理されない WM_SYSCOMMAND メッセージは 、DefWindowProc に渡す必要があります。 アプリケーションによって追加されたコマンド値は、アプリケーションによって処理される必要があり、 DefWindowProc に渡すことはできません。

ポリシーによってパスワード保護が有効になっている場合、DefWindowProc に渡さない場合でも、SC_SCREENSAVE通知でアプリケーションが何を行うかに関係なく、スクリーン セーバーが開始されます。

ウィンドウ メニューから項目を選択するために定義されたアクセラレータ キーは、 WM_SYSCOMMAND メッセージに変換されます。他のすべてのアクセラレータキーストロークは 、WM_COMMAND メッセージに変換されます。

wParamSC_KEYMENU場合、lParam には、ポップアップ メニューを表示するために Alt キーと共に使用されるキーの文字コードが含まれます。 たとえば、Alt キーを押しながら F キーを押してファイル ポップアップを表示すると、wParamSC_KEYMENUlParam が 'f' と等しいWM_SYSCOMMANDが発生します。

Requirements

Requirement 価値
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
Header
Winuser.h (Windows.h を含む)

こちらも参照ください

リファレンス

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

概念

キーボード アクセラレータ