最近在制作学校机房的管理软件
在Win9x下,ExitWindowEx可以实现关机
但是,在WinNT下就不可以了,我察看过API参考,说是必须用另一个API先获得权限
然后才能使用ExitWindowsEx,我不会呀,对WinNT的权限问题了解太少了请诸位高手不吝赐教谢谢!!
MailTo:[email protected]
在Win9x下,ExitWindowEx可以实现关机
但是,在WinNT下就不可以了,我察看过API参考,说是必须用另一个API先获得权限
然后才能使用ExitWindowsEx,我不会呀,对WinNT的权限问题了解太少了请诸位高手不吝赐教谢谢!!
MailTo:[email protected]
解决方案 »
- 寻RLE压缩图片和解压算法 最好是VB的
- 刷卡(读卡器)新手寻求帮助
- [搞鬼的程序]运行N(N>4)个小时后,ActiveX EXE服务器部件“失去响应”导致客户程序也不能操作。而且系统重新启动也无效了,只有按复位来
- 我学习COM+的心得,请多多指教
- winsock循环发送命令出错
- vb+mapinfo的开发GIS的例子?
- 如何在datareport里连接加密的access数据库?
- 我动态创建了一组"直线"控件, 但不知怎样删除, 主要是控件名字无法引用,大家帮我一下?
- vb6.0listbox如何设置datasource
- 请问大家,怎么更改VB窗口左上角的VB图标?
- 请教各位大侠
- 怎样获得句柄(见详情..请进.)
http://expert.csdn.net/Expert/topic/1454/1454119.xml?temp=.1092188
例:
在BAS文件中定义
Option Explicit
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long'ExitWindowsEx的参数uflags,有四个对应值,分别是:Public Const EWX_LOGOFF = 0 '退出(注销)
Public Const EWX_SHUTDOWN = 1 '关机
Public Const EWX_REBOOT = 2 '重启动
Public Const EWX_FORCE = 4 '强制关机,即不通知现在活动应用程序让其先自我关闭Public Const TOKEN_ADJUST_PRIVILEGES = &H20
Public Const TOKEN_QUERY = &H8
Public Const SE_PRIVILEGE_ENABLED = &H2
Public Const ANYSIZE_ARRAY = 1Type LUID
lowpart As Long
highpart As Long
End TypeType LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End TypeType TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End TypeDeclare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
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
Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long'这个函数就是用于NT关机中使用的
Sub 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 LonghdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
TOKEN_QUERY), hdlTokenHandleLookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLEDAdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, _
lBufferNeeded
End Sub在Form中调用如下:
Option ExplicitDim uFlags As LongPrivate Sub Command1_Click()
AdjustTokenPrivilegesForNT '在95/98中调用没作用,但为了和NT兼容,写上无妨
ExitWindowsEx uFlags, 0 '这里将uFlgs换成以上面标记蓝色字中所提到的四个参数之一即可
'下面为举例
'ExitWindowsEx EWX_FORCE, 0 强迫关机(就是不管有无要保存的东西而强行关闭) 'ExitWindowsEx EWX_LOGOFF, 0 退出(注销)
End Sub