VB实现关机程序

VB实现关机程序下面是本人愿来写的关机程序可以适用于98/xp/2000,在程序中调用即可。现在操作系统多为2000或xp,所以需要特别注意的是应该先得到关机的特权:(要想弄懂下面的程序,先要具备vb调用api函数的知识……)其中:前面一些Public Declare都是api函数的声明.     Public Sub AdjustToken()子程序用来取得关机特权.     Public Sub Sh

大家好,又见面了,我是你们的朋友全栈君。下面是本人愿来写的关机程序可以适用于98/xp/2000,在程序中调用即可。现在操作系统多为2000或xp,所以需要特别注意的是应该先得到关机的特权:(要想弄懂下面的程序,先要具备vb调用api函数的知识……)

其中:前面一些Public Declare都是api函数的声明.

     Public Sub AdjustToken()子程序用来取得关机特权.

     Public Sub Shutdown() ‘是关机子程序

     Public Sub Reboot() ‘是重启子程序

 

*********************代码开始了:*****************

Public Structure LUID

  Dim UsedPart As Integer

  Dim IgnoredForNowHigh32BitPart As Integer

 End Structure

 

 Public Structure LUID_AND_ATTRIBUTES

  Dim TheLuid As LUID

  Dim Attributes As Integer

 End Structure

 

 Public Structure TOKEN_PRIVILEGES

  Dim PrivilegeCount As Integer

  Dim TheLuid As LUID

  Dim Attributes As Integer

 End Structure

 

 ‘强制关机函数

 Public Declare Function ExitWindowsEx Lib “user32” (ByVal uFlags As Integer, ByVal dwReserved As Integer) As Integer

 

 ‘GetLastError函数返回本线程的最后一次错误代码。错误代码是按照线程

 ‘储存的,多线程也不会覆盖其他线程的错误代码。

 Public Declare Function GetLastError Lib “kernel32” () As Integer

 

 ‘GetCurrentProcess函数返回当前进程的一个句柄。

 Public Declare Function GetCurrentProcess Lib “kernel32” () As Integer

 

 ‘OpenProcessToken函数打开一个进程的访问代号。

 Public Declare Function OpenProcessToken Lib “advapi32” (ByVal ProcessHandle As Integer, ByVal DesiredAccess As Integer, ByRef TokenHandle As Integer) As Integer

 

 ‘LookupPrivilegeValue函数获得本地唯一的标示符(LUID),用于在特定的系统中

 ‘表示特定的优先权。

 ‘UPGRADE_WARNING: 结构 LUID 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword=”vbup1050″”

 Public Declare Function LookupPrivilegeValue Lib “advapi32”  Alias “LookupPrivilegeValueA”(ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Integer

 

 ‘AdjustTokenPrivileges函数使能或者禁用指定访问记号的优先权。

 ‘使能或者禁用优先权需要TOKEN_ADJUST_PRIVILEGES访问权限。

 ‘UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword=”vbup1050″”

 ‘UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword=”vbup1050″”

 Public Declare Function AdjustTokenPrivileges Lib “advapi32” (ByVal TokenHandle As Integer, ByVal DisableAllPrivileges As Integer, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Integer, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Integer) As Integer

 

 Public Declare Sub SetLastError Lib “kernel32” (ByVal dwErrCode As Integer)

 ‘********************************************************************

 ‘* 这个过程设置正确的优先权,以允许在Windows NT下关机或者重新启动。

 ‘********************************************************************

 Public Sub AdjustToken()

  

  Const TOKEN_ADJUST_PRIVILEGES As Short = &H20s

  Const TOKEN_QUERY As Short = &H8s

  Const SE_PRIVILEGE_ENABLED As Short = &H2s

  

  Dim hdlProcessHandle As Integer

  Dim hdlTokenHandle As Integer

  Dim tmpLuid As LUID

  Dim tkp As TOKEN_PRIVILEGES

  Dim tkpNewButIgnored As TOKEN_PRIVILEGES

  Dim lBufferNeeded As Integer

  

  ‘使用SetLastError函数设置错误代码为0。

  ‘这样做,GetLastError函数如果没有错误会返回0

  ”””’SetLastError 0

  

  ‘GetCurrentProcess函数设置 hdlProcessHandle变量

  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

  

  ‘ 获得关机优先权的LUID

  LookupPrivilegeValue(“”, “SeShutdownPrivilege”, tmpLuid)

  

  ””’If GetLastError <> 0 Then

  ””’MsgBox “LookupPrivilegeValue error==” & GetLastError

  ””’End If

  

  tkp.PrivilegeCount = 1 ‘ 设置一个优先权

  ‘UPGRADE_WARNING: 未能解析对象 tkp.TheLuid 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword=”vbup1037″”

  tkp.TheLuid = tmpLuid

  tkp.Attributes = SE_PRIVILEGE_ENABLED

  

  ‘ 对当前进程使能关机优先权

  AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)

  

  ””’If GetLastError <> 0 Then

  ””’MsgBox “AdjustTokenPrivileges error==” & GetLastError

  ””’End If

  

 End Sub

 Public Sub Shutdown() ‘关机子程序

  ‘******************根据windows版本来关机************************

  If glngWhichWindows32 = mlngWindowsNT Then

   AdjustToken() ‘调用取得优先权子程序

  End If

  

  ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, &HFFFFs)

  ‘*****************************************************************

 End Sub

 

 Public Sub Reboot() ‘重启子程序

  ‘******************根据windows版本来关机************************

  If glngWhichWindows32 = mlngWindowsNT Then

   AdjustToken() ‘调用取得优先权子程序

  End If

  

  ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, &HFFFFs)

  ‘*****************************************************************

 End Sub 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162980.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路

    动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路一文手把手教你利用RC522射频卡模块与IC卡完成充值消费查询的技术实现思路。

    2022年7月26日
    6
  • 记录关于微信开放平台扫码登录的问题「建议收藏」

    记录关于微信开放平台扫码登录的问题「建议收藏」1、开放平台扫码登录需要snsapi_login权限,此权限需要注册微信开放平台账号并完成交钱认证。2、添加网站应用,并等待审核通过。通过后会分配一个独立的appid和appsecret。3、网站应用的授权回调域名需要严格按照xxx.yyy.zz的顶级域名填写4、开发时的主要问题是redirect_uri这里:   A、此redirect_uri是微信回调域名,是可以接受请求的真实地址  …

    2022年5月2日
    45
  • 新手入侵笔记_探灵笔记适合新手的角色

    新手入侵笔记_探灵笔记适合新手的角色【拿shell】 1.直接上传aspasajspcerphpaspxhtrcdx格式的木马,不行就利用IIS6.0解析漏洞”:1.asp;1.jpg/1.asp;.jpg/1.asp;jpg/1.asp;.xls 2.上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。 3.上传图片木马把地址复制到…

    2022年9月21日
    3
  • 干掉IDEA:JetBrains推出下一代轻量级开发工具Fleet

    干掉IDEA:JetBrains推出下一代轻量级开发工具FleetJetBrains以20年的IDE开发经验为基础从头打造了号称下一代的开发工具Fleet,它使用了IntelliJ代码处理引擎,具有分布式IDE架构和重新设计的UI。它的…

    2022年5月21日
    488
  • Ubuntu安装GCC 3.4

    Ubuntu安装GCC 3.4Ubuntu安装GCC3.4一、背景二、安装三、总结一、背景因最近学习hit-os编译linux0.11版本内核,需要使用到gcc3.4,故此记录。二、安装#下载deb包wgethttp://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu3_amd64.debwgethttp://old-releases.ubuntu.com/ubuntu/pool/universe/g/gc

    2022年7月24日
    10
  • 最近在学习mars老师的视频。按计划的。学习安卓

    转眼之间暑假就过去一大半了。还有14天就开学了。估计再过个一周,同学们就陆续回校了。这个假期借了很多书,虽然没有想象中那么高的效率,学习太多东西,不过还是学了点东西,起码自我感觉还算可以。我是先看了看java的基础知识,一本国外的java面向对象程序设计,说实话书挺好,不过对我不合适,学过c++之后,很多里面讲的思想差不多懂了,然后例子很多,看得有点头疼,应该找一本专门讲java语法的书的。那

    2022年3月8日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号