На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: SCINER, B.V.
  
    > Как выключить компьютер программно , LogOff\Reboot\ShutDown
      Ладно, вот вам из закромов мегамодуль, который вырубает (и др.) тачку под любыми Виндами. У кого не заработает - выкидывайте компьютер.
      ExpandedWrap disabled
        Private Const EWX_LOGOFF = 0
        Private Const EWX_SHUTDOWN = 1
        Private Const EWX_REBOOT = 2
        Private Const EWX_FORCE = 4
        Private Const EWX_OFF = 8 'Вот флаг!
        Private Const TOKEN_ADJUST_PRIVILEGES = &H20
        Private Const TOKEN_QUERY = &H8
        Private Const SE_PRIVILEGE_ENABLED = &H2
        Private Const ANYSIZE_ARRAY = 1
        Private Const VER_PLATFORM_WIN32_NT = 2
        Type OSVERSIONINFO
            dwOSVersionInfoSize As Long
            dwMajorVersion As Long
            dwMinorVersion As Long
            dwBuildNumber As Long
            dwPlatformId As Long
            szCSDVersion As String * 128
        End Type
        Type LUID
            LowPart As Long
            HighPart As Long
        End Type
        Type LUID_AND_ATTRIBUTES
            pLuid As LUID
            Attributes As Long
        End Type
        Type TOKEN_PRIVILEGES
            PrivilegeCount As Long
            Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
        End Type
        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
        Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
        Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
         
        Public Function IsWinNT() As Boolean
            Dim myOS As OSVERSIONINFO
            myOS.dwOSVersionInfoSize = Len(myOS)
            GetVersionEx myOS
            IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
        End Function
         
        Private Sub EnableShutDown()
            Dim hProc As Long
            Dim hToken As Long
            Dim mLUID As LUID
            Dim mPriv As TOKEN_PRIVILEGES
            Dim mNewPriv As TOKEN_PRIVILEGES
            hProc = GetCurrentProcess()
            OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
            LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
            mPriv.PrivilegeCount = 1
            mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
            mPriv.Privileges(0).pLuid = mLUID
            ' enable shutdown privilege for the current application
            AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
        End Sub
         
        Public Sub ShutDownNT(Force As Boolean)
            Dim ret As Long
            Dim Flags As Long
            Flags = EWX_SHUTDOWN
            If Force Then Flags = Flags + EWX_FORCE
            If IsWinNT Then EnableShutDown
            ExitWindowsEx Flags Or EWX_OFF, 0
        End Sub
         
        Public Sub RebootNT(Force As Boolean)
            Dim ret As Long
            Dim Flags As Long
            Flags = EWX_REBOOT
            If Force Then Flags = Flags + EWX_FORCE
            If IsWinNT Then EnableShutDown
            ExitWindowsEx Flags, 0
        End Sub
         
        Public Sub LogOffNT(Force As Boolean)
            Dim ret As Long
            Dim Flags As Long
            Flags = EWX_LOGOFF
            If Force Then Flags = Flags + EWX_FORCE
            ExitWindowsEx Flags, 0
        End Sub

      Ну и вызывается это дело так:
      ExpandedWrap disabled
        LogOffNT True
        RebootNT True
        ShutDownNT True
        Попробуйте плиз вот этот модуль.
        Он у меня всегда работал.

        Это сообщение было перенесено сюда или объединено из темы "Не выключается компьютер"
        Прикреплённый файлПрикреплённый файл (2.46 Кбайт, скачиваний: 278)
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0495 ]   [ 16 queries used ]   [ Generated: 27.04.24, 18:04 GMT ]