PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
10279 | 00/02/15 17:16:13 | RE(5):コンピュータをシャットダウンする方法:95/98/NT (2) By serio |
10184 | 00/02/09 14:10:08 | RE(4):コンピュータをシャットダウンする方法:95/98/NT (2) By Taka |
10183 | 00/02/09 11:19:39 | RE(3):コンピュータをシャットダウンする方法:95/98/NT (1) By Taka |
10173 | 00/02/08 17:11:27 | RE(2):PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By serio |
10149 | 00/02/07 13:37:45 | RE(1):PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By Taka |
10121 | 00/02/03 17:58:33 | PB7.0: アプリケーションからコンピュータのシャットダウンをする方法について By serio |
カテゴリ:スクリプトの記述
日付:2000年02月09日 14:10 発信者:Taka
題名:RE(4):コンピュータをシャットダウンする方法:95/98/NT (2)
(1)からのつづき
【スクリプト】
// Constant Values
Constant Long TOKEN_ADJUST_PRIVILEGES = 32
Constant Long TOKEN_QUERY = 8
Constant String SE_SHUTDOWN_NAME = \"SeShutdownPrivilege\"
Constant Long SE_PRIVILEGE_ENABLED = 2
// Valiables
long tkn, rtn, old
LUID luid
TOKEN_PRIVILEGES newTTP, oldTTP
// プロセスに関連づけられたアクセストークンをオープン
rtn = OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, tkn )
// 特権名を示すローカルに一意な識別子(LUID)を取得
rtn = LookupPrivilegeValue( \"\", SE_SHUTDOWN_NAME, luid )
// シャットダウン権限を有効に設定
newTTP.PrivilegeCount = 1
newTTP.Privileges[1].LUID = luid
newTTP.Privileges[1].Attributes = SE_PRIVILEGE_ENABLED
rtn = AdjustTokenPrivileges( tkn, 0, newTTP, 16, oldTTP, old )
// Windowsの終了
Constant Long EWX_LOGOFF = 0
Constant Long EWX_SHUTDOWN = 1
Constant Long EWX_REBOOT = 2
Constant Long EWX_FORCE = 4
rtn = ExitWindowsEx( EWX_SHUTDOWN, 0 ) //EWX_FORCEとの組み合わせ可
注1:エラー判定は書いていません。
注2:実際には、Environment.OSType = WindowsNT! の条件で処理を振り分けると良いでしょう。
(補足)
取得したトークンハンドルは、AdjustTokenPrivileges()の後 CloseHandle()する必要があるようです。
どうせシャットダウンするなら無意味かもしれませんが念のため。
宣言:function long CloseHandle( long handle ) library \"kernel32.dll\"
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.