SAK 図書館
VB テクニック編39 - Windows 終了、ExitWindowsEx、EWX_POWEROFF
■SAK 関数利用規程
・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
・著作権明示部分の改編は認めない。
・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
プログラムを開発することは自由です。
・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
その他有償プロダクトとして配布・販売するには、私の許可が必要です。
(無償のフリーソフトウェアなら、自由に配布しても良い。)
・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
賠償しません。
■Windows 終了
・VB から容易に Windows2000 や XP の特権モードを獲得して Windows を終了
させるための DLL を公開しました。
PC 情報、その他 sakinfo.dll - sakif110.lzh のダウンロードは、次のリンクから
行って下さい。『sakif110.lzh 22,247 bytes』
VB から呼び出すサンプルソースも付いています。
・sakinfo.dll の説明とソースコードは、
『VS.NET C 言語編6 - win32 DLL、Windows 終了、ExitWindowsEx』
を参照して下さい。
■sakinfo.dll - ExitWin()
・Windows 終了 - ExitWin() は、次のように呼び出します。
NT、2000、XP で特権獲得に失敗した場合は、戻り値に FALSE が返ります。
95、98、Me では、常に TRUE が返ります。
戻り値が FALSE のとき、errmsg にエラー内容がセットされます。
C の TRUE と VB の TRUE は違うので、VB で戻り値を判定する場合は注意
して下さい。
rcd = ExitWin(mode, errmsg);
| | |
| | |_ エラーメッセージ格納文字列ポインタ(LPTSTR)
| |_ ExitWindowsEx 用定数(UINT)
| EWX_LOGOFF = 0 ログオフ
| EWX_SHUTDOWN = 1 シャットダウン
| EWX_REBOOT = 2 リブート
| EWX_FORCE = 4 強制
| EWX_POWEROFF = 8 パワーオフ
|_ 戻り値(BOOL)
TRUE 正常
FALSE エラー
rcd = ExitWin(EWX_LOGOFF, errmsg); // ログオフ
rcd = ExitWin(EWX_REBOOT, errmsg); // リブート
rcd = ExitWin(EWX_POWEROFF, errmsg); // パワーオフ
rcd = ExitWin(EWX_POWEROFF | EWX_FORCE, errmsg); // 強制パワーオフ
・引数に渡す文字列ポインタの実態には十分な領域を確保しておく必要があり
ます。ExitWin() 関数内でバッファが足りるかチェックしていません。
C なら TCHAR buf[300]; 程度、VB なら、dim buf as string の後、
buf = space(300) 程度を確保して下さい。
'=======================================================================
' sakinfo.dll 定義
'=======================================================================
'** sakinfo.dll 関数定義
Public Declare Function ExitWin Lib "sakinfo" (ByVal mode As Long, ByVal errmsg As String) As Long
'** ExitWindowsEx 定数
Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const EWX_POWEROFF = 8
'=======================================================================
' sakinfo.dll - Windows 終了(ExitWin) ログオフ テスト
'=======================================================================
Private Sub Command2_Click()
Dim errmsg As String
'** 準備
errmsg = Space(300)
'** Windows 終了
If ExitWin(EWX_LOGOFF, errmsg) = 0 Then
errmsg = Left(errmsg, InStrRev(errmsg, Chr(0)) - 1)
MsgBox "ExitWin エラー" & Chr(10) & Chr(10) & errmsg
End If
'** 終了
End
End Sub
'=======================================================================
' sakinfo.dll - Windows 終了(ExitWin) リブート テスト
'=======================================================================
Private Sub Command3_Click()
Dim errmsg As String
'** 準備
errmsg = Space(300)
'** Windows リブート
If ExitWin(EWX_REBOOT, errmsg) = 0 Then
errmsg = Left(errmsg, InStrRev(errmsg, Chr(0)) - 1)
MsgBox "ExitWin エラー" & Chr(10) & Chr(10) & errmsg
End If
'** 終了
End
End Sub
'=======================================================================
' sakinfo.dll - Windows 終了(ExitWin) パワーオフ テスト
'=======================================================================
Private Sub Command4_Click()
Dim errmsg As String
'** 準備
errmsg = Space(300)
'** Windows 終了
If ExitWin(EWX_POWEROFF, errmsg) = 0 Then
errmsg = Left(errmsg, InStrRev(errmsg, Chr(0)) - 1)
MsgBox "ExitWin エラー" & Chr(10) & Chr(10) & errmsg
End If
'** 終了
End
End Sub
'=======================================================================
' sakinfo.dll - Windows 終了(ExitWin) 強制パワーオフ テスト
'=======================================================================
Private Sub Command5_Click()
Dim errmsg As String
'** 準備
errmsg = Space(300)
'** Windows 強制終了
If ExitWin(EWX_POWEROFF + EWX_FORCE, errmsg) = 0 Then
errmsg = Left(errmsg, InStrRev(errmsg, Chr(0)) - 1)
MsgBox "ExitWin エラー" & Chr(10) & Chr(10) & errmsg
End If
'** 終了
End
End Sub
■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料