Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Как выключить компьютер на OS Windows XP? Добавлено: 21.07.05 16:33  

Автор вопроса:  X@nt'ER

Ответить

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

Номер ответа: 16
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #16
Добавлено: 26.02.06 01:15
код брется, WMI отключена у меня :P

Ответить

Номер ответа: 17
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #17 Добавлено: 26.02.06 22:51
Ну, это понято
А на АПИ? :)

Ответить

Номер ответа: 18
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #18
Добавлено: 26.02.06 23:36
А на АПИ не долго и найти по ExitWindowsEx + AdjustTokenPrivileges

Ответить

Номер ответа: 19
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #19
Добавлено: 01.03.06 22:14
бери, все для тебя (тока на net сам переводи):
(Предыдущий мой способ работает безопаснее, поетому на net не перевел)

Option Explicit

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved 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 GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) 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 GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function SetSystemPowerState Lib "kernel32.dll" (ByVal fSuspend As Long, ByVal fForce As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'
Private Type OSVERSIONINFO               ' Версия os
    dwOSVersionInfoSize         As Long
    dwMajorVersion              As Long
    dwMinorVersion              As Long
    dwBuildNumber               As Long
    dwPlatformId                As Long
    szCSDVersion                As String * 128
End Type
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 Const EWX_SHUTDOWN      As Long = &H1&
 Private Const EWX_REBOOT        As Long = &H2&
 Private Const EWX_FORCE         As Long = &H4&
 Private Const EWX_POWEROFF      As Long = &H8&
 Private iMonEvent As Long

Private Declare Function SHShutDownDialog Lib "Shell32" Alias "#60" (ByVal YourGuess As Long) As Long

Private Const WM_SYSCOMMAND = &H112&
Private Const SC_MONITORPOWER = &HF170&

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long

Private Function OS_Version() As OSVERSIONINFO
    OS_Version.dwOSVersionInfoSize = Len(OS_Version)
    Call GetVersionEx(OS_Version)
End Function

Private Sub AdjustToken(sPrivilege As String)'Получение привелегий
 Dim hdlTokenHandle As Long, lBufferNeeded As Long
 Dim tkp As TOKEN_PRIVILEGES, tkpNewButIgnored As TOKEN_PRIVILEGES
    Call OpenProcessToken(ByVal GetCurrentProcess(), (&H20 Or &H8), hdlTokenHandle)
    Call LookupPrivilegeValue(vbNullString, sPrivilege, tkp.TheLuid)
    tkp.PrivilegeCount = &H1
    tkp.Attributes = &H2
    Call AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)
End Sub
Private Sub Suspend(bHibirnate As Boolean)
    If OS_Version.dwPlatformId = &H2 Then Call AdjustToken("SeShutdownPrivilege";)
    Call SetSystemPowerState(IIf(bHibirnate, False, True), True)
End Sub

Public Sub ShutDown() 'выключить
    If OS_Version.dwPlatformId = &H2 Then Call AdjustToken("SeShutdownPrivilege";)
    Call ExitWindowsEx(EWX_SHUTDOWN Or EWX_POWEROFF Or EWX_FORCE, 1&;)
End Sub
Public Sub ReStart() ' 'перезагрузить
    If OS_Version.dwPlatformId = &H2 Then Call AdjustToken("SeShutdownPrivilege";)
    Call ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, 1&;)
End Sub
Public Sub LogOff() 'Выход из системы
    Call ExitWindowsEx(&H0, &H0)
End Sub
            
Public Sub ShowShutDown()
    SHShutDownDialog 0
End Sub

Public Function WindowsVersion() As Long
    WindowsVersion = OS_Version.dwPlatformId
End Function

Public Sub MonitorOff() ' выключить монитор
    Call SendMessage(GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, 2&;)
End Sub
Public Sub MonitorNormal()
    ' экономичный режим
    Dim m As Long
    m = SendMessage(GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, -1&;)
End Sub
Public Sub EconomicMode()
    Call SendMessage(GetForegroundWindow, WM_SYSCOMMAND, SC_MONITORPOWER, 1&;)
End Sub

Ответить

Страница: 1 | 2 |

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



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