Автоматическое завершение работы компьютера через VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Ребят, такое дело...: Пользователь, всё время, забывает выключать компьютер, после пользования, есть предложенье - осушествить завершение работы через Visual Basic, пытался написать сам, но Basic немного не моя стихия... Программный код нужен ИМЕННО! на Visual Basic обходить другими средами ненадо! Не могу понять как осуществить, через спящий режим или есть другие варианты? первый раз столкнулся с такой трудностью, вроде не сложно, но на практике почему-то не получается... Жду комментов, надеюсь, поможите

Решение задачи: «Автоматическое завершение работы компьютера через VB»

textual
Листинг программы
  1. ' Form
  2. ' - - - - - -
  3. ' Command1 – кнопка
  4. ' Command2 кнопка
  5. ' Command3 – кнопка
  6. ' Command4 кнопка
  7. ' - - - - - -
  8. ' Код формы
  9.  
  10. Private Const ANYSIZE_ARRAY = 1
  11. Private Type LUID
  12.   LowPart As Long
  13.   HighPart As Long
  14. End Type
  15. Private Type LUID_AND_ATTRIBUTES
  16.   pLuid As LUID
  17.   Attributes As Long
  18. End Type
  19. Private Type TOKEN_PRIVILEGES
  20.   PrivilegeCount As Long
  21.   Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
  22. End Type
  23. ' Reboot system code
  24. Private Enum eParam
  25.   EWX_LOGOFF = 0
  26.   EWX_SHUTDOWN = 1
  27.   EWX_REBOOT = 2
  28.   EWX_FORCE = 4
  29. End Enum
  30. Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
  31. Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  32. Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
  33. 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
  34. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  35.  
  36.  
  37. Private Function ShutdownEx(ByVal fParam As eParam) As Boolean
  38.   Dim Ret As Long
  39.   Dim hToken As Long
  40.   Dim Tkp As TOKEN_PRIVILEGES
  41.   Dim TkpOld As TOKEN_PRIVILEGES
  42.   Dim aOkReboot As Boolean
  43.   Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
  44.  
  45. ' Для перезагрузки и выключения в Windows XP требуется
  46. ' установка процессу привилегии "SeShutdownPrivilege",
  47. ' иначе попытка выполнения этих действий завершится не удачей.
  48. ' В Win 98 установка привилегии не требуется.
  49.  
  50.   If ((fParam And EWX_SHUTDOWN) = EWX_SHUTDOWN) Or ((fParam And EWX_REBOOT) = EWX_REBOOT) Then
  51.     If OpenProcessToken(GetCurrentProcess(), 32 Or 8, hToken) Then
  52.       Ret = LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, Tkp.Privileges(0).pLuid)
  53.       Tkp.PrivilegeCount = 1
  54.       Tkp.Privileges(0).Attributes = 2
  55.       aOkReboot = AdjustTokenPrivileges(hToken, 0, Tkp, LenB(TkpOld), TkpOld, Ret)
  56.     End If
  57.   End If
  58.  
  59.   ShutdownEx = (ExitWindowsEx(fParam, 0) <> 0)
  60. End Function
  61.  
  62. Private Sub Command1_Click()
  63.   ShutdownEx EWX_LOGOFF
  64. End Sub
  65.  
  66. Private Sub Command2_Click()
  67.   ShutdownEx EWX_SHUTDOWN
  68. End Sub
  69.  
  70. Private Sub Command3_Click()
  71.   ShutdownEx EWX_REBOOT
  72. End Sub
  73.  
  74. Private Sub Command4_Click()
  75. ' Флаг EWX_FORCE для более "жёсткого" завершения
  76. ' работающих программ. Если флаг EWX_FORCE не используется,
  77. ' то программы, требующие сохранения ваших работ в них,
  78. ' выдают сообщения "Сохранить, не сохранить, отмена", и
  79. ' если кликнуть "отмена", то такая программа вполне может
  80. ' остановить завершение сеанса (выключение, перезагрузку),
  81. ' а если вас не устраивает такое обстоятельство и Вы хотите
  82. ' потерять все не сохранённые данные, то можете передавать
  83. ' и флаг EWX_FORCE.
  84.  
  85. ' Примеры:
  86.  
  87. ' ShutdownEx EWX_LOGOFF or EWX_FORCE
  88. ' ShutdownEx EWX_SHUTDOWN or EWX_FORCE
  89. ' ShutdownEx EWX_REBOOT or EWX_FORCE
  90. End Sub
  91.  
  92. Private Sub Form_Load()
  93.   Command1.Caption = "Завершение сеанса"
  94.   Command2.Caption = "Выключение компьютера"
  95.   Command3.Caption = "Перезагрузка компьютера"
  96.   Command4.Caption = "Флаг EWX_LOGOFF"
  97. End Sub

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


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

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

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы