说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

:为什么用exitwindowsex()不能关掉电源,而是提示“现在可以安全关机啦”后才能手动关机

编辑:说三道四文库 发布时间:2017-07-27 02:55
HTML文档下载 WORD文档下载 PDF文档下载
不会吧,我用的时候怎么没问题?ExitWindowsEx(EWX_SHUTDOWN,0)?这个函数没错的。
TO:xinfang

会不会是你的机器本身不支持“关闭电源”?
是ATX吗?
是不是电源管理设置有问题
在windows开始菜单里选“关机”,如果显示出来的是“现在可以安全关机”,那程序当然
也无能为力。
机器太老啦,呵呵
应该是机子的问题!
机器问题吧。
用汇编关闭
to ,所有人
在菜单中选择关机都能正常的关机
不的啦我机器没有问题,是atx的,装的是win2000中文版的
不过我是用vb写的,但是vb栏中没人解决,只有过来问啦
多谢,多谢
在2000中要想用ExitWindowsEx()关机的话有些麻烦。给你一个例子程序,或许有帮助




'''
'''与Windows NT关机相关的API函数和类型
'''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long



'The LookupPrivilegeValue function retrieves the locally unique
'identifier (LUID) used on a specified system to locally represent
'the specified privilege name.
Private Declare Function LookupPrivilegeValue Lib "advapi32" _
   Alias "LookupPrivilegeValueA" _
   (ByVal lpSystemName As String, _
    ByVal lpName As String, _
    lpLuid As LUID) As Long

'Get the operating system version
Public Declare Function GetVersion Lib "kernel32" () As Long

'The GetCurrentProcess function returns a pseudohandle for the
'current process.
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

'The AdjustTokenPrivileges function enables or disables privileges
'in the specified access token. Enabling or disabling privileges
'in an access token requires TOKEN_ADJUST_PRIVILEGES access.
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
'The OpenProcessToken function opens the access token associated with
'a process.
Private Declare Function OpenProcessToken Lib "advapi32" _
   (ByVal ProcessHandle As Long, _
    ByVal DesiredAccess As Long, _
    TokenHandle As Long) As Long
    
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Long)
    

Private Type LUID
    UsedPart As Long
    IgnoredForNowHigh32BitPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
    TheLuid As LUID
    Attributes As Long
End Type

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

Public Const EWX_SHUTDOWN = 1 '关机常数

'''
'''调整进程的权限
'''
Public Sub AdjustToken()

      '********************************************************************
      '* This procedure sets the proper privileges to allow a log off or a
      '* shut down to occur under Windows NT.
      '********************************************************************

         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

         'Set the error code of the last thread to zero using the
         'SetLast Error function. Do this so that the GetLastError
         'function does not return a value other than zero for no
         'apparent reason.
         SetLastError 0

         'Use the GetCurrentProcess function to set the hdlProcessHandle
         'variable.
         hdlProcessHandle = GetCurrentProcess()

         If GetLastError <> 0 Then
            MsgBox "GetCurrentProcess error==" & GetLastError
         End If

         OpenProcessToken hdlProcessHandle, _
            (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle

         If GetLastError <> 0 Then
            MsgBox "OpenProcessToken error==" & GetLastError
         End If

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

         If GetLastError <> 0 Then
            MsgBox "LookupPrivilegeValue error==" & GetLastError
         End If

         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

         If GetLastError <> 0 Then
            MsgBox "AdjustTokenPrivileges error==" & GetLastError
         End If
End Sub


有了以上的声明后,在你调用ExitWindowsEx()时,首先判断一下操作系统的版本,如果是
NT,则先调用AdjustToken(),然后再调用ExitWindowsEx(),方可成功。
不是这样的,关闭Windows2000是可以的,但是之后还要手动关闭电源,我也碰到过这样的问题,不知道怎么解决?
to:turbo(我是菜鸟我要分) 
打开win2000的高级电源管理支持
只要通過菜單能關閉電源的,則硬件緷對沒問題。
在win98下應可以直接用ExitWindows()關機。
但在win2000下需先取得關機的權限才可以,具体你可以查msdn中關于ExitWindows()的說明(要是2000版的才可以)。要用到的函數大概有OpenProcessToken(),LookupPrivilegeValue(),AdjustTokenPrivileges()這些。

我有用vc實現的完整程序,你要的話我可以給你。
好呀,管他vc,vb,我通吃嘿嘿。。
忘了emial darkleopard0@163.com,嘿嘿。。不好意思
看看是否CMOS设置和Windows电源管理设置对不对
http://www.csdn.net/expert/topic/215/215099.shtm
查看你的主板是否支持自动关机和CMOS的设置。
如果主板不支持自动关机就只能手动了。
可能是主板\电源的问题,以前的老电源不能支持自动关机
你的参数用错了
注意,你大概用的是EWX_SHUTDOWN,这个参数的意思是
Shuts down the system to a point at which it is safe to turn off the power. 
就是让你手动poweroff
建议你试试EWX_POWEROFF
可直接关机,msdn上是这样说的:
Shuts down the system and turns off the power. The system must support the power-off feature. 
再战江湖 New Kodak还牛不牛? 郭理靖:公、私有云架构异同点与难点 美化代码的15个代码语法高亮工具 你所不知道的虚拟化和云计算 [开源推荐]Effeckt.css项目:CSS交互动画应用集锦 针对Google Glass应用的四大UX设计原则及典型应用 Google收了摩托罗拉,微软收了诺记,黑莓又将花落谁家? 十亿月PV网站秘诀:Reddit自失败中总结的25条经验 粉碎5个NoSQL流言:各司其职,NoSQL的出现比关系型更早 豌豆荚发力移动游戏平台,推出SDK 2.0 BlackBerry Jam Asia 2013即将在香港隆重召开,免费门票限量提供 小米发布会高潮迭起:米3、电视、Hugo大牛 谷歌放在Windows上的特洛伊木马:Chrome Apps应用平台 解析:Google基于数据驱动的招聘面试程序 决战“缓存”之巅:微软 vs. 亚马逊 雪中送炭:十大前沿移动应用开发工具 高通智能手表Toq都用到了哪些技术? 研发周报:修改一行SQL代码 性能提升了100倍 2013年NoSQL就业趋势分析 鲜为人知的静态、命令式编程语言——Nimrod 高性能Web应用打造攻略:扩展过程中20个最大的绊脚石 开源项目Marathon:让你的数据中心像谷歌一样运行 精益化运营:10款移动统计分析工具推荐 移动建站工具(一):分秒钟将Web网站移动化 移动周报:小米的“倚天屠龙记” 智能手表是个尴尬的产品 屏幕缺陷一枪毙命 看15岁的谷歌的前21位员工现在都在做什么 分析师:三星将失去中国市场份额的头把交椅 5款工具助你写出更好的Java代码 Noitom:&amp;quot;中国创造&amp;quot;的动捕技术 缘创派:帮助技术人员寻找创业伙伴 关于rs.MovePrevious 100分问题:如何在sdi的view的(0,0,NULL,20)区域固定显示一定内容 VB中使用ADO连接远程数据库时的事务处理问题 在weblogic中,这个错误是怎么回事?(在线等待) 怎么用SOCKET传送一个自定义类型的数据 szbug大哥请进来拿分 幸福女人的小小要求(zt) 各位好,请问一个问题:存储过程的作用是什么,能不能举例说明一下,看了半天书,也没能明白,多谢了! 我想用循环来实现这样的语句,怎么写呢? 请问xml元素内容部分的html代码如何处理 怎样定义rect数组? 一道考试题目:考考你们自己的C++水平。 怎样用代码遍历DBGrid中的记录?急!在线等待! 为什么mov eax, [0x400000h]和mov eax 400000h汇编结果一样? 网络报表最好的解决方法是什么 高分求购web 打印控件?还有一个远程数据库,客户端打印问题帮忙解决一下 哪位高手能给一个简单的TOOLBAR控件应用的原代码?(非常需要) 哪些有钱途?哪些有前途? 讨论:MSE(软件工程)对中国目前的开发现状真的有帮助吗?来者有分 ACCESS查询语句中的DATEPART函数为什么不能执行??? php为什么安上后不能用 在VS.Net中如何使注释生成已编译的HTML帮助文件? 我想更改Win2000的开机画面,请高手指点 ADO连接数据库时的事务处理问提 对于动态生成的控件,如何确定它的名字? vb 中使用select 的问题 想把post的变量遍历,怎样实现 小问题 关于参数 如何通过一个计算机名来查出它在局域网中的IP !!!!!~~~ 急,哪里可以下载IeWebControl? 有没有方法通过分布式连接直接从sql server写数据到oracle数据库。 郁闷问题:有谁知道Textbox在运行时如果没有任何输入,它是否空值? 如何用vb做一个启动程序(在windows启动运行) 请问,怎样将一个已分好区的电子盘格式化成ext2格式??? 请教web services问题 高分求购H261解码算法 子类中怎么用基类中的一个属性? 请问有没有JB7的中文教程,高分相求!(400分) 怎样在下拉列表框中显示数据表?具体怎么做? 请教,各位是如何实现对SQL SERVER的记录加密的? Datagrid中的HyperLinkColumn如何传递两个变量值给下一页? 高手请进:怎样将一个值传递到datagrid模板列的一个textbox中?问了好久,没有人会吗? ACCESS中的DATEPART函数为什么不能执行? 怎样在下拉列表框中显示数据表?具体怎么做? davidnim(天道酬勤) ,谢谢你了! EA 哥们们想你! 过年了你还好不? 听说你去了米国。。。。。。 我的winsock通信程序 一到晚上11点的样子就出现异常错误 异常处理问题 基础问题5!先答先给分! js里alert()的问题 《一路向西》大胸女王王李丹妮最新蕾丝包头美女酒吧老板彭程程被刺身亡 身前叶璇《第九个寡妇》首任制片人 隔空示87《红楼梦》“香菱”漂亮女儿首曝光董洁离婚后代言捞金 形象不佳露一口黄AV女优麻美由麻患癌 已摘除子宫和卵台女主播跟踪老公出轨反被告 偷装GP超模小三上位后祝原配生日快乐 遭其怒揭秘美国宴请习近平国宴菜单传日“绝世美少女”复出求突破 下海拍《一路向西》张暖雅参加澳门富商派对艳港版海天盛宴两大90后嫩模海量艳照大男子做9次鼻子整形手术 最终痛失鼻子小S:赚钱永远不嫌多 最怕被问大S何海滩情色派对女主角陈静仪:16岁怀孕男子银行卡被错汇入85万 如数归还失延安城管跳踩商户7天后局长露面 鞠躬偷车贼也有原则:一个城市只偷3次南京结婚4天夫妻为吃麻辣烫闹离婚王菲与女儿窦靖童逛街 李亚鹏赞妻像少42岁杨钰莹与39岁林志颖合影 网友江城子·为援藏干部而作丁业现会见中石化副总裁章建华一行警方介入调查暑运高峰“马虎”旅客频现“情系鲁甸,爱在人间”大型公益演出活云南省公安厅紧急调拨装备物资支援鲁甸反垄断亟待“硬”起来自治区政府与国土资源部举行座谈引领中国经济巨轮扬帆远航洛桑江村会见牛锡明一行江孜抗英英雄后代的心声高原生态农业新地标魏建如:人生无处不青山阿里三大产业发展势头好自治区政府与国土资源部举行座谈感人的乐谱 动人的华章■ 二版 高原要闻2014中华环保世纪行西藏行活动启动临江仙·题林芝桃花节尼玛县促教育实践活动纵深推进渔家傲
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘