关闭Windows

由于各种原因,您可能需要关闭Windows才能以编程方式进行。 例如,如果您的程序安装需要重新配置系统。 以下代码将通过重新启动等选项为您完成此操作。


'Module code - modShutdown
' Shutdown Flags
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const SE_PRIVILEGE_ENABLED = &H2
Const TokenPrivileges = 3
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = &H2
Const TOKEN_IMPERSONATE = &H4
Const TOKEN_QUERY = &H8
Const TOKEN_QUERY_SOURCE = &H10
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_ADJUST_GROUPS = &H40
Const TOKEN_ADJUST_DEFAULT = &H80
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const ANYSIZE_ARRAY = 1
Private Type LARGE_INTEGERlowpart As Longhighpart As Long
End Type
Private Type Luidlowpart As Longhighpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES'pLuid As LuidpLuid As LARGE_INTEGERAttributes As Long
End Type
Private Type TOKEN_PRIVILEGESPrivilegeCount As LongPrivileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle 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 LARGE_INTEGER) 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 GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function InitiateShutdown(ByVal Machine As String, _Optional Force As Variant, _Optional Restart As Variant, _Optional AllowLocalShutdown As Variant, _Optional Delay As Variant, _Optional Message As Variant) As Boolean Dim hProc As LongDim OldTokenStuff As TOKEN_PRIVILEGESDim OldTokenStuffLen As LongDim NewTokenStuff As TOKEN_PRIVILEGESDim NewTokenStuffLen As LongDim pSize As LongIf IsMissing(Force) Then Force = FalseIf IsMissing(Restart) Then Restart = TrueIf IsMissing(AllowLocalShutdown) Then AllowLocalShutdown = FalseIf IsMissing(Delay) Then Delay = 0If IsMissing(Message) Then Message = ""'Make sure the Machine-name doesn't start with '\\'If InStr(Machine, "\\") = 1 ThenMachine = Right(Machine, Len(Machine) - 2)End If'check if it's the local machine that's going to be shutdownIf (LCase(GetMachineName) = LCase(Machine)) Then'may we shut this computer down?If AllowLocalShutdown = False Then Exit Function'open access tokenIf OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hProc) = 0 ThenMsgBox "OpenProcessToken Error: " & GetLastError()Exit FunctionEnd If'retrieve the locally unique identifier to represent the Shutdown-privilege nameIf LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 ThenMsgBox "LookupPrivilegeValue Error: " & GetLastError()Exit FunctionEnd IfNewTokenStuff = OldTokenStuffNewTokenStuff.PrivilegeCount = 1NewTokenStuff.Privileges(0).Attributes = SE_PRIVILEGE_ENABLEDNewTokenStuffLen = Len(NewTokenStuff)pSize = Len(NewTokenStuff)'Enable shutdown-privilegeIf AdjustTokenPrivileges(hProc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 ThenMsgBox "AdjustTokenPrivileges Error: " & GetLastError()Exit FunctionEnd If'initiate the system shutdownIf InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 ThenExit FunctionEnd IfNewTokenStuff.Privileges(0).Attributes = 0'Disable shutdown-privilegeIf AdjustTokenPrivileges(hProc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 ThenExit FunctionEnd IfElse'initiate the system shutdownIf InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 ThenExit FunctionEnd IfEnd IfInitiateShutdown = True
End Function
Function GetMachineName() As StringDim sLen As Long'create a bufferGetMachineName = Space(100)sLen = 100'retrieve the computer nameIf GetComputerName(GetMachineName, sLen) ThenGetMachineName = Left(GetMachineName, sLen)End If
End Function
'Form code - frmShutdown
Private Sub cmdShutdownNow_Click()modShutdown.InitiateShutdown GetMachineName, True, False, True, 60, "Message to state reason for shutdown!"
End Sub 

From: https://bytes.com/topic/visual-basic/insights/641550-shut-down-windows-program

从程序关闭Windows。相关推荐

  1. win10如何关闭Windows Defender安全保护程序

    win10如何关闭Windows Defender安全保护程序?win10如何关闭Windows Defender安全保护程序?在安装的windows操作系统中,自带着安全保护程序"Wind ...

  2. win11中关闭windows hello 尝试再次运行安装程序 的解决方法

    1..按 "Windows 徽标键+X",启动设备管理器.找到您的指纹(生物识别)驱动,右键卸载,重启设备.再次打开设备管理器,点击 "操作">" ...

  3. QT QProcess 关闭程序 tasklist windows

    QT程序,windows下指定程序名关闭程序,通过tasklist.exeint existProcess(QString proName) {if (!proName.endsWith(" ...

  4. 服务器运行时将杀毒软件关掉,云服务器的速度性能优化之一(关闭Windows杀毒软件及无关服务及程序)...

    最近网站从托管理服务器转到腾讯云,突然发现网站的速度突然变得很慢 分析两台服务器的硬件 软件配置,相差并不大,CPU 内存 硬盘 性能都差不多,都是使用windows服务器 最后不断跟踪网页所需时间 ...

  5. Socket程序从windows移植到linux下需要注意的

    )头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...

  6. c# timer 销毁_如果表单应用程序关闭C#,如何防止发生Timer Elapsed事件

    我在 Windows窗体应用程序(Visual C#)中有一个计时器,当我想退出应用程序时,它会导致问题. 计时器被定义为表单类的成员: partial class Form1 { //These a ...

  7. 如何关闭Windows XP/Vista/Windows 7的DEP数据执行保护

    数据执行保护 (DEP) 是一种Windows安全机制,从Windows版本顺序上看是从Windows XP SP2开始引入,通过监视程序以确保它们使用的系统内存是安全的,帮助防止操作系统受到病毒和其 ...

  8. win8系统关闭共享服务器,Windows8系统关闭Windows Media Player网络共享服务的方法

    Windows Media Player是一款Windows自带的媒体播放器,可以播放一些本地视频,不过有些windows8系统用户发现Windows Media Player有可在网络上共享媒体的功 ...

  9. resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...

    Win10系统一直在更新的路上,但是每一次更新,感觉不是在修复旧Bug,就是在添加新Bug 的路上. 而其他的系统设置也不知道好好整改一下,让我们可以根据自己的喜好,来高效优化Windows系统的使用 ...

最新文章

  1. openlayers5之完整文档v5.1.3.zip下载
  2. 获取下月第一天_获取当前月 下月 下下月 的第一天和最一天
  3. Go get 下载的包在哪里?
  4. .net面试题目51-100
  5. 趣学python3(48)--列出所有目录及子目录文件
  6. C/C++中输入带空格的字符串 string 转 char*
  7. 卡尔曼_卡尔曼滤波最完整公式推导
  8. 【uTenux实验】写在开始实验之前
  9. oracle补零 (转)
  10. python列表和字典_2020/11/18 python学习第5课 列表和字典
  11. 北京这些5平米不到的外卖窗口,居然能够排起100米以上的长龙!
  12. Thrift在windows7下的安装与实践
  13. 基于spring boot的Java开源商城系统(附完整版源码)
  14. apicloud 请删除手机中的apploader后在尝试
  15. 软考高级 真题 2011年上半年 信息系统项目管理师 综合知识
  16. 挪威访学1:My first flight
  17. UG NX二次开发-外部模式
  18. TCP的三次握手和四次挥手
  19. 计算机房的英语该怎么读,计算机机房硬件维护,Computer room hardware maintenance,音标,读音,翻译,英文例句,英语词典...
  20. python 爬虫-京东用户评论数据和用户评分

热门文章

  1. VueJs探索之watch用法详解
  2. 2021-2027中国服务器机箱市场现状研究分析与发展前景预测报告
  3. 飞利浦净化器还能走多远
  4. uni-app ——uni-app的基本使用
  5. 要来了!国内安卓统一推送标准将于 今年3 月开启测试
  6. FNN 网络介绍与源码浅析
  7. R语言入门——不掉包实现FNN(单层感知机)
  8. 案例-摩拜与哈罗测试自动化演变
  9. js银行卡、手机号等校验汇总
  10. 锤子OS--Smartisan OS