SPIRIT さんすいません、エラーが出たのは僕が SPIRIT さんのページから AB の Project Editor にコピペしたときに、
コード:
Const SE_SHUTDOWN_NAME="SeShutdownPrivilege"
Const SE_PRIVILEGE_ENABLED=&H2
Const ANYSIZE_ARRAY=0
のところを、
コード:
Const SE_SHUTDOWN_NAME="SeShutdownPrivilege"
Const SE_PRIVILEGE_ENABLED=&H2Const ANYSIZE_ARRAY=0
と、改行をしわすれてしまったからのようです・・・。
そして今の正常に動作するコードは
コード:
#include "WINNTRB.idx"
' ↓ ここからプログラムが実行されます
Declare Function ExitWindowsEx Lib "user32" (uFlags As Long,dwReserved As Long) As Long
Declare Function OpenProcessToken Lib "advapi32" (ProcessHandle As DWord,DesiredAccess As Long,_
ByRef TokenHandle As Long) As Long
Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (lpSystemName As String,_
lpName As String,ByRef lpLuid As LUID) As Long
Declare Function AdjustTokenPrivileges Lib "advapi32" (TokenHandle As Long,DisableAllPrivileges As Long,_
ByRef NewState As TOKEN_PRIVILEGES,BufferLength As Long,_
ByRef PreviousState As TOKEN_PRIVILEGES,ByRef ReturnLength As Long) As Long
'動作フラグ============
const EWX_LOGOFF=0
CONST EWX_SHUTDOWN=1
CONST EWX_REBOOT=2
Const EWX_FORCE=4
Const EWX_POWEROFF=8
'====================
Const TOKEN_QUERY=&H8
Const TOKEN_ADJUST_PRIVILEGES=&H20
Const SE_SHUTDOWN_NAME="SeShutdownPrivilege"
Const SE_PRIVILEGE_ENABLED=&H2
Const ANYSIZE_ARRAY = 1
Type LUID
LowPart As Long
HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ELM(ANYSIZE_ARRAY)) As LUID_AND_ATTRIBUTES
End Type
ExitWindows()
Sub ExitWindows()
Dim Handle As Long
Dim TPS As TOKEN_PRIVILEGES
Dim TPS_P As TOKEN_PRIVILEGES
Dim Size As Long
With TPS
.PrivilegeCount=1
.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED
End With
If OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Handle)=FALSE Then
MessageBox(0,"エラーが発生しました!","OpenProcessToken",MB_OK or MB_ICONSTOP)
Exit Sub
EndIf
If LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,TPS.Privileges(0).pLuid)=FALSE Then
MessageBox(0,"エラーが発生しました!","LookupPrivilegeValue",MB_OK or MB_ICONSTOP)
Exit Sub
EndIf
If AdjustTokenPrivileges(Handle,FALSE,TPS,Len(TPS),TPS_P,Size)=FALSE Then
MessageBox(0,"エラーが発生しました!","AdjustTokenPrivileges",MB_OK or MB_ICONSTOP)
Exit Sub
EndIf
ExitWindowsEx(EWX_REBOOT,0)
End Sub
です。