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

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

编辑:说三道四文库 发布时间:2017-04-27 05:25
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. 
VB如何在Windows操作系统中改变文件打开方式 VB如何知道硬盘是使用那一种文件系統(FAT32,FAT16)? VB如何自动更动成中文输入 VB删除整个目录 VB设置打印页边距 VB实现文件查找功能 VB使用SendMessage函数滚动文本框控件中的内容 VB使用 WIN95 的选择目录对话框 VB使用INI文件 VB使用WriteFile 块读写数据 VB使用历史文件记录 VB使用内存映射文件加快文件操作速度 VB数据报表设计器在多层结构开发的应用 VB突破 TextBox 32K 的限制 VB拖拽节点时实现目录树自动翻滚 位图文件内部初探-VB资料 VB文本的加密与解密 VB显示盘中所有的目录 VB压缩MDB文件 一个移动文件的简单方法-VB资料 VB移动文件到回收站 VB隐藏文本框控件的环境菜单(又一方法) VB隐藏文本框控件的环境菜单 VB用API复制移动文件 VB用OleDragdrop事件接受拖放文件 用VB进行文本文件的再处理 用VB开发应用程序如何使用INI文件 用VB实现文件查找功能 VB用Winsock控件实现文件的下载 VB用两分法搜索列表框或组合框中的数据 在 ListBox 之中, 如何检测鼠标所在位置的选项? -VB资料 请告诉我几个从C++转到C#的电子版书籍(马上给分) 在ACCESS里面怎样实现该功能 怎么改变这个界面,帮帮 我用的vs.net好像有个bug。 高分求解,不够再加,我有900分,在线等?关于重载DataGridColumnStyle加了一个用户控件 菜鸟提问:如何用VC制作类似“记事本”的编辑器? 请问那位大虾知道如何把占用一个特定SOCKET通讯端口的进程关掉. 有誰喜欢用TActionList控件,进来谈谈 谁知道在VC里除数为零的异常怎么捕获吗? 请教高手:中文问题 为什么不能比较i>application("tsum")的大小呢? 排版很难看,有人可以指点一二吗?http://www.gz111.net/product0.asp?id=1147 问一下,通过电话上网的,如果把本地的http服务启动,能从internet网也能访问吗? 请问那里有给光盘上复印封面的地方,限北京 请问Recordset的find方法和filter有什么区别? 动态链接库导入对话框资源的问题。在线求解 word中嵌入的金山词霸是怎样实现的? 过了试用期准备签合同。怎么办? Connect Sql server failed using 'sa' user, Why? 我在将一个大于127的long型整数做向左移24位的操作,说overflow,那该怎么办? 逆波兰式(后缀式)求值程序 请问那里有给光盘上复印封面的地方,限北京 悬赏:怎样象在DOS中方便的设置热键,如ESC、F1等? 乱码怎么办? 新手提問:當按下"Enter"的時候,如何用代碼來触發"Tab"事件,使光標移到下一個控鍵上? 请问javascript可以连续多页打印吗?(打印数据库记录) 无奈的法国队,无奈的齐达内! 上半场法国0:1落后于丹麦 初学ASP,怎么能在本机上运行ASP文件? 数据库的图像显示?? 如何改变默认的保存路径? 动态生成web controls的定位问题,急阿!!! 急!急!急!:请问ToolBar2000控件能使用Menu组件吗? MFC设计的程序中怎样保护对话框或别的资源不被EXESCOPE之类软件修改? CListBox应用求救(在线等) 差一点就解决的问题?高手帮我看看,50分!! 新手提問:當按下"Enter"的時候,如何用代碼來触發"Tab"事件,使光標移到下一個控鍵上? 请教一个初级问题! xml上传图片的例子,大家看看那错了 大家讨论一下:配有声音的flash动画在有的电脑上却没有声音,你认为,这可能有那些原因? 法国要想出线必需3:1赢丹麦,8强、4强谁买了都该sb了 高分送问一个简单的问题 高分请教winsocket问题? 如何利用C#获取所有SQL Server的数据库名?分不够再加 请教各位,199分类顺序号代表哪以种分类顺序?急,在线! 请问ejb怎么配置? jsp怎么在后台运行1!?? 请教:如何知道excel.application已经运行? 谁有CGI程序(C语言)分析标准输入的C++类? weblogic 怎么用那个crack.jar 高手拉我一吧,有關.Net製作SetUp 请高手们看看这道题 单位读法例子:9.8N/KG的读法,不是中文读法哦,中文读成9.8N每KG是吧,国际上都是怎么读的?不要中文的... 关于保护环境的几句话 这是一道简答题,能简单明了一些更好! 盛有等体积NO2和O2的混合气体的试管,倒置在水槽中,反应完毕后,液面上升的高度是试管的?答案是5/8.我想要详细的解题过程~~~谢谢,我要记在错题本上的 形容太阳毒辣的个性签名 哪些气体可以使人兴奋 幻想电源是干什么用的 关于一些单位的英语读法km/s,m/s,m/2^2,角度,比如30度,千瓦(Kw),秒,毫秒,kg/m^3,g/cm^3. 六年级关于环保的作文六年级环保作文急不是建议书 移动电源哪个开关按钮是干嘛的?有什么作用? 下雨天空气比晴天的好吗? 已知某行星的质量为M ,半径为R ,万有引力常量为G ,求该行星的:表面的重力加速度g ,绕该行星的卫星...已知某行星的质量为M ,半径为R ,万有引力常量为G ,求该行星的:表面的重力加速度g ,绕该 移动电源到底是干什么用的?比如我MP4续航不足,买一个移动电源,是不是在外面没电了用这玩意儿充电,但是不能在充电的时候使用MP4?还是说也可以当做备用电池强制用,但对MP4不好? 下雨天淋雨真的好吗? 某行星半径为R,物体在它表面的重力加速度为g,万有引力常量为G,则该行星的质量M为 使用电源时绝不允许干什么,否则会烧坏电源使用电源时绝不允许( ),因为这时( )很大,会烧坏电源. 雨后空气似乎很好, 下雨天空气中的氧气会变吗? 在贴吧上电源是干什么的? 氮元素的相对原子质量是多少? 为什么下雨天这么冷? 2.71g Na2SO4·10H2O中含有钠离子和硫酸根离子的物质的量是多少?含H2O的数目为多少? 七嘴八舌话环保口语交际 为什么下雨天会变黄, 什么地区,人们开凿窑洞作为房屋 七嘴八舌话环保的口语交际 为什么下雨天会冷? 窑洞建在那些地区 氮元素地相对原子质量是多少 为了保证天平测量精确,使用时要注意待测物体的质量不能超过() 写关于春天的成语(10个) 全瓷牙用的是什么材料听他们说做全瓷牙牙齿比较白,我想问一下全瓷牙是用的什么材料呢 下雨天,为什么那么冷? 帮帮我吧!以小米为主食,住房为窑洞,请问这描述的地方是什么?各位哥哥姐姐帮帮我吧!~~ a克硫酸钠中含钠离子B克,求钠离子的物质的量 为了保证天平测量精确,使用是要注意待测物体的质量不能超过什么 中国现在还有人住窑洞吗?有哪些地区? present的读音到底什么时候读哪个? 甲、乙、丙三个物体同时同地出发,作直线运动他们的位移时间(x-t)图象如图所示.(接上)在20s内,它们的平均速度和平均速率的大小关系是:A.平均速度大小相等,平均速率V甲>V乙=V丙B.平 高中物理绘制小灯泡伏安特性曲线除了滑动变阻器,那么定值电阻的作用?电路应该要用分压接法,具体的话定值电阻应该怎么接?明明是测小灯泡,为什么要有定值电阻?保护电路的话滑动变阻 窑洞主要分布在我国哪些地区? 时间点的读法. 在硫化钾中,钾元素和硫元素的质量比为多少? 在实验室我们常用天平来测物体的质量 若重力突然消失 则天平 能不能测物体的质量 下雨天的空气是不是比平时的空气清新一点呀!下雨天的空气好是吗? 说明理由 1.制备1mL含30mg Na+的水溶液50mL 需要称量Na2CO3多少克? 根据质量守恒定律解释高锰酸钾受热分解后,剩余固体的质量比原反应物的质量小 下雨天的空气质量为什么要比晴天或阴天的空气清新些? 大学基础化学的一道题 会的教教谢谢已知Ksp标准(AuI3)=10^-46,现在一AuI3饱和溶液,其每升该溶液中含有Au3+离子的毫克数为多少 Au相对原子质量为197 要过程要过程要过程 答案已经有了答案已 高锰酸钾受热分解后,剩余的质量比原反应物的质量减少,是否违反质量守恒定律?说明原因 雨能洗涤空气,使空气清新.那什么能洗涤人的心灵? 表示液体容量的符号是什么 用质量守恒定律解释高锰酸钾加热后固体质量减小 下过雨,空气清新了,为什么? 氢氧化钠溶液的溶剂是什么?溶液是什么? 稳定的电场产生磁场吗?如题 如何使空气清新租的房子,空气流通不好,拖地后老有股味,每次进屋里就有股味道,本人很讲卫生不在室内放垃圾.希望各位教教我怎样净化空气 将一只"220V60W"的白炽灯接在110V的电源上,根据公式P=U平方/R可知它的实际功率变为其额定功率的1/4而实际上它消耗的功率大于15W这是什么原因 口语交际七嘴八舌话环保200字 二氧化锆全瓷牙如何鉴别我花了近一万元做了三颗二氧化锆全瓷牙,但不知真假如何鉴别呢?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘