Страница: 1 |
Страница: 1 |
Вопрос: Выключение компьютера
Добавлено: 21.02.06 18:41
Автор вопроса: Yeputons | ICQ: 278444762
Как насильно вырубить комп?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 21.02.06 18:58
ExitWindowsEx + EWX_FORCE
Номер ответа: 2
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #2
Добавлено: 21.02.06 19:55
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Function REBOOT()
Dim r As Long
r = ExitWindowsEx(EWX_REBOOT, 0)
End Function
Function SHUTDOWN()
Dim r As Long
r = ExitWindowsEx(EWX_SHUTDOWN, 0)
End Function
Private Sub Command1_Click()
REBOOT
'Перезагрузка
End Sub
Private Sub Command2_Click()
SHUTDOWN
'Выключение
End Sub
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 21.02.06 19:58
Private Sub Form_Load()
Set a = GetObject("WINMGMTS:{impersonationLevel=impersonate, (Shutdown)}!\\.\root\cimv2"
Set colOperatingSystems = a.ExecQuery("Select * from Win32_OperatingSystem"
For Each ObjOperatingSystem In colOperatingSystems
'ObjOperatingSystem.reboot
ObjOperatingSystem.shutdown
Next
End Sub
Номер ответа: 4
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #4
Добавлено: 22.02.06 10:34
Раньше пробовал подключить SHELL32.DLL, так там была функция ShutDownComputer.
Номер ответа: 5
Автор ответа:
SerJ
Вопросов: 24
Ответов: 332
Профиль | | #5
Добавлено: 22.02.06 12:28
Номер ответа: 6
Автор ответа:
Kostik
Вопросов: 6
Ответов: 27
Профиль | | #6
Добавлено: 08.03.06 19:59
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Пример:
Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN, 0
'Выключит компьютер. Второй параметр в ф-ции игнорируется
End Sub
Номер ответа: 7
Автор ответа:
Kostik
Вопросов: 6
Ответов: 27
Профиль | | #7
Добавлено: 08.03.06 20:02
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Пример:
Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN, 0
'Выключит компьютер. Второй параметр в ф-ции игнорируется
End Sub
Номер ответа: 8
Автор ответа:
Kostik
Вопросов: 6
Ответов: 27
Профиль | | #8
Добавлено: 08.03.06 20:02
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Пример:
Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN, 0
'Выключит компьютер. Второй параметр в ф-ции игнорируется
End Sub
Номер ответа: 9
Автор ответа:
Vit
Вопросов: 68
Ответов: 62
Web-сайт:
Профиль | | #9
Добавлено: 08.03.06 20:29
Когда-то у меня были такая же необходимость. Вот код.
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () 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 SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const ERROR_SUCCESS = 0&
Private Enum WinPlaform
VER_PLATFORM_WIN32s = 0
VER_PLATFORM_WIN32_WINDOWS = 1
VER_PLATFORM_WIN32_NT = 2
End Enum
Private Enum ExitWindow
EWX_LOGOFF = &H0& ' завершение сеанса пользователя
EWX_SHUTDOWN = &H1& ' шатдаун компьютера
EWX_REBOOT = &H2& ' перезагрузка компьютера
EWX_POWEROFF = &H8& ' выключение компьютера (ATX)
EWX_FORCE = &H4& ' флаг принудительного выполнения операции
EWX_FORCEIFHUNG = &H10& ' флаг принудительного выполнения при зависании
End Enum
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 WinPlaform
szCSDVersion As String * 128
End Type
Public Enum BACKTYPE
BT_PLATFORM_ID = 0
BT_MAJOR_VERSION = 1
BT_FULL_INFO = 2
End Enum
Private Function OsVersion(ByVal Back As BACKTYPE) As String
Dim info As OSVERSIONINFO
info.dwOSVersionInfoSize = Len(info)
GetVersionEx info
If Back = BT_PLATFORM_ID Then
OsVersion = CInt(info.dwPlatformId)
ElseIf Back = BT_FULL_INFO Then
Select Case info.dwPlatformId
Case 0
OsVersion = ""
Case 1
OsVersion = "Windows 9x" & " v" & info.dwMajorVersion & "."
OsVersion = OsVersion & info.dwMinorVersion & " Build "
OsVersion = OsVersion & info.dwBuildNumber
Case 2
OsVersion = "Windows NT" & " v" & info.dwMajorVersion & "."
OsVersion = OsVersion & info.dwMinorVersion & " Build "
OsVersion = OsVersion & info.dwBuildNumber
End Select
ElseIf Back = BT_MAJOR_VERSION Then
OsVersion = info.dwMajorVersion
End If
End Function
Public Function Shutdown(Optional Force As Boolean = False, Optional ForceIfHung As Boolean = False) As Boolean
Select Case OsVersion(BT_PLATFORM_ID)
Case Is = VER_PLATFORM_WIN32s
Shutdown = False
Case Is = VER_PLATFORM_WIN32_WINDOWS
ExitWindowsEx EWX_SHUTDOWN Or IIf(Force, EWX_FORCE, 0) Or IIf(ForceIfHung, EWX_FORCEIFHUNG, 0), 0&
Shutdown = True
Case Is = VER_PLATFORM_WIN32_NT
AdjustToken
ExitWindowsEx EWX_SHUTDOWN Or EWX_POWEROFF Or IIf(Force, EWX_FORCE, 0) Or IIf(ForceIfHung, EWX_FORCEIFHUNG, 0), 0
Shutdown = True
End Select
End Function
Private Function AdjustToken() As Long
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim lBufferNeeded As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
LookupPrivilegeValue "", SE_SHUTDOWN_NAME, tmpLuid
tkp.PrivilegeCount = 1
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
End Function
Номер ответа: 10
Автор ответа:
Vit
Вопросов: 68
Ответов: 62
Web-сайт:
Профиль | | #10
Добавлено: 08.03.06 20:30
Забыл сказать: AdjustToken() для получение разрешения от системы на манипулирование питанием под NT системами.