Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: ВЫКЛЮЧЕНИЕ!!! Добавлено: 10.11.03 20:46  

Автор вопроса:  Creator

Скажите кто нибудь! Как вырубить/перезагрузить комп на Вин ХР???

Весь инет облазил, скачал много примеров, но ничего не помогает. Он делает мне только LogOff (ExitWindowsEX), а выключаться или перезагружаться не хочет ... помогите!!!!!!

Ответить

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

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



ICQ: 259418212 

Вопросов: 24
Ответов: 325
 Web-сайт: justas.newmail.ru
 Профиль | | #1
Добавлено: 11.11.03 03:08

поищи по форуму, точно было (и не раз.)

сейчас не скажу ;(тут у меня ни одного исходника под рукой нет), но поиск по форуму с ключевым словом "перезагрузить" всё тебе найдёт.

Ответить

Номер ответа: 2
Автор ответа:
 Unguided



Вопросов: 7
Ответов: 19
 Профиль | | #2 Добавлено: 11.11.03 03:13

Держи! У меня работает :) Win2kSP3

Текст Модуля, все работает через параметры командной строки :)

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Declare Function GetVersionEx _
        Lib "kernel32" Alias "GetVersionExA" _
        (lpVersionInformation As OSVERSIONINFO) As Long
       
Private Declare Function GetComputerNameA _
        Lib "kernel32" _
        (ByVal lpBuffer As String, _
         nSize As Long) As Long

Public Declare Function ExitWindowsEx _
       Lib "user32" _
       (ByVal uFlags As Long, _
        ByVal dwReserved As Long) As Long
'The OpenProcessToken function opens the access token associated with
'a process.
Private Declare Function OpenProcessToken _
        Lib "advapi32" _
        (ByVal ProcessHandle As Long, _
         ByVal DesiredAccess As Long, _
         TokenHandle As Long) As Long

'The LookupPrivilegeValue function retrieves the locally unique
'identifier (LUID) used on a specified system to locally represent
'the specified privilege name.
Private Declare Function LookupPrivilegeValue _
        Lib "advapi32" Alias "LookupPrivilegeValueA" _
         (ByVal lpSystemName As String, _
          ByVal lpName As String, _
          lpLuid As LUID) As Long

'The AdjustTokenPrivileges function enables or disables privileges
'in the specified access token. Enabling or disabling privileges
'in an access token requires TOKEN_ADJUST_PRIVILEGES access.
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 GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function GetLastError Lib "kernel32" () As Long

Private Declare Sub SetLastError _
        Lib "kernel32" _
        (ByVal dwErrCode As Long)
       
Private Declare Function SetSystemPowerState _
        Lib "kernel32" _
        (ByVal fSuspend As Long, _
         ByVal fForce As Long) As Long

Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type

Private Type LUID
    UsedPart As Long
    IgnoredForNowHigh32BitPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
    TheLuid As LUID
    Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    TheLuid As LUID
    Attributes As Long
End Type

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private Const ERROR_SUCCESS = 0&
Private Const ANYSIZE_ARRAY = 1
Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Private Const SE_PRIVILEGE_ENABLED = &H2

Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const VER_PLATFORM_WIN32s = 0
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2

Public Function OsType()
    Dim info As OSVERSIONINFO
    info.dwOSVersionInfoSize = Len(info)
    GetVersionEx info
    OsType = info.dwPlatformId
End Function

Public Sub ShutdownWindows(Action)
    Select Case OsType
        Case Is = VER_PLATFORM_WIN32s
            MsgBox "Unknown OS"
        Case Is = VER_PLATFORM_WIN32_WINDOWS
            ExitWindowsEx Action, 0&
        Case Is = VER_PLATFORM_WIN32_NT
            AdjustToken
            ExitWindowsEx Action, 0
    End Select
End Sub

Private Sub AdjustToken()

'********************************************************************
'* Сия процедура даст программе привелегию на выключение и ребут
'* компа под Windows NT
'********************************************************************
        
  Const TOKEN_ADJUST_PRIVILEGES = &H20
  Const TOKEN_QUERY = &H8
        
  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

'Set the error code of the last thread to zero using the
'SetLast Error function. Do this so that the GetLastError
'function does not return a value other than zero for no
'apparent reason.
'Лень переводить и так все ясно
  SetLastError 0

'Используем GetCurrentProcess функцию для заполнения hdlProcessHandle
  hdlProcessHandle = GetCurrentProcess()
        
  If GetLastError &l

Ответить

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



Вопросов: 7
Ответов: 19
 Профиль | | #3 Добавлено: 11.11.03 03:16

Не влезло :)) Продолжение

 

        
  If GetLastError <> 0 Then
    MsgBox "GetCurrentProcess error==" & GetLastError
  End If

  OpenProcessToken hdlProcessHandle, _
  (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle

  If GetLastError <> 0 Then
    MsgBox "OpenProcessToken error==" & GetLastError
  End If

'Áåðåì LUID äëÿ óñòàíîâåëíèÿ ïðèâåëåãèè
  LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid

  If GetLastError <> 0 Then
    MsgBox "LookupPrivilegeValue error==" & GetLastError
  End If

  tkp.PrivilegeCount = 1    ' Ñòàâèì òîëüêî îäíó ïðèâåëåãèþ
  tkp.TheLuid = tmpLuid
  tkp.Attributes = SE_PRIVILEGE_ENABLED

'Ïðîñòàâëÿåì íàøåìó ïðîöåññó ïðèâåëåãèþ íà âûêëþ÷åíèå êîìïüþòåðà
  AdjustTokenPrivileges hdlTokenHandle, _
                        False, _
                        tkp, _
                        Len(tkpNewButIgnored), _
                        tkpNewButIgnored, _
                        lBufferNeeded

  If GetLastError <> 0 Then
    MsgBox "AdjustTokenPrivileges error==" & GetLastError
  End If

End Sub

'-= SUB MAIN =-
Private Sub Main()
Dim Cmd As String
    Cmd = Trim(UCase(Command))
    Select Case Cmd
'Ñîçäàé ÿðëûê ê åõåøíèêó
'è â êà÷åñòâå ïàðàìåòðîâ èñïîëüçåóì ñëåäóþùåå
        Case "/LO"
            Call ShutdownWindows(EWX_LOGOFF)
        Case "/FO"
            Call ShutdownWindows(EWX_FORCE)
        Case "/RE"
            Call ShutdownWindows(EWX_REBOOT)
        Case "/SH"
            Call ShutdownWindows(EWX_SHUTDOWN)
        Case Else
            End
    End Select
   
End Sub
 

Ответить

Номер ответа: 4
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #4
Добавлено: 12.11.03 13:28

Зачем такой большой код???

Вот тока сейчас придумал, все работает...

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Shell("C:\WINDOWS\system32\cmd.exe", AppWinStyle.normalFocus)

SendKeys.SendWait("shutdown -s")

SendKeys.SendWait("{enter}")

End Sub

Ответить

Номер ответа: 5
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #5
Добавлено: 12.11.03 13:32

Вот забыл...

Использование: shutdown [-i|-l|-s|-r|-a][-f][-m\\] [-t xx] [-c "commentary"][-d up:xx:yy]

-l Выход (не совместим с -m)

-s Завершение работы компьютера

-r Перезагрузка компьютера и т.д.

Полный список функций можно увидеть: Пуск-Программы-Стандартные-Командная строка, где набрать shutdown

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 12.11.03 16:01
А не проще так?

Shell("shutdown -s", AppWinStyle.normalFocus)

Ответить

Номер ответа: 7
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #7
Добавлено: 13.11.03 08:19

Так еще проще

Ответить

Страница: 1 |

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



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