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 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android Studio 4.0.+NDK .so库生成打包

    Android Studio 4.0.+NDK .so库生成打包本篇博文主要讲解了使用AndroidStudio4.0.+生成.so文件详细过程,文中有通过Cmake自动生成和传统生成两种打包.so文件的方案。各方案有详细的图文介绍,保证一看就懂不学就会。对于NDK开发的进阶学习请继续阅读我的NDK系列博文。

  • python3.8安装scrapy_安装scrapy

    python3.8安装scrapy_安装scrapy抓取网站的代码实现很多,如果考虑到抓取下载大量内容,scrapy框架无疑是一个很好的工具。下面简单列出安装过程。PS:一定要按照Python的版本下载,要不然安装的时候会提醒找不到Python。1.安装Python安装完了记得配置环境,将python目录和python目录下的Scripts目录添加到系统环境变量的Path里(在python2.7以后版本中,安装过程中会有个选项:添加到python…

  • 进程、线程和协程之间的区别和联系

    进程、线程和协程之间的区别和联系一、进程  进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。【进程间通信(IPC)】:管道(Pipe)所有的POSIXsystems,Windows;命名管道(FIFO)所有的POSIX系统…

  • 课程设计酒店管理系统_管理系统课程设计

    课程设计酒店管理系统_管理系统课程设计1.题目要求•顾客入住、退房•房间预订•换房处理•续住管理•折扣2.架构选择:B/SB/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现。3.语言选择:PythonhtmlccsJavaScripthtml…

  • 01_SpringBoot概述

    01_SpringBoot概述

  • jmeter 中 Client implementation HttpClient4和java区别实践一

    jmeter 中 Client implementation HttpClient4和java区别实践一好吧,最近还是在折腾Jmeter,在一个post请求中,发现啃爹的竟然带有特殊字符:’怎么办,直接将数据写入,如下:然后在实际用post发请求时,jmeter自动给转义了,如下:xxxx=%27qq%27%3A%2720%27&rrr=%7Bqq%27  怎么办???那就加加转义字符试试,与是,加了”\”,“\\”,“\\\”,“\\\\”都…

发表回复

您的电子邮箱地址不会被公开。

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