标题:写“定时关机”程序时出现问题!求助
只看楼主
shitianwang
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-12-10
 问题点数:0 回复次数:8 
写“定时关机”程序时出现问题!求助
在写关于“定时关机”的程序时,调用了API函数,ExitWindowsEx ,在模块中申明了,
------------------------------------------------------------
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_SHUTDOWN = 1 '关闭系统
-------------------------------------------------------------
程序中调用的时候返回值一直是0,说明关闭系统失败。
我的问题是:为什么这个API函数执行不了了?听说是因为在VB里调用,进程的控制优先权不够高。请高手赐教……
搜索更多相关主题的帖子: 定时关机 
2007-12-10 13:35
梦心
Rank: 4
来 自:福建平和
等 级:贵宾
威 望:13
帖 子:1910
专家分:0
注 册:2007-5-11
得分:0 
这是一个例子:   
  Option   Explicit     
   
  Private   Type   LUID   
  UsedPart   As   Long   
  IgnoredForNowHigh32BitPart   As   Long   
  End   Type     
   
  Private   Type   TOKEN_PRIVILEGES   
  PrivilegeCount   As   Long   
  TheLuid   As   LUID   
  Attributes   As   Long   
  End   Type     
   
  'Beginning   of   Code   
   
  Private   Const   EWX_SHUTDOWN   As   Long   =   1   
  Private   Const   EWX_FORCE   As   Long   =   4   
  Private   Const   EWX_REBOOT   =   2     
      
   
  Private   Declare   Function   ExitWindowsEx   Lib   "user32"   (   _   
  ByVal   dwOptions   As   Long,   ByVal   dwReserved   As   Long)   As   Long      
   
  Private   Declare   Function   GetCurrentProcess   Lib   "kernel32"   ()   As   Long   
   
  Private   Declare   Function   OpenProcessToken   Lib   "advapi32"   (   _   
  ByVal   ProcessHandle   As   Long,   ByVal   DesiredAccess   As   Long,   _   
  TokenHandle   As   Long)   As   Long   
   
  Private   Declare   Function   LookupPrivilegeValue   Lib   "advapi32"   _   
  Alias   "LookupPrivilegeValueA"   (ByVal   lpSystemName   As   String,   _   
  ByVal   lpName   As   String,   lpLuid   As   LUID)   As   Long   
   
  Private   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   
   
   
  Private   Sub   AdjustToken()     
   
  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     
   
  Private   Sub   cmdForceShutdown_Click()   
          AdjustToken   
          ExitWindowsEx   (EWX_SHUTDOWN   Or   EWX_FORCE   Or   EWX_REBOOT),   &HFFFF   
  End   Sub   


先调用API函数来取得权限~~!!

我清高和我骄傲的倔强,在风中大声的唱:我不听,我不听~~做我自己最特别,呼呼~~啦啦~~~
我的博客园地址: [url]http://[/url]
2007-12-10 18:47
shitianwang
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-12-10
得分:0 
二楼的~~~上面的程序连一点点注释都没有~~~这叫我怎么看得懂啊~~~就连变量都不知道是干什么的啊~~~

请你不要这么不负责的扔一个程序我,OK????
2007-12-11 16:06
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
呵呵,楼主有意思。
还好不是我答,要是我答的话答案就是:自已翻书!

VB QQ群:47715789
2007-12-11 17:37
shitianwang
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-12-10
得分:0 
呵呵~~~解决了很久都没有找到问题解决方法啊~~           楼上的不够热情哟~~~

新人需要帮助呀!!!!
2007-12-11 21:38
jxyga111
Rank: 8Rank: 8
来 自:中華人民共和國
等 级:贵宾
威 望:33
帖 子:6015
专家分:895
注 册:2008-3-21
得分:0 
我沒有用APE函數不知你要不要
2008-05-21 10:32
wangtuan7788
Rank: 1
等 级:新手上路
帖 子:286
专家分:0
注 册:2007-10-8
得分:0 
需要加一段提权的代码,呵呵,上面那个有注释啊,你没仔细看吧,英文的,不过我英语太烂,不是很明白

[[it] 本帖最后由 wangtuan7788 于 2008-5-21 19:29 编辑 [/it]]

你笑我和你们不一样,我笑你们大家都一样~
2008-05-21 19:27
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
楼主你太可爱了……
2008-05-21 20:00
jxyga111
Rank: 8Rank: 8
来 自:中華人民共和國
等 级:贵宾
威 望:33
帖 子:6015
专家分:895
注 册:2008-3-21
得分:0 
一定要用API 也可以調用啊
2008-05-22 08:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-191530-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067257 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved