Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
1

Как выключить{Перезагрузить} Комп из VBA?

17.02.2010, 20:30. Просмотров 1448. Ответов 3
Метки нет (Все метки)

Скажите, если не сложно, как выключить{Перезагрузить} Комп из VBA
Желательно пример и возможность найти подобную Info самому.
Thank for All
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2010, 20:30
Ответы с готовыми решениями:

Как выключить и перезагрузить компьютер в Windows 7?
Есть коды для XP, чтобы выключать и перезагружать компьютер. А как это сделать в 7 Windows? Dim...

Как включить/выключить/перезагрузить компьютер на Network?
Kak vkluchit'' , vikluchit'' and Restart computer na Network? Zaranie spasibo. irina

Как програмно выключить комп
КАК?

Как выключить комп по истечению времени?
Как выключить комп по истечению времени?

3
Messir
17.02.2010, 20:51 2
Итак, в модуле пишем:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Private Const EWX_SHUTDOWN = 1
Private Const EWX_FORCE = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Type LUID
    LowPart As Long
    HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type
Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
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 ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
 
Private Sub EnableShutDown()
    Dim hProc As Long
    Dim hToken As Long
    Dim mLUID As LUID
    Dim mPriv As TOKEN_PRIVILEGES
    Dim mNewPriv As TOKEN_PRIVILEGES
    hProc = GetCurrentProcess()
    OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
    LookupPrivilegeValue '', 'SeShutdownPrivilege', mLUID
    mPriv.PrivilegeCount = 1
    mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    mPriv.Privileges(0).pLuid = mLUID
    AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub
Public Sub ShutDown(Force As Boolean)
    Dim Flags As Long
    Flags = EWX_SHUTDOWN
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub
Теперь можно из любого места вызывать ShutDown. Параметр Force отвечает за то, что будет предпочтительней - корректность убиения процессов (типа, сохранение файлов там и все такое) илии скорость завершения работы. Этот код работает под любой системой. Если же достаточно только под 9х, то тогда кода будет гораздо меньше:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_SHUTDOWN = 1
Private Const EWX_FORCE = 4
 
Public Sub ShutDown(Force As Boolean)
    Dim Flags As Long
    Flags = EWX_SHUTDOWN
    If Force Then Flags = Flags + EWX_FORCE
    ExitWindowsEx Flags, 0
End Sub
Messir
17.02.2010, 20:54 3
А перезагрузить - соответственно EWX_REBOOT вместо EWX_SHUTDOWN

Private Const EWX_REBOOT = 2
wish
21.02.2010, 15:23 4
У меня не получается.
Экспереминтировал,экспереминтировал но нет успеха.
Может *.dll надо присобачить!?
Подскажите.
p/s/ Нашёл код который выгружает Windows, но не выключает комп.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2010, 15:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выключить удаленный комп по сети
пытаюсь выключить удаленный комп по сети с помошью функции shell и команды Windows shutdown:...

Перезагрузить или выключить комп
Как выключить или перезагрузить комп в С++?

Как программно перезагрузить или выключить телефон?
У меня Nokia E52 ( Symbian 9.3) Python for Symbian 1.4.5 Final ---------------------- Питоном...

Не могу перезагрузить и выключить компьютер
Привет всем! Нужна помощь. Никак не могу перезагрузить и выключить компьютер. У меня стоит Chip...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.