Страница: 1 |
Скажите кто нибудь! Как вырубить/перезагрузить комп на Вин ХР??? Весь инет облазил, скачал много примеров, но ничего не помогает. Он делает мне только LogOff (ExitWindowsEX), а выключаться или перезагружаться не хочет ... помогите!!!!!!
поищи по форуму, точно было (и не раз.) сейчас не скажу тут у меня ни одного исходника под рукой нет), но поиск по форуму с ключевым словом "перезагрузить" всё тебе найдёт. Держи! У меня работает Win2kSP3 Текст Модуля, все работает через параметры командной строки Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare Function GetVersionEx _ Public Declare Function ExitWindowsEx _ 'The LookupPrivilegeValue function retrieves the locally unique 'The AdjustTokenPrivileges function enables or disables privileges Private Declare Function GetLastError Lib "kernel32" () As Long Private Declare Sub SetLastError _ Private Type LARGE_INTEGER Private Type LUID Private Type LUID_AND_ATTRIBUTES Private Type TOKEN_PRIVILEGES Private Type OSVERSIONINFO Private Const ERROR_SUCCESS = 0& Public Const EWX_LOGOFF = 0 Public Function OsType() Public Sub ShutdownWindows(Action) Private Sub AdjustToken() '******************************************************************** 'Set the error code of the last thread to zero using the 'Используем GetCurrentProcess функцию для заполнения hdlProcessHandle Не влезло ) Продолжение OpenProcessToken hdlProcessHandle, _ If GetLastError <> 0 Then 'Áåðåì LUID äëÿ óñòàíîâåëíèÿ ïðèâåëåãèè If GetLastError <> 0 Then tkp.PrivilegeCount = 1 ' Ñòàâèì òîëüêî îäíó ïðèâåëåãèþ 'Ïðîñòàâëÿåì íàøåìó ïðîöåññó ïðèâåëåãèþ íà âûêëþ÷åíèå êîìïüþòåðà If GetLastError <> 0 Then End Sub '-= SUB MAIN =- Зачем такой большой код??? Вот тока сейчас придумал, все работает... 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 Вот забыл... Использование: shutdown [-i|-l|-s|-r|-a][-f][-m\\ -l Выход (не совместим с -m) -s Завершение работы компьютера -r Перезагрузка компьютера и т.д. Полный список функций можно увидеть: Пуск-Программы-Стандартные-Командная строка, где набрать shutdown Так еще проще Страница: 1 |
Вопрос: ВЫКЛЮЧЕНИЕ!!!
Добавлено: 10.11.03 20:46
Автор вопроса: Creator
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Justas
ICQ: 259418212
Вопросов: 24
Ответов: 325
Web-сайт:
Профиль | | #1
Добавлено: 11.11.03 03:08
Номер ответа: 2
Автор ответа:
Unguided
Вопросов: 7
Ответов: 19
Профиль | | #2
Добавлено: 11.11.03 03:13
Lib "kernel32" Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetComputerNameA _
Lib "kernel32" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
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
'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
'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
Lib "kernel32" _
(ByVal dwErrCode As Long)
Private Declare Function SetSystemPowerState _
Lib "kernel32" _
(ByVal fSuspend As Long, _
ByVal fForce As Long) As Long
lowpart As Long
highpart As Long
End Type
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
TheLuid As LUID
Attributes As Long
End Type
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const ANYSIZE_ARRAY = 1
Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Private Const SE_PRIVILEGE_ENABLED = &H2
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
Dim info As OSVERSIONINFO
info.dwOSVersionInfoSize = Len(info)
GetVersionEx info
OsType = info.dwPlatformId
End Function
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
'* Сия процедура даст программе привелегию на выключение и ребут
'* компа под 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
'SetLast Error function. Do this so that the GetLastError
'function does not return a value other than zero for no
'apparent reason.
'Лень переводить и так все ясно
SetLastError 0
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
(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
MsgBox "OpenProcessToken error==" & GetLastError
End If
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
MsgBox "LookupPrivilegeValue error==" & GetLastError
End If
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges hdlTokenHandle, _
False, _
tkp, _
Len(tkpNewButIgnored), _
tkpNewButIgnored, _
lBufferNeeded
MsgBox "AdjustTokenPrivileges error==" & GetLastError
End If
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-сайт:
Профиль | | #4
Добавлено: 12.11.03 13:28
Номер ответа: 5
Автор ответа:
freeloader
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #5
Добавлено: 12.11.03 13:32
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 12.11.03 16:01
А не проще так?
Shell("shutdown -s", AppWinStyle.normalFocus)
Номер ответа: 7
Автор ответа:
freeloader
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #7
Добавлено: 13.11.03 08:19