Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
185 / 36 / 3
Регистрация: 28.05.2015
Сообщений: 149

Почему не всегда срабатывает ExitWindowsEx?

04.08.2017, 11:39. Показов 2406. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот пример применения API-функции:

Visual Basic
1
Call ExitWindowsEx(EWX_SHUTDOWN, &H0)
, где:
EWX_SHUTDOWN = &H1&

Если функция выполняется в коде, то максимум что она делает - завершает все приложения. Пробовал изменить параметры:

Visual Basic
1
Call ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN, &H0)
, где
EWX_FORCE = &H4&
Это тоже не помогло. Только сеанс завершался и всё. Программа запускается от имени Администратора.

Замечу, что если в IDE в Immediate-окне ввести строку: Call ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN, &H0), то API-функция сработает, но в контексте приложения - нет.

Пока что единственный выход нашёлся в использовании программы Shutdown.exe, которая входит в комплект поставки Windows.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2017, 11:39
Ответы с готовыми решениями:

Почему не всегда срабатывает set_error_handler ?
Добрых суток! У меня не всегда срабатывает функция прописанная в set_error_handler(). set_error_handler("err"); ...

Условие всегда срабатывает
Здравствуйте! У меня как бы два вопроса в одном сразу) В php идет проверка на логин пароль $logins = $_POST; $pas = $_POST; if...

404 не всегда срабатывает
Здравствуйте. Страницы ошибок у меня расписаны (.htaccess): ErrorDocument 400 /error.php?p=400 ErrorDocument 401 /error.php?p=401 ...

3
193 / 191 / 31
Регистрация: 11.10.2016
Сообщений: 610
04.08.2017, 13:09
посмотрите еще другие варианты выключения компьютера в этом топике
Выключение компьютера
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
04.08.2017, 13:45
Лучший ответ Сообщение было отмечено CharlyChaplin как решение

Решение

Цитата Сообщение от CharlyChaplin Посмотреть сообщение
Это тоже не помогло.
Не выключает потому, что вызывающий процесс должен иметь привилегию SE_SHUTDOWN_NAME.
Она необходима для выключения компьютера и обычно используется с функцией ExitWindows[Ex]. Суть привилегии состоит в том, чтобы не давать пользователю выключать компьютер, на котором функционируют (в виде системных служб) важные серверные компоненты. При простом завершении сеанса пользователя (флаг EWX_LOGOFF) привилегия не проверяется.

Она используется также с функциями:

AbortSystemShutdown
InitiateSystemShutdown[Ex]
SetSystemPowerState

Привилегию необходимо включать явно.

примерчик с привилегиями:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Option Explicit
 
    Private Type LUID
       UsedPart As Long
       IgnoredForNowHigh32BitPart As Long
    End Type
 
    Private Type TOKEN_PRIVILEGES
      PrivilegeCount As Long
      TheLuid As LUID
      Attributes As Long
    End Type
    
    Private Const EWX_LogOff As Long = 0
    Private Const EWX_SHUTDOWN As Long = 1
    Private Const EWX_FORCE As Long = 4
    Private Const EWX_REBOOT = 2
 
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal _
         dwOptions As Long, ByVal dwReserved As Long) As Long
 
    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 Sub AdjustToken()
 
    '********************************************************************
    '* This procedure sets the proper privileges to allow a log off or a
    '* shut down to occur under Windows NT.
    '********************************************************************
 
        Const TOKEN_ADJUST_PRIVILEGES = &H20
        Const TOKEN_QUERY = &H8
        Const SE_PRIVILEGE_ENABLED = &H2
        Dim hdlProcessHandle As Long
        Dim hdlTokenHandle As Long
        Dim tmpLuid As LUID
        Dim tkp As TOKEN_PRIVILEGES
        Dim tkpNewButIgnored As TOKEN_PRIVILEGES
        Dim lBufferNeeded As Long
        'Use the GetCurrentProcess function to set the hdlProcessHandle
        'variable.
        hdlProcessHandle = GetCurrentProcess()
        OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
            TOKEN_QUERY), hdlTokenHandle
 
        ' Get the LUID for shutdown privilege.
        LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
 
        tkp.PrivilegeCount = 1    ' One privilege to set
        tkp.TheLuid = tmpLuid
        tkp.Attributes = SE_PRIVILEGE_ENABLED
 
        ' Enable the shutdown privilege in the access token of this process.
        AdjustTokenPrivileges hdlTokenHandle, False, _
            tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
    End Sub
 
    Private Sub cmdLogoff_Click()
        ExitWindowsEx (EWX_LogOff), &HFFFF
    End Sub
 
    Private Sub cmdForceLogoff_Click()
        ExitWindowsEx (EWX_LogOff Or EWX_FORCE), &HFFFF
    End Sub
 
    Private Sub cmdShutdown_Click()
        AdjustToken
        ExitWindowsEx (EWX_SHUTDOWN), &HFFFF
    End Sub
 
    Private Sub cmdForceShutdown_Click()
        AdjustToken
        ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
    End Sub
2
185 / 36 / 3
Регистрация: 28.05.2015
Сообщений: 149
04.08.2017, 16:06  [ТС]
Ещё небольшой вопросик про использование оператора Call для вызова функции. Я привык к нему, да и код лучше читается. Он не влияет на производительность или ещё на что-либо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2017, 16:06
Помогаю со студенческими работами здесь

Не всегда срабатывает функция
Добрый день. есть пару сайтов, для которых подключен один JS, на каждом сайте есть кнопка "Вверх" для скроллинга, на...

.onclick не всегда срабатывает
есть код, который создаёт тег <img> к нему я привязывают .onclick img.onclick = myFunction; function myFunction() { ...

Не всегда срабатывает ajax
Доброго времени суток. Делаю сайт по нахождению оптимального пути по алгоритму Дейкстры.. При записи на сервер возникает проблема, что...

Не всегда срабатывает обработчик событий
Есть у меня класс (пусть будет C1), который наследуется от TImage У него есть 3 указателя на объекты класса, которые наследуется от...

Не всегда срабатывает кнопка на геймпаде
Срабатывает только если сильно нажать. Пробовал протирать уайт спиритом, тёр ластиком обе стороны, не помогает .Что ещё можно сделать,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru