/////一段定时关机的代码,但我编译运行后不执行关机,为什么??Option Explicit
Const SM_CLEANBOOT = 67Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As LongPrivate Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Timer1_Timer()
Dim HOUR As Integer
Dim MIN As Integer
Dim SEC As Integer
Dim RUN As String
Dim delay As Integer
If Time > "23:59:00" And Time < "8:00:00" Then
Call ExitWindowsEx(EWX_SHUTDOWN, 2)End If
End SubPrivate Sub Form1_Load()
Dim Timer1
Timer1.Interval = 1000
End Sub
Const SM_CLEANBOOT = 67Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As LongPrivate Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Timer1_Timer()
Dim HOUR As Integer
Dim MIN As Integer
Dim SEC As Integer
Dim RUN As String
Dim delay As Integer
If Time > "23:59:00" And Time < "8:00:00" Then
Call ExitWindowsEx(EWX_SHUTDOWN, 2)End If
End SubPrivate Sub Form1_Load()
Dim Timer1
Timer1.Interval = 1000
End Sub
////////
你这样判断当然不行 如:现在时间是1:10:00 那么1:10:00<8:00:00而1:10:00>23:59:00?
'下面的程序永远不会被执行.
'你能找得出一个时间值是大于23:59:00又小于8:00:00的吗?
'
Call ExitWindowsEx(EWX_SHUTDOWN, 2)
End If'---------------------If Time > CDATE("23:59:00") OR Time < CDATE("8:00:00") Then
Call ExitWindowsEx(EWX_SHUTDOWN, 2)
End If
Timer1.Interval = 10000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()AdjustTokenPrivilegesForNT
ExitWindowsEx uFlags, 4 If Time > "0:00:00" And Time < "8:00:00" Then
ExitWindowsEx EWX_FORCE, 4
End If
End Sub
"上
Private Sub Form_Load()
Timer1.Enabled=FALSE
Timer1.Interval = 1000
Timer1.Enabled=TRUE
End Sub
'**************************
Private Sub Timer1_Timer()
If Time > cdate("0:00:00") And Time < cdate("8:00:00") Then
AdjustTokenPrivilegesForNT
ExitWindowsEx uFlags, 4
ExitWindowsEx EWX_FORCE, 4
End If
End Sub
Option Explicit
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
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
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Private Declare Function GetUserName& Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long)
Private Declare Function WinHelp Lib "user32.dll" Alias "WinHelpA" (ByVal hWndMain As Long, ByVal lpHelpFile As String, ByVal uCommand As Long, dwData As Any) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Const HELP_CONTENTS = &H3&
Const EWX_LOGOFF = 0 '注销
Const EWX_SHUTDOWN = 1 '待机
Const EWX_REBOOT = 2 '重新启动
Const EWX_WAIT = 16
Const EWX_FORCE = 4 '终止没有响应的进程
Const EWX_POWEROFF = 8 '关闭电源
Dim UserName As String
Private Sub Form_Load()
Dim hProcessHandle As Long
Dim hTokenHandle As Long
Dim tmpLuid As LUID
Dim tkpNew As TOKEN_PRIVILEGES
Dim tkpPrevious As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
'获取当前进程的一个伪句柄
hProcessHandle = GetCurrentProcess()
OpenProcessToken hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle' Get the LUID for the shutdown privilege
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid tkpNew.PrivilegeCount = 1 ' One privilege to set
tkpNew.TheLuid = tmpLuid
tkpNew.Attributes = SE_PRIVILEGE_ENABLED' Enable the shutdown privilege in the access token of this process.
lBufferNeeded = 0
'允许当前应用程序有关闭操作系统的权限
AdjustTokenPrivileges hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded
Dim strRetu As String * 256, ctr As String
'获得用户名
GetUserName strRetu, 255
UserName = Left(strRetu, InStr(strRetu, Chr(0)) - 1)
UserName = UserName & ctr
'设置下拉列表框选项
Combo1.AddItem "注销 " & UserName
Combo1.AddItem "关机"
Combo1.AddItem "重新启动"
Combo1.AddItem "等待"
Combo1.Text = "关机"
Combo1.ForeColor = &HFFFFFF
'窗体定位
Me.ScaleHeight = 3540
Me.ScaleWidth = 6240
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 3.009
End Sub
Private Sub Command1_Click()
If Combo1.Text = "注销 " & UserName Then
ExitWindowsEx EWX_FORCE, 0
End If
If Combo1.Text = "关机" Then
ExitWindowsEx EWX_FORCE Or EWX_POWEROFF, 0
End If
If Combo1.Text = "重新启动" Then
ExitWindowsEx EWX_FORCE Or EWX_REBOOT, 0
End If
If Combo1.Text = "等待" Then
ExitWindowsEx EWX_WAIT, 0
End If
End Sub
Private Sub Command2_Click()
Unload Me
End
End Sub
Private Sub Command3_Click()
WinHelp Me.hWnd, "winhlp32.hlp", HELP_CONTENTS, ByVal 0
End Sub
Private Sub Combo1_DropDown()
Combo1.ForeColor = &H0
Combo1.BackColor = &HFFFFFF
End Sub
Timer1.Enabled = False
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
'**************************
Private Sub Timer1_Timer()
If Time > CDate("0:00:00") And Time < CDate("8:00:00") Then
AdjustTokenPrivilegesForNT
ExitWindowsEx uFlags, 4
ExitWindowsEx EWX_FORCE, 4
End If
End Sub