Автоматическое завершение работы компьютера через VB
Формулировка задачи:
Доброго времени суток! Ребят, такое дело...:
Пользователь, всё время, забывает выключать компьютер, после пользования, есть предложенье - осушествить завершение работы через Visual Basic, пытался написать сам, но Basic немного не моя стихия...
Программный код нужен ИМЕННО! на Visual Basic обходить другими средами ненадо!
Не могу понять как осуществить, через спящий режим или есть другие варианты? первый раз столкнулся с такой трудностью, вроде не сложно, но на практике почему-то не получается...
Жду комментов, надеюсь, поможите
Решение задачи: «Автоматическое завершение работы компьютера через VB»
textual
Листинг программы
' 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д