注册 登录
编程论坛 新人交流区

vb自动关机

ytsm0526 发布于 2007-10-28 11:00, 1103 次点击

'以下为模块代码
Option Explicit

Public Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type

Public Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type

'Beginning of Code

Public Const EWX_SHUTDOWN As Long = 1
Public Const EWX_FORCE As Long = 4
'重起
Public Const EWX_REBOOT = 2
'关机
Public Const EWX_POWEROFF = 8

Public Declare Function ExitWindowsEx Lib "user32" ( _
ByVal dwOptions As Long, ByVal dwReserved As Long) As Long

Public Declare Function GetCurrentProcess Lib "kernel32" () As Long

Public Declare Function OpenProcessToken Lib "advapi32" ( _
ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long

Public Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
ByVal lpName As String, lpLuid As LUID) As Long

Public 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

Public Sub AdjustToken()

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

' Get the LUID for shutdown privilege.

LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1 ' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
' Enable the shutdown privilege in the access token of this
' process.
AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
End Sub

在窗体中加入一个DTPicker控件和一个Timer控件
设置CheckBox属性为True,格式定为:HH:mm
设置Time的Enable属性为True,Interval属性5000。(可自己更改)
Change事件加入代码
If IsNull(DTP.Value) Then
'MsgBox "null"
SaveSetting "RealTimeReadCard", "Set", "AutosdTime", "0"
Timer2.Enabled = False
Else
'MsgBox DTP.Value
SaveSetting "RealTimeReadCard", "Set", "AutosdTime", DTP.Value
Timer2.Enabled = True
Sd_temp = DTP.Value
End If
Form的Load事件加入
Sd_temp = GetSetting("RealTimeReadCard", "Set", "AutosdTime", "")
If Sd_temp = "0" Or Sd_temp = "" Then
DTP.Value = Null
Else
DTP.Value = Sd_temp
End If
Timer事件加入
If Sd_temp <> "" Then
If Left(Sd_temp, Len(Sd_temp) - 3) = Left(Time, Len(Time) - 3) Then
AdjustToken
'ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_POWEROFF), &HFFFF
End If
End If

本程序适合win98,nt,2000,xp,2003系统。

11 回复
#2
ytsm05262007-10-28 11:17
同志们你们光看不会,太不行了
#3
luodachao2007-10-28 12:07
如何用VB写一个隐藏进程的程序,比如我要隐藏进程名为“QQ.exe”,输入QQ.exe就把这个进程给隐藏了,怎么写?
#4
新建文件夹19872007-10-28 12:25
顶下,刚才在C#那边也看到一个关机的了。
#5
youqingcao2007-10-28 22:44

看不懂想要注释,老师还没讲到模块.

#6
liuyond2007-10-29 08:24
顶下,自主学习是第一位的
#7
jonvahe2007-10-29 09:48
学习了.
#8
star19832007-10-29 10:16
学习了,不错的代码。
#9
ddjk2007-10-29 10:41
自学c中~~~没有学vb
#10
wzg03192007-10-29 10:50
我是自学C#的
#11
viq8862007-10-29 11:06
不错
#12
jiangyigang2007-10-29 12:48
顶下
1