首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

XP下从起代码

2012-01-28 
求助XP下从起代码各位大哥,98下的从启代码,到XP下就不能用了,谁能给段代码能在XP下从新启动计算机的。多谢[

求助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


看你怎么用了..上面有多顶工作方式,注释了的


热点排行