sxfzu(Flying)谢谢你!还是自动关机的问题,想请教高手!!!

duyong06102002 2003-10-17 03:47:48
谢谢你的解答!
想问您一个问题,我想自己做一个能自动关机的程序,我自己加了一个系统托盘,
采用类似QQ的弹出菜单操作,设置关机时间以后,定时器控制自动关机!

可是不知怎么回事有些时候不好用,出现兰屏现象,鼠标键盘不在接受响应,就像死机了,不知怎么回事,直接调用你的程序肯定没问题,有可能是什么原因呢?您能指点一下吗?

自动关机调用了 sxfzu(Flying)给我提示的API函数AdjustTokenPrivileges和
ExitWindowsEX
...全文
60 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
duyong06102002 2003-10-19
  • 打赏
  • 举报
回复
不管怎么样,表示感谢,我在调调吧!
kmzs 2003-10-18
  • 打赏
  • 举报
回复
强!!!
danpianji2002 2003-10-18
  • 打赏
  • 举报
回复
上面是取得权限的模块
danpianji2002 2003-10-18
  • 打赏
  • 举报
回复
呵呵这个模块别人给我的,转送给你
'模块定义
Enum HowExitConst
EWX_FORCE = 4 ' 强制关机
EWX_LOGOFF = 0 ' 登出
EWX_REBOOT = 2 ' 重开机
EWX_SHUTDOWN = 1 ' 关机
EWX_POWEROFF = 8
End Enum

Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const ANYSIZE_ARRAY = 1

Private Type LUID
lowpart As Long
highpart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type

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

Public 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
'Get the LUID for shutdown privilege.
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1 ' One privilege to set
tkp.Privileges(0).pLuid = tmpLuid
tkp.Privileges(0).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

'窗体代码
AdjustToken
ExitWindowsEx EWX_POWEROFF, 0
ShaB 2003-10-17
  • 打赏
  • 举报
回复
如何取得用户权限呢?要自己写函数吗?
hcj2002 2003-10-17
  • 打赏
  • 举报
回复
AdjustTokenPrivileges '取得NT的管理员权限,98则不用。

ExitWindowsEX '关闭或重启
rainstormmaster 2003-10-17
  • 打赏
  • 举报
回复
估计是操作系统的问题,换一台机器试试
danpianji2002 2003-10-17
  • 打赏
  • 举报
回复
什么系统阿

1,486

社区成员

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

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