現在のユーザーをログオフ/シャットダウン/再起動の、いずれかを行う

電源オフ/再起動/ログオフ Visual Basic 6.0 Visual Basic 2008

指定時間(分)後に、パソコンの電源オフ/再起動/ログオフの各処理を行います。

Windows98、NT双方に対応。


メニュー
使用するAPI関数
フォーム構成
プログラム
 VB6ソース
 VB2008ソース
関連方式
リンクリスト

使用するAPI関数群

ExitWindowsEx

現在のユーザーをログオフさせるか、システムをシャットダウンさせるか、システムをシャットダウンさせて再起動させるか、いずれかを行い

関数定義

Private Declare Function
        ExitWindowsEx Lib "user32.dll" (ByVal uFlags As Long,
        ByVal dwReserved As Long) As Long        

関数の仕様

現在のユーザーをログオフ/シャットダウン/再起動の、いずれかを行う。
この関数は、指定により全てのアプリケーションへ WM_QUERYENDSESSION メッセージを送信して、それらのアプリケーションを終了できるかどうかを判断

入力パラメータ

uFlags:シャットダウンのタイプ(次の値のいずれか)を指定

EWX_LOGOFF: 現在のユーザーをログオフ
EWX_POWEROFF: システムをシャットダウンした後、電源を切る
EWX_REBOOT: システムを再起動
EWX_SHUTDOWN: システムをシャットダウンして、電源を切っても安全な状態にする
EWX_FORCE: 強制終了。上記の値と組み合わせて使用する(論理和)
  現在実行されているアプリケーションへ WM_QUERYENDSESSION や WM_ENDSESSION メッセージを送信しない。
  プロセスを強制的に終了する結果、アプリケーションがデータを失う可能性もあるので、緊急時にのみ指定。

dwReserved:未使用

戻り値

関数が成功すると、0 以外の値、失敗すると、0 が返る

GetCurrentProcess

現在のプロセスに対応する疑似ハンドルを取得

関数定義

Private Declare Function GetCurrentProcess Lib "KERNEL32.DLL" () As Long          

入力パラメータ

無し

戻り値

現在のプロセスの疑似ハンドルが返る

解説

疑似ハンドルとは、現在のプロセスのハンドルと解釈される特別な定数のこと。
呼び出し側プロセスがプロセスハンドルを 必要とする関数を呼び出す場合、この疑似ハンドルを使ってそのプロセス自身を指定できる。
子プロセスは、擬似ハンドルを継承 しない。
擬似ハンドルには、プロセスオブジェクトに対するアクセス権として、可能な範囲で最大の権利が割り当てられる。

OpenProcessToken

プロセスに関連付けられているアクセストークンを開く

関数定義

             Private Declare Function OpenProcessToken Lib "advapi32.dll" _
                (ByVal ProcessHandle As Long, ByVal DesiredAccess As
                Long, TokenHandle As Long) As Long
         

入力パラメータ

ProcessHandle:開くアクセストークンを保持するプロセスを識別するハンドル
DesiredAccess:アクセストークンの要求アクセス
タイプを指定するアクセスマスクを指定。これらの要求アクセスタイプをトークンの DACL(随意アクセス制御リスト)と比較して、どのアクセスが許可され、どのアクセスが拒否されるかを決定する。
TokenHandle:この関数から制御が戻ったときに、新しく開かれたアクセストークンを識別するハンドルへのポインタを指定。

戻り値

関数が成功すると、0 以外の値が返る。

AdjustTokenPrivileges

指定したアクセストークン内の特権を有効または無効にする。
TOKEN_ADJUST_PRIVILEGES アクセス権が必要

関数定義

Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _
                (ByVal TokenHandle As Long, _
                ByVal DisableAllPrivileges As Long, _
                NewState As TOKEN_PRIVILEGES, _
                ByVal BufferLength As Long, _
                PreviousState As TOKEN_PRIVILEGES, _
                ReturnLength As Long) As Long
          

入力パラメータ

TonHandle更したい特権を保持するアクセストークンを指定。
 このハンドルは、トークンに対する TOKEN_ADJUST_PRIVILEGES アクセス権を備えていなければならない。PreviousState パラメータが NULL ではない場合、このハンドルは TOKEN_QUERY アクセス権も必要。

DisableAllPrivilegesトークンのすべての特権を無効にするかどうかを指定。
 この値が TRUE の場合、関数はすべての特権を無効にし、NewState パラメータを無視する。FALSE の場合、この関数は NewState パラメータが指す情報に基づいて特権に変更を加える。

NewState:特権とその属性からなる配列をTOKEN_PRIVILEGES 構造体へのポインタを指定。
 DisableAllPrivileges パラメータが FALSEの場合、AdjustTokenPrivileges 関数は配列内の値に従って、トークンの特権を有効または無効にする。ある特権の SE_PRIVILEGE_ENABLED 属性をセットしておくと、その特権が有効になります。属性をクリアしておくと、特権が無効になる。 DisableAllPrivileges が TRUE の場合、関数はこのパラメータを無視します。

BufferLength:PreviousState パラメータが指すバッファのサイズをバイト単位で指定。
 PreviousState パラメータが NULL の場合、このパラメータは 0 でもかまわない。

PreviousState:この関数の変更対象となる特権 の、従来の状態を保持する TOKEN_PRIVILEGES 構造体を受け取るバッファへのポインタを指定。このパラメータは、NULL でもかまわない。
指定したバッファが小さすぎて、変更後の特権の完全なリストを受け取れない場合、関数は失敗し、どの特権も調整されない。そ の場合、ReturnLength パラメータが指す変数の値は、変更後の特権の完全なリストを保持するために必要なバイト数に設定。

ReturnLength:PreviousStateパラメータが指すバッファが必要とするバイト数を受け取る変数へのポインタを指定。
 PreviousState が NULL の場合、このパラメータは NULL でもかまわない。

戻り値

関数が成功すると、0 以外の値が返る。

補足

アクセストークン:Access Tokenとは、Windows2003(WindowsNT系)ネットワークで使用されるユーザーのセキュリティ識別情報

NT系のシャットダウンの手順
 通常のプロセスの場合、シャットダウンの権限が無いので、自分自身にその特権を付与する。
 そのためには、自分自身のプロセスハンドルを取得し、そのハンドルのアクセストークンに対してシャットダウンの特権を付与す る。

フォーム構成

 フォーム上に下記に示すコントロールを配置します。
コントロール配置 実行イメージ

フォームを追加し、下記のコントロールを配置

コンボボックス  1個
コマンドボタン  4個
ラベル      1個
タイマー     1個

プログラム

VB6ソースサンプルコードのダウンロードVB6.0

フォーム

VB2008ソースサンプルコードのダウンロードVB2008

フォーム


関連方式

PCの電源オフ - 指定時間後にパソコンの電源を切る
PCを休止/スタンバイ(スリープ) - 指定時間後に休止/スタンバイ

×
PageTop