求助XP下从起代码
各位大哥,98下的从启代码,到XP下就不能用了,谁能给段代码能在XP下从新启动计算机的。多谢
[解决办法]
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_REBOOT = 2
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Private Declare Function ExitWindowsEx Lib "user32 " (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32 " () As Long
Private Declare Function OpenProcessToken Lib "advapi32 " (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32 " Alias "LookupPrivilegeValueA " (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32 " (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
Sub RebootPC()
On Local Error GoTo RebootPC_ErrorHandler
Const csProcName = "RebootPC "
Dim hProcessHandle As Long
Dim hTokenHandle As Long
Dim tmpLuid As LUID
Dim tkpNew As TOKEN_PRIVILEGES
Dim tkpPrevious As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hProcessHandle = GetCurrentProcess()
Call OpenProcessToken(hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle)
' Get the LUID for the shutdown privilege
Call LookupPrivilegeValue( " ", "SeShutdownPrivilege ", tmpLuid)
tkpNew.PrivilegeCount = 1 ' One privilege to set
tkpNew.TheLuid = tmpLuid
tkpNew.Attributes = SE_PRIVILEGE_ENABLED
' Enable the shutdown privilege in the access token of this process.
lBufferNeeded = 0
Call AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded)
' Force a Reboot (no option to save files to cancel out)
Call ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, &HFFFF)
Exit Sub
RebootPC_ErrorHandler:
Call Err.Raise(csModName, csProcName, Err.Number, Err.Description)
End Sub
Private Sub Command1_Click()
RebootPC
End Sub
[解决办法]
shell "shutdown -r "
[解决办法]
shutdown -r -t 1 -f
-r ---》重启
-t 1 ---》1秒后执行
-f ---》强制执行
-s ---》关闭计算机
[解决办法]
shutdown 适用于XP系统,如果2000的话需要首相将XP的SHUTDOWN.EXE 拷贝到 2000的WINNT目录下
[解决办法]
XP下重新启动计算机的实现:
http://www.vipcn.com/InfoView/Article_195542.html
[解决办法]
API很容易搞定的啊.
'API Calls used for RebootPC
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_REBOOT = 2
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Private Declare Function ExitWindowsEx Lib "user32 " (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32 " () As Long
Private Declare Function OpenProcessToken Lib "advapi32 " (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32 " Alias "LookupPrivilegeValueA " (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32 " (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
'API Calls used for RebootPC END
'RebootPC sub code
Sub RebootPC()
On Local Error GoTo RebootPC_ErrorHandler
Const csProcName = "RebootPC "
Dim hProcessHandle As Long
Dim hTokenHandle As Long
Dim tmpLuid As LUID
Dim tkpNew As TOKEN_PRIVILEGES
Dim tkpPrevious As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hProcessHandle = GetCurrentProcess()
Call OpenProcessToken(hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle)
' Get the LUID for the shutdown privilege
Call LookupPrivilegeValue( " ", "SeShutdownPrivilege ", tmpLuid)
tkpNew.PrivilegeCount = 1 ' One privilege to set
tkpNew.TheLuid = tmpLuid
tkpNew.Attributes = SE_PRIVILEGE_ENABLED
' Enable the shutdown privilege in the access token of this process.
lBufferNeeded = 0
Call AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded)
' Force a Reboot (no option to save files to cancel out)
Call ExitWindowsEx(EWX_REBOOT, &HFFFF)
'Call ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN Or EWX_REBOOT, &HFFFF)
'Call ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, &HFFFF)
Exit Sub
RebootPC_ErrorHandler:
'Call RaiseError(csModName, csProcName, Err.Number, Err.Description)
End Sub
看你怎么用了..上面有多顶工作方式,注释了的