/////一段定时关机的代码,但我编译运行后不执行关机,为什么??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

解决方案 »

  1.   

    If Time > "23:59:00" And Time < "8:00:00" Then
    ////////
    你这样判断当然不行 如:现在时间是1:10:00  那么1:10:00<8:00:00而1:10:00>23:59:00?
      

  2.   

    if time>="00:00:00" and time<"8:00:00" thenendif试试?
      

  3.   

    有两点,第一点是时间应该用 datediff 进行比较,第二点如果你的程序是在 nt 或以上运行的话请注意一下安全权限,因为 2k 不直接支持 ExitWindowsEx 这样的操作,得像“MSTOP(陈建华(东莞立晨企业资讯服务有限公司))”说的那样先提升安全级别。
      

  4.   

    If Time > "23:59:00" And Time < "8:00:00" Then
    '下面的程序永远不会被执行.
    '你能找得出一个时间值是大于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
      

  5.   

    //If Time > "23:59:00" And Time < "8:00:00" Then这么判断没有问题,至于没有成功关机,是没有获得关机的权限(在nt下关机需要关机的权限)
      

  6.   

    我在FORM中这样写的,可以报错说:Private Sub Form_Load()"变量未定义",程序如下:Option ExplicitDim uFlags As LongPrivate Sub Form_Load()
        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
      

  7.   

    我按 MSTOP(陈建华(东莞立晨企业资讯服务有限公司)) 说的办法写了遍,加上了时间段限制,可是又报上面的错了,请大侠们帮帮我, 谢谢,谢谢....
      

  8.   

    停止在"Timer1.Interval = 10000
    "上
      

  9.   

    查一下..TIMER1控件名有没有错误?还有.程序调整一下:'****************************
    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
      

  10.   

    以下程序可能会有所帮助
    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
      

  11.   

    现在是这段程序报错,在BAS文件中定义和MSTOP一样,但FORM文件就这几句就出问题了,请大家测一下,谢谢..Option ExplicitDim uFlags As LongPrivate 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