记得我以前写过一个,只不过是用VB 写的,我也不想改为VC啦,道理一样,你慢慢看吧! Public Const EWX_SHUTDOWN = 1 Public Const EWX_FORCE = 4 Public Const EWX_POWEROFF = 8 Public Const EWX_ForceShutDown = EWX_FORCE + EWX_SHUTDOWN//如果是在windows2000/xp/nt下面关闭系统,则需要首先提高应用程序的优先级 Public Function AdjustTokenPrivilegesForNT() Dim hdlProcessHandle As Long Dim hdlTokenHandle As Long Dim tmpLuid As LUID Dim tkp As TOKEN_PRIVILEGES Dim tkpNewButIgnored As TOKEN_PRIVILEGES Dim lBufferNeeded As Long
Public Const EWX_SHUTDOWN = 1
Public Const EWX_FORCE = 4
Public Const EWX_POWEROFF = 8
Public Const EWX_ForceShutDown = EWX_FORCE + EWX_SHUTDOWN//如果是在windows2000/xp/nt下面关闭系统,则需要首先提高应用程序的优先级
Public Function AdjustTokenPrivilegesForNT() Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
TOKEN_QUERY), hdlTokenHandle LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, _
lBufferNeeded
End Function
Public Function ShutDownWindows()
Dim x As Long
AdjustTokenPrivilegesForNT
x = ExitWindowsEx(EWX_ForceShutDown, 0)
End Function写完了,有点累!
用SHELL
我记不太清了你搜索一下吧。
用ExitWindowsEx(EWX_SHUTDOWN,dwRet)来关闭系统