プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

Windows の休止状態/スタンバイ

2007年11月29日 17時53分00秒 | システム関連

Windows の休止状態、スタンバイするには次の手順で行います。(戻る)

  1. 休止状態、スタンバイさせるために SE_SHUTDOWN_NAME 特権を有効にする(ProcessPrivilegeName)
  2. 休止状態、スタンバイさせるAPIを呼び出す(SetSystemPowerState)

Windows 95/98/Me では(1)の特権を有効にする必要はありません。

プロトタイプ宣言

HANDLE GetCurrentProcess( VOID );

BOOL SetSystemPowerState(
    BOOL    fSuspend,   // サスペンド状態(TRUE=スタンバイ、FALSE=休止状態)
    BOOL    fForce      // 強制的に中断(TRUE=強制的、FALSE=問い合わせる)
);

サンプル

#include <stdio.h>
#include <windows.h>

// メイン関数
int main( void )
{
    BOOL bFlag = FALSE;
    UINT uMenu;
    
    do {
        printf( TEXT("\n") );
        printf( TEXT("1...休止状態\n") );
        printf( TEXT("2...スタンバイ\n") );
        scanf(  TEXT("%d"), &uMenu );
        
        switch ( uMenu ){
            case 1:     bFlag = FALSE;      break;
            case 2:     bFlag = TRUE;       break;
            default:    uMenu = 0;          break;
        }
    } while ( uMenu == 0 );
    
    // Windows NT 系のために SE_SHUTDOWN_NAME 特権を有効にする
    ProcessPrivilegeName( GetCurrentProcess(), SE_SHUTDOWN_NAME, TRUE );
    // 休止状態/スタンバイを実行する
    SetSystemPowerState( bFlag, FALSE );
    return 0;
}
  • Windows 95/98/Me では SE_SHUTDOWN_NAME 特権を有効にする必要はありません。
  • ProcessPrivilegeName 関数は前回紹介した自作関数です。(API関数ではありません)

補足情報

  • SetSystemPowerState 関数の第二引数を TRUE にすると強制的に休止状態/スタンバイを行えます。

関連記事



コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Windows の終了/再起動/ロ... | トップ | コンピュータのロック »
最新の画像もっと見る

コメントを投稿

システム関連」カテゴリの最新記事