1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > VB.Net远程控制编程实例[注销关机重启]

VB.Net远程控制编程实例[注销关机重启]

时间:2021-11-07 18:23:27

相关推荐

VB.Net远程控制编程实例[注销关机重启]

作者:IVA 来源:乐博网转化 更新时间:-12-16

原代码为C#编写,由L3"Studio团队开发;乐博网将其转化为代码

功能描述:管理类(主要有关机重启等功能,API函数实现)

相关事件:注销 关机 重启

命名空间:Lob.Windows

子类:WindowsManager

转化后代码如下:

Imports System

Imports System.Runtime.InteropServices

Namespace Lob.Windows

Public Class WindowsManager

Friend Const SE_PRIVILEGE_ENABLED As Integer = 2

Friend Const TOKEN_QUERY As Integer = 8

Friend Const TOKEN_ADJUST_PRIVILEGES As Integer = 32

Friend Const SE_SHUTDOWN_NAME As String = "SeShutdownPrivilege"

Friend Const EWX_LOGOFF As Integer = 0

Friend Const EWX_SHUTDOWN As Integer = 1

Friend Const EWX_REBOOT As Integer = 2

Friend Const EWX_FORCE As Integer = 4

Friend Const EWX_POWEROFF As Integer = 8

Friend Const EWX_FORCEIFHUNG As Integer = 16

Friend Declare Function GetCurrentProcess Lib "kernel32.dll" () As IntPtr

Friend Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal h As IntPtr, ByVal acc As Integer, ByRef phtok As IntPtr) As Boolean

Friend Declare Function LookupPrivilegeValue Lib "advapi32.dll" (ByVal host As String, ByVal name As String, ByRef pluid As Long) As Boolean

Friend Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal htok As IntPtr, ByVal disall As Boolean, ByRef newst As TokPriv1Luid, ByVal len As Integer, ByVal prev As IntPtr, ByVal relen As IntPtr) As Boolean

Friend Declare Function ExitWindowsEx Lib "user32.dll" (ByVal flg As Integer, ByVal rea As Integer) As Boolean

Private Shared Sub DoExitWin(ByVal flg As Integer)

Dim ok As Boolean

Dim tp As TokPriv1Luid

Dim hproc As IntPtr = GetCurrentProcess

Dim htok As IntPtr = IntPtr.Zero

ok = OpenProcessToken(hproc, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), htok)

tp.Count = 1

tp.Luid = 0

tp.Attr = SE_PRIVILEGE_ENABLED

ok = LookupPrivilegeValue(Nothing, SE_SHUTDOWN_NAME, tp.Luid)

ok = AdjustTokenPrivileges(htok, False, tp, 0, IntPtr.Zero, IntPtr.Zero)

ok = ExitWindowsEx(flg, 0)

End Sub

Public Shared Sub ShutDown()

DoExitWin(EWX_SHUTDOWN)

End Sub

Public Shared Sub Reboot()

DoExitWin(EWX_REBOOT)

End Sub

<StructLayout(LayoutKind.Sequential, Pack:=1)> _

Structure TokPriv1Luid

Public Count As Integer

Public Luid As Long

Public Attr As Integer

End Structure

End Class

End Namespace

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。