定時開機要主板支持﹐并且要ATX電源才行﹐定時關機的軟件滿天飛了

解决方案 »

  1.   

    你要代码我写给你.
    前几天我还到处找,到处研究.
    =========================
    '放在任何一个模块中
    Option ExplicitDeclare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long'ExitWindowsEx的参数uflags,有四个对应值,分别是:
    Public Const EWX_LOGOFF = 0    '退出(注销)
    Public Const EWX_SHUTDOWN = 1  '关机
    Public Const EWX_REBOOT = 2    '重启动
    Public Const EWX_FORCE = 4     '强制关机,即不通知现在活动应用程序让其先自我关闭Public Const TOKEN_ADJUST_PRIVILEGES = &H20
    Public Const TOKEN_QUERY = &H8
    Public Const SE_PRIVILEGE_ENABLED = &H2
    Public Const ANYSIZE_ARRAY = 1Type LUID
        lowpart As Long
        highpart As Long
    End TypeType LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End TypeType TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End TypeDeclare Function GetCurrentProcess Lib "kernel32" () As Long
    Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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
    Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long'这个函数就是用于NT关机中使用的
    Sub AdjustTokenPrivilegesForNT()    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()
        AdjustTokenPrivilegesForNT  '在95/98中调用没作用,但为了和NT兼容,写上无妨
        ExitWindowsEx 13, 0 '这里将uFlgs换成以上Bas中所提到的四个参数之一即可
    End Sub
    ===================
    看见
    ExitWindowsEx 13, 0
    中的13没有?
    13是8+4+1的结果.
    再看看上面的
    Public Const EWX_LOGOFF = 0    '退出(注销)
    Public Const EWX_SHUTDOWN = 1  '关机
    Public Const EWX_REBOOT = 2    '重启动
    Public Const EWX_FORCE = 4     '强制关机,即不通知现在活动应用程序让其先自我关闭
    没有8的数值.其实8就是让电源关下来,没有8只能又一个提示你可以安全关机了.
    ========
    就这届用13保证没有问题.如果你要关机软件.
    我前些日子才写了一个.
    文件大小才 41K, VB编写的.
    地址是:
    http://www.myqr.com/myself/timer.exe
    ========
    祝好运.