Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не выключается комп

3.0K
08 февраля 2004 года
DrDee
11 / / 19.07.2003
Проблема:

Софтовое выключение компа не работает с запущенной прогой, скомпилированной в BC++B 5.0.

Windows при таком выключении должна сама завершить все процессы и благополучно отключить компьютер. Завершение процессов останавливается после того, как завершается процесс самой программы... после этого не работает не PWR BUTTON, не START -> SHUTDOWN...


Среда:

WinXP Pro (w\o SP)

В приложении использованы стандартные компоненты BCB : Timer, NMHTTP, TrayIcon.

В чем проблема?
Заранее благодарен)
3.1K
08 февраля 2004 года
man
38 / / 17.10.2003
просто обнови систему, если с прогой не мудрил может поможет
3.0K
08 февраля 2004 года
DrDee
11 / / 19.07.2003
Цитата:
Originally posted by man
просто обнови систему, если с прогой не мудрил может поможет




=) Не поможет, пробовал на нескольких машинах, на всех та же фигня. Да и чета не очень то хочется в РИДМИ к моему МикроБлокноту писать что-то вроде этого:

QuickNotes 1.0
System requirements: WinXP SP1 (crtical)

=)

2.6K
09 февраля 2004 года
Hearse
89 / / 19.01.2004
Может это поможет
Код:
HANDLE hProcess=NULL;
    HANDLE hToken=NULL;
    TOKEN_PRIVILEGES tkp;

    hProcess=GetCurrentProcess();
    OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount=1;
    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
   
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
   
    if (GetLastError() != ERROR_SUCCESS)
        MessageBox(NULL, "AdjustTokenPrivileges enable failed.", "Error", MB_OK);

   
    ExitWindowsEx(EWX_POWEROFF, EWX_FORCE);
415
10 февраля 2004 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by DrDee
Завершение процессов останавливается после того, как завершается процесс самой программы...



Недавно я написал утилиту для выключения компа по таймеру.
Чтобы твой процесс завершался в последнюю очередь, впиши где угодно до запуска shutdown такую строчку:

[color=blue]SetProcessShutdownParameters(256, SHUTDOWN_NORETRY)[/color]

Я наткнулся на эту функцию нечаянно, когда копался на MSDN. Она сделает так, чтобы твоя програма завершалась последней среди других обычных программ. А системные сервисы и драйверы будут выгружены уже позже.

Сделай как советует Hearse.
Правда все строчки предложенного им кода, кроме самой последней, нужны только для WinNT/2000/XP. На Win9x/ME выскочит MessageBox, и выполнение программы остановится пока не будет нажата кнопка [OK]. Имей это ввиду, если пишешь под Win9x. Можно обойтись и без MessageBox'а. (Кстати, ShowMessage() отличается от MessageBox() тем, что не останавливает программу).

Теперь насчет последней строчки кода Hearse.
Тут он ошибся. Он имел ввиду вот это:
[color=blue]ExitWindowsEx(EWX_POWEROFF|EWX_FORCE, 0);
[/color]


Но я рекомендовал бы сначала выполнить
[color=blue]ExitWindowsEx(EWX_POWEROFF, 0);[/color]
а потом, через минуту, выполнить EWX_POWEROFF|EWX_FORCE.
Почему? EWX_POWEROFF|EWX_FORCE просто тупо закрывает все приложения, и теоретически может случиться так, что кто-нибудь из программ потеряет свои несохраненные данные.

2.6K
10 февраля 2004 года
Hearse
89 / / 19.01.2004
Цитата:
Originally posted by SLA

Теперь насчет последней строчки кода Hearse.
Тут он ошибся. Он имел ввиду вот это:
ExitWindowsEx(EWX_POWEROFF|EWX_FORC
E, 0);


Сорри, действительно:{

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог