0

ユーザーが実行したアクション、つまりシャットダウン、再起動、スタンバイ、ロック、またはログオフをどのように知ることができますか。以下のコードを使用して確認しましたが、それぞれのケースを特定し、それに応じてアクションを実行したいと考えています.Windowsフォームアプリケーションでこれらの詳細を知る方法を提案してください.

 private static int WM_QUERYENDSESSION = 0x11;
    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (m.Msg == WM_QUERYENDSESSION)
        {
            MessageBox.Show(m.Msg.ToString() + " Endsession: this is a logoff, shutdown, or reboot");
            systemShutdown = true;
        }
        // If this is WM_QUERYENDSESSION, the closing event should be
        // raised in the base WndProc.
        base.WndProc(ref m);
    }
4

2 に答える 2

3

lParamメッセージの値を確認する必要がありWM_QUERYENDSESSIONます。

ドキュメントが示すように:

  • パラメーターが0の場合、システムはシャットダウンまたは再始動しています(どのイベントが発生しているかを判別することはできません)。

  • パラメーターがENDSESSION_CLOSEAPP0x00000001)の場合、アプリケーションは置換が必要なファイルを使用しているか、システムが保守されているか、システム・リソースが使い果たされています。

  • パラメータがENDSESSION_CRITICAL0x40000000)の場合、アプリケーションは強制的にシャットダウンされます。

  • パラメータがENDSESSION_LOGOFF0x80000000)の場合、ユーザーはログオフしています。

于 2011-03-09T06:34:59.130 に答える