⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 该程序可以用于工业控制
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   4260
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   3825
   LinkTopic       =   "Form1"
   ScaleHeight     =   4260
   ScaleWidth      =   3825
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command5 
      Caption         =   "关操作系统,并关电源"
      Height          =   492
      Left            =   750
      TabIndex        =   4
      Top             =   3480
      Width           =   2292
   End
   Begin VB.CommandButton Command4 
      Caption         =   "强制关机"
      Height          =   492
      Left            =   720
      TabIndex        =   3
      Top             =   2640
      Width           =   2292
   End
   Begin VB.CommandButton Command3 
      Caption         =   "关闭操作系统、并重起"
      Height          =   492
      Left            =   720
      TabIndex        =   2
      Top             =   1800
      Width           =   2292
   End
   Begin VB.CommandButton Command2 
      Caption         =   "关闭操作系统、未关电源"
      Height          =   492
      Left            =   720
      TabIndex        =   1
      Top             =   960
      Width           =   2292
   End
   Begin VB.CommandButton Command1 
      Caption         =   "注销"
      Height          =   492
      Left            =   720
      TabIndex        =   0
      Top             =   120
      Width           =   2292
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
    Private Const EWX_LOGOFF As Long = 0    '退出、注销用户
    Private Const EWX_SHUTDOWN As Long = 1  '关闭操作系统、但未关闭电源
    Private Const EWX_REBOOT As Long = 2    '关闭操作系统,并重新启动计算机
    Private Const EWX_FORCE As Long = 4     '强制关机
    Private Const EWX_POWEROFF As Long = 9  '关闭操作系统、并关闭电源
    
    Private Const ANYSIZE_ARRAY As Long = 1

    'ExitWindowsEx函数可以退出登录、关机或者重新启动系统
    Private Declare Function ExitWindowsEx Lib "user32" _
        (ByVal dwOptions As Long, _
        ByVal dwReserved As Long) As Long
    
    Private Type LUID
        lowpart As Long
        highpart As Long
    End Type

    Private Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End Type

    Private Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type

     'GetCurrentProcess函数返回当前进程的一个句柄。
     Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
     
     'OpenProcessToken函数打开一个进程的访问代号。
     Private Declare Function OpenProcessToken Lib "advapi32" _
     (ByVal ProcessHandle As Long, _
     ByVal DesiredAccess As Long, _
     TokenHandle As Long) As Long
     
     'LookupPrivilegeValue函数获得本地唯一的标示符(LUID),用于在特定的系统中
     '表示特定的优先权。
     Private Declare Function LookupPrivilegeValue Lib "advapi32" _
     Alias "LookupPrivilegeValueA" _
     (ByVal lpSystemName As String, _
     ByVal lpName As String, _
     lpLuid As LUID) As Long
     
     'AdjustTokenPrivileges函数使能或者禁用指定访问记号的优先权。
     '使能或者禁用优先权需要TOKEN_ADJUST_PRIVILEGES访问权限。
     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 Sub AdjustTokenPrivilegesForNT()
    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
        
    LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
    
    tkp.PrivilegeCount = 1
    tkp.Privileges(0).pLuid = tmpLuid
    tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    
    AdjustTokenPrivileges hdlTokenHandle, _
        False, _
        tkp, _
        Len(tkpNewButIgnored), _
        tkpNewButIgnored, _
        lBufferNeeded
End Sub
    

Private Sub Command1_Click()

 Dim uFlags As Long
    uFlags = 0 'EWX_FORCE Or EWX_POWEROFF
    AdjustTokenPrivilegesForNT
    ExitWindowsEx uFlags, &HFFFF
    
End Sub

Private Sub Command2_Click()

 Dim uFlags As Long
    uFlags = 1 'EWX_FORCE Or EWX_POWEROFF
    AdjustTokenPrivilegesForNT
    ExitWindowsEx uFlags, &HFFFF
    
End Sub

Private Sub Command3_Click()

 Dim uFlags As Long
    uFlags = 2 'EWX_FORCE Or EWX_POWEROFF
    AdjustTokenPrivilegesForNT
    ExitWindowsEx uFlags, &HFFFF

End Sub

Private Sub Command4_Click()

 Dim uFlags As Long
    uFlags = 4 'EWX_FORCE Or EWX_POWEROFF
    AdjustTokenPrivilegesForNT
    ExitWindowsEx uFlags, &HFFFF

End Sub

Private Sub Command5_Click()

 Dim uFlags As Long
    uFlags = 9 'EWX_FORCE Or EWX_POWEROFF
    AdjustTokenPrivilegesForNT
    ExitWindowsEx uFlags, &HFFFF

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -