急,我想在vb中强制关机,exitwindows(),exitwindowsex()有时不好用,怎么办,有什么更好的办法。

bigstrong 2000-12-06 08:39:00
加精
...全文
450 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqx 2001-06-02
  • 打赏
  • 举报
回复
在模块中添加:
Public Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type

Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type

Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function OpenProcessToken Lib "advapi32" ( _
ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long
Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
ByVal lpName As String, lpLuid As LUID) As Long
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


再在调用ExitWindowsEx之前调用这个过程
Private Sub AdjustToken() ' 重启win2000和winnt的必要函数

Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
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

' Get the LUID for shutdown privilege.
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid

tkp.PrivilegeCount = 1 ' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED

' Enable the shutdown privilege in the access token of this
' process.
AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded

End Sub
skt985 2001-06-01
  • 打赏
  • 举报
回复
25632关注!
scottlai 2001-04-22
  • 打赏
  • 举报
回复
我有一法
lspbeyond 2001-04-14
  • 打赏
  • 举报
回复
没有道理,如果是2000的系统,
Dim Ret As Long
Ret = ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN , 0)
失败!!!!!!!!!!
ynhelian 2000-12-07
  • 打赏
  • 举报
回复
shines大虾讲得很有道理.
kevenzhang 2000-12-06
  • 打赏
  • 举报
回复
use exitwindowsex(1,1)
bigstrong 2000-12-06
  • 打赏
  • 举报
回复
用exitwindowsex有时可以,有时不行,非常随机呀。
Jujus 2000-12-06
  • 打赏
  • 举报
回复
用ExitWindowsEx(0,0)可以
bigstrong 2000-12-06
  • 打赏
  • 举报
回复
是不是我的应用程序权限不够呀?
shines77 2000-12-06
  • 打赏
  • 举报
回复
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

使用:

Dim Ret As Long
Ret = ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN , 0)

'//
EWX_FORCE
强迫中止没有响应的进程
EWX_LOGOFF
中止进程,然后注销
EWX_SHUTDOWN
关掉系统电源(如果可能的话,ATX电源就可以)
EWX_REBOOT
重新引导系统
EWX_SHUTDOWN
关闭系统
bigstrong 2000-12-06
  • 打赏
  • 举报
回复
有些应用程序还会弹出对话框呀(exitwindows(1,1))

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧