一个关机的VB类模块

'APIs WHICH HANDLES SHUTDOWN / RESTART / LOGOFF ETC..

Option Explicit

Private 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 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 Const EWX_FORCE As Long = 4

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

Public Enum EnumExitWindows
  WE_LOGOFF = 0
  WE_SHUTDOWN = 1
  WE_REBOOT = 2
  WE_POWEROFF = 8
End Enum
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

Public Sub ExitWindows(ByVal exitCommand As EnumExitWindows)
  AdjustToken
  ExitWindowsEx (exitCommand Or EWX_FORCE), 0
End Sub

'调用的时候只要这样
Dim exitWin As New clsShutdown
Private Sub cmdRestart_Click()
    On Error Resume Next
    exitWin.ExitWindows WE_REBOOT
End Sub

Private Sub cmdShutdown_Click()
    On Error Resume Next
    exitWin.ExitWindows WE_POWEROFF
End Sub

一个关机的VB类模块相关推荐

  1. VB中窗体模块、标准模块、类模块的区别

    VB的代码存储在模块中.在VB中提供了三种类型的模块:窗体模块.标准模块和类模块. 简单的应用程序可以只有一个窗体,所用的程序都驻留在窗体模块中,而当应用程序庞大复杂时,就要另外附加窗体.最终可能有几 ...

  2. VB中什么是类,类模块有什么作用

    一.什么是类? 用面向对象的编程思想来看,类就是存储数据同时给一组相关代码赋予协调功能的方式.类是面向对象编程的核心. VB最为人垢病的是它的面向对象特性.实际上VB是一种基于对象的开发工具.在VB中 ...

  3. boost::program_options模块实现一个用户定义的类来解析 特定机制——不是默认使用的 iostream 操作的测试程序

    boost::program_options模块实现一个用户定义的类来解析 特定机制--不是默认使用的 iostream 操作的测试程序 实现功能 C++实现代码 实现功能 boost::progra ...

  4. boost::mpi模块实现一个简单的点类,我们可以构建、添加、比较和 连载

    boost::mpi模块实现一个简单的点类,我们可以构建.添加.比较和 连载 实现功能 C++实现代码 实现功能 (boost::mpi模块实现一个简单的点类,我们可以构建.添加.比较和 连载 C++ ...

  5. 一个通用的VB磁盘文件搜索引擎类

    磁盘文件搜索是一件比较简单的事情,但很多代码写得非常繁琐,而且不支持多重路径和文件通配符,为此,我用VB写了一个通用的磁盘文件搜索引擎类,类代码如下: Option Explicit '* ***** ...

  6. vb利用类模块获得鼠标滚轮(滑轮)事件

    '添加一个类模块,模块名称设置为:cSubclass '代码如下: Option Explicit Private Declare Sub CopyMemory Lib "kernel32& ...

  7. vba 定义类_VBA|工程中的四类模块的具体含义与比较

    新建一个工作簿后的VBE的工程资源管理器: 可以看到默认的3个工作表对应的模块和工作簿模块ThisWorkbook. 选择sheet1,点击"对象"列表下拉框: 可以看到一个可供选 ...

  8. 【转】实现多行toolTips的类模块

    注:本文转自CSDN论坛 这里有一个类模块,就是用来实现多行   toolTips   的.          Option   Explicit             '============= ...

  9. 2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出“方法 method() 被

    2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出"方法 metho ...

最新文章

  1. Ubuntu 18.04时间同步
  2. 柠檬班python自动化视频百度云_python自动化装逼指南1-装饰器详解
  3. 什么是设计模式(Design Patterns)
  4. integer java 随机_如何在Java中生成随机BigInteger值?
  5. 【Flink】No key set. This method should not be called outside of a keyed context.
  6. c语言goord函数,park、unpark、ord 函数使用方法(转)
  7. 如何面试一位前端工程师
  8. Excel插入多列相同数据
  9. 多元梯度下降法--machine learning
  10. CAN协议 J1939
  11. java ehcache使用_ehcache使用报错
  12. 【算法导论-37】Graph的Java实现
  13. [论文阅读] Universal Weighting Metric Learning for Cross-Modal Matching
  14. 小米34寸带鱼屏显示器的耗电计算
  15. ubuntu16.04下运行Drcom客户端
  16. 20210507新版友价框架制作江雀网店交易天猫淘宝京东拼多多唯品会网店转让送手机版系统
  17. 《所谓会说话,就是会换位思考》总结
  18. 最详细最直观的>>>理解Pandas分组聚合和透视图标
  19. html5 canvas画椭圆形
  20. Docker 基础 (一)

热门文章

  1. sybase 设置默认值_[转]SYBASE 数据库操作笔记
  2. IIS优化-解决IIS访问速度慢问题
  3. xcode4.1自带SVN配置
  4. php adodb使用,ADODB类使用_PHP教程
  5. 华为的创新——流程和组织结构
  6. linux fb设备驱动,linux设备驱动归纳总结(八):1.总线、设备和驱动
  7. mysql从文本导入表_[Mysql] 用load data将文本文件数据导入到表
  8. JSP中调用java类中的方法
  9. 开源GIS(十)——openlayers中加载在线标准与自定义切片
  10. ASP.NET——C#文件夹创建与文件存在判断