Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Выключение компьютера в WindowsXP Добавлено: 29.10.02 20:07  

Автор вопроса:  Андрей Никитин | ICQ: 325172082 
Как в WindowsXP программно выключить компьютер (ExitWindowsEx(...) почему-то не работает)?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #1
Добавлено: 30.10.02 21:16

Я сам пробовал -- не получилось не перезагружается и не выключается, поэтому помочь не могу.

Но если найдёшь, скинешь мне на ящик?: zeus_kerch@rambler.ru OK?

Ответить

Номер ответа: 2
Автор ответа:
 Злaя_



Вопросов: 1
Ответов: 8
 Web-сайт: microsoft.com
 Профиль | | #2
Добавлено: 31.10.02 06:54

Кстати и у меня не получилось его так выключить. Видимо связано с тем что процесс пытающийся завершить работу виндозы, она (виндоза) должна считать своим родным (системным).

Ответить

Номер ответа: 3
Автор ответа:
 Zeus



ICQ: 161801353 

Вопросов: 63
Ответов: 220
 Web-сайт: apirussia.by.ru
 Профиль | | #3
Добавлено: 31.10.02 19:22

Знаешь, возможно системы-NT (win NT & XP) запрещют подобные приколы... Хотя Autoshutdown выключать умеет комп.

Ответить

Номер ответа: 4
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #4 Добавлено: 02.11.02 15:32

Ответ нашел на сайте www.vb2themax.com за что им отдельно спасибо. Итак (перевел как смог :)):

Private Type LUID
   LowPart As Long
   HighPart As Long
End Type
Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    LuidUDT As LUID
   Attributes As Long
End Type
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

Private Declare Function GetVersion Lib "kernel32" () As Long
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 Any, ReturnLength As Any) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long

Sub ShutDownWindows(ByVal Reboot As Boolean, Optional ByVal Force As Boolean)
    Dim hToken As Long
    Dim tp As TOKEN_PRIVILEGES
    Dim flags As Long
   
    'Windows NT/2000/XP требует специального подтверждения того,
    'что вызывающий процесс имеет право на выключение или перезагрузку компьютера
    If GetVersion() >= 0 Then
        'Открываем процесс для установки нужных привилегий
        OpenProcessToken GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hToken
       
        'Устанавливаем необходимые привилегии процесса
        LookupPrivilegeValue "", "SeShutdownPrivilege", tp.LuidUDT
        tp.PrivilegeCount = 1
        tp.Attributes = SE_PRIVILEGE_ENABLED
        AdjustTokenPrivileges hToken, False, tp, 0, ByVal 0&, ByVal 0&
    End If
   
    'Подготовка к выключению
    flags = EWX_SHUTDOWN
    If Reboot Then flags = flags Or EWX_REBOOT
    If Force Then flags = flags Or EWX_FORCE
   
    'Выключение или перезагрузка компа
    ExitWindowsEx flags, &HFFFF
   
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам