Автоматическое завершение работы компьютера через 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы