Модератор: Sebas
Какая каша у тебя в голове...
Лучше бы все действительно повылетало, тогда хотя бы был шанс наполнить ее полезной информацией.
Если чего-то не знаешь, просто спроси. Не выдвигай собственные предположения и домыслы, которые у знающих людей вызывают лишь неконтролируемое сползание под стул.DKbelRoma писал(а):Хватит обижать . Уже противно читать. Вроде у вас, когда вы начинали, таких вопросов небыло?
DKbelRoma писал(а):Пишу программу и немогу найти файлы, которые касаются работы системы. Я имею ввиду - выключить, перезагрузить и т.д.
Я помню только фаил logoff.exe, а другие из головы повылетали.
Помогите пожалуйста вспомнить остальные.
DKbelRoma писал(а):Saturn.65 - ваще хочется самому дойти.ПРосто хотел узнать название файлов, а потом в программе их через Shell открыть и указать путь например "%SystemRoot%\system32\название файла.exe". Я же правильно думаю???
Как выключить или перезагрузить компьютер, как завершить сеанс пользователя
В Windows 98,95 всё делается очень просто: вызывается WinAPI функция ExitWindowsEx и больше ничего. А вот в Windows XP перед её вызовом процессу нужно получить специальную привилегию, иначе вызов функции завершается неудачей. Это касается перезагрузки и выключения, для завершения только сеанса никаких привилегий не требуется.
' Form
' - - - - - -
' Command1 – кнопка
' Command2 – кнопка
' Command3 – кнопка
' Command4 – кнопка
' - - - - - -
' Код формы
Private Const ANYSIZE_ARRAY = 1
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
' Reboot system code
Private Enum eParam
EWX_LOGOFF = 0
EWX_SHUTDOWN = 1
EWX_REBOOT = 2
EWX_FORCE = 4
End Enum
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved 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 Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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 Function ShutdownEx(ByVal fParam As eParam) As Boolean
Dim Ret As Long
Dim hToken As Long
Dim Tkp As TOKEN_PRIVILEGES
Dim TkpOld As TOKEN_PRIVILEGES
Dim aOkReboot As Boolean
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
' Для перезагрузки и выключения в Windows XP требуется
' установка процессу привилегии "SeShutdownPrivilege",
' иначе попытка выполнения этих действий завершится не удачей.
' В Win 98 установка привилегии не требуется.
If ((fParam And EWX_SHUTDOWN) = EWX_SHUTDOWN) Or ((fParam And EWX_REBOOT) = EWX_REBOOT) Then
If OpenProcessToken(GetCurrentProcess(), 32 Or 8, hToken) Then
Ret = LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, Tkp.Privileges(0).pLuid)
Tkp.PrivilegeCount = 1
Tkp.Privileges(0).Attributes = 2
aOkReboot = AdjustTokenPrivileges(hToken, 0, Tkp, LenB(TkpOld), TkpOld, Ret)
End If
End If
ShutdownEx = (ExitWindowsEx(fParam, 0) <> 0)
End Function
Private Sub Command1_Click()
ShutdownEx EWX_LOGOFF
End Sub
Private Sub Command2_Click()
ShutdownEx EWX_SHUTDOWN
End Sub
Private Sub Command3_Click()
ShutdownEx EWX_REBOOT
End Sub
Private Sub Command4_Click()
' Флаг EWX_FORCE для более "жёсткого" завершения
' работающих программ. Если флаг EWX_FORCE не используется,
' то программы, требующие сохранения ваших работ в них,
' выдают сообщения "Сохранить, не сохранить, отмена", и
' если кликнуть "отмена", то такая программа вполне может
' остановить завершение сеанса (выключение, перезагрузку),
' а если вас не устраивает такое обстоятельство и Вы хотите
' потерять все не сохранённые данные, то можете передавать
' и флаг EWX_FORCE.
' Примеры:
' ShutdownEx EWX_LOGOFF or EWX_FORCE
' ShutdownEx EWX_SHUTDOWN or EWX_FORCE
' ShutdownEx EWX_REBOOT or EWX_FORCE
End Sub
Private Sub Form_Load()
Command1.Caption = "Завершение сеанса"
Command2.Caption = "Выключение компьютера"
Command3.Caption = "Перезагрузка компьютера"
Command4.Caption = "Флаг EWX_LOGOFF"
End Sub
Dim strComputer As String
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate, _
(Shutdown)}!\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery( _
"Select * from Win32_OperatingSystem")
For Each ObjOperatingSystem In colOperatingSystems
ObjOperatingSystem.Reboot ' Для перезагрузки
Next
и…
Dim strComputer As String
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate,(Shutdown)}!\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery( _
"Select * from Win32_OperatingSystem")
For Each ObjOperatingSystem In colOperatingSystems
ObjOperatingSystem.ShutDown 'Для выключения
Next
DKbelRoma писал(а):В коде столько неизвестных мне команд, что глаза на лоб лезут
Private Sub Command1_Click()
Shell "rundll32.exe url.dll,FileProtocolHandler regedit.exe"
End Sub
Saturn.65 писал(а):А выключить комп командой Shell "Выключить_комп.exe" нельзя.
Watts[]n! писал(а):Saturn.65 писал(а):А выключить комп командой Shell "Выключить_комп.exe" нельзя.
Я выключал. Причем одним из файлов, которые ищет DKbelRoma.
А зачем код для запуска RegEdit?[/url]
Вернуться в Windows (администрирование)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6