我在VB中调用ExitWindowsEX只可以重新启动或注销,无法关机请问如何解决?
谢谢!!!
谢谢!!!
解决方案 »
- VB如何同时向多块声卡输出音乐文件
- vb6中在创建access2000数据库时的问题 不能解决啊
- 请大师、小网虫还有对CSDN比较了解的朋友,一起来坐坐,希望能帮助我一起把CSDNExplorer(CSDN离线浏览器)做好!!
- 如何从数码相机中取照?
- 最简单问题:
- 循环一百次,我只想在循环到95次以后做调试,请问如何设置点?
- ToolBar引起的引用内存错误?---郁闷中
- 在 datagrid 中的中文字段中如何使用上下键?
- Access->sql server导数据当涉及到多个表时应该怎么处理?
- VB中32位程序转64位怎么关闭注册表的重定向
- 怎么样在VB中绘制三维坐标?
- 如何在字符和ASCII码之间转换
装W2K!!!GOD!!!
急用呀!!!
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Sub Form_Load()
Dim ret
Dim msg
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
msg = MsgBox("This program is going to reboot your computer. Press OK to continue or Cancel to stop.", vbCritical + vbOKCancel + 256, App.Title)
If msg = vbCancel Then End
'reboot the computer
ret = ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, 0)
End Sub
Public Const TOKEN_QUERY = &H8
Public Const SE_PRIVILEGE_ENABLED = &H2
Public Const ANYSIZE_ARRAY = 1Public Type LUID
lowpart As Long
highpart As Long
End TypePublic Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End TypePublic Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Public Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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
Public Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
'安全关机需调用的API函数
Global Const EWX_POWEROFF = 8
Global Const EWX_SHUTDOWN = 1 '终止所有进程并关闭计算机
Global Const EWX_FORCE = 4 '强迫进程终止
Global Const EWX_LOGOFF = 3 '关掉在进程安全描述表中运行的所有进程,重起计算机
Global Const EWX_REBOOT = 2 '终止所有运行的进程并关闭计算机
Global Const EWX_LOGIN = 0 '以其它用户名重新登录系统
Public Declare Function ExitWindowsEx Lib "user32" (ByVal fuOptions As Long, ByVal dwReserved As Long) As Integer '关闭系统函数
''窗体Private Sub CommandShutDown_Click()
AdjustToken
ExitWindowsEx EWX_FORCE Or EWX_SHUTDOWN Or EWX_POWEROFF, 0End SubPublic Sub AdjustToken()
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 Sub