Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выключение компа  (Прочитано 10067 раз)
0 Пользователей и 1 Гость смотрят эту тему.
cooler
Участник

ru
Offline Offline
Пол: Мужской

« : 21-04-2004 05:54 » 

Как отловить момент завершения работы ПК ?
Записан
Roman123
Гость
« Ответ #1 : 21-04-2004 07:11 » new

Цитата: cooler
Как отловить момент завершения работы ПК ?


Приходит сообщение WM_QUERYENDSESSION с lParam==0
Записан
cooler
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 21-04-2004 08:25 » 

Спасибо Улыбаюсь
Записан
MAG
Гость
« Ответ #3 : 22-04-2004 05:37 » 

Тогда вот ещё один вопрос! или задача Улыбаюсь
Всегда хотел напмсать сам написать прогу выключения компа или по таймеру или по заданному времени! хелп пожалуйста
Пишу я обычно проги вот на Билдере Ага))
Записан
Roman123
Гость
« Ответ #4 : 22-04-2004 07:52 » 

Цитата: MAG
Тогда вот ещё один вопрос! или задача Улыбаюсь
Всегда хотел напмсать сам написать прогу выключения компа или по таймеру или по заданному времени! хелп пожалуйста
Пишу я обычно проги вот на Билдере Ага))


Используй ф-цию ExitWindowsEx с флагом EWX_SHUTDOWN|EWX_POWEROFF. Но процес выключения может быть прерван какой нибуть програмой. Т.е. после этого надо подождать какое-то время, и если прога всё ещё жива, т.е. выключения не было вызвать эту же функцию добавив флажёк EWX_FORCE.

Только для того чтоб выключить комп нужно быть админом либо иметь право выключать комп (Подробней см. доки по ExitWindowsEx)
Записан
Eka$o
Гость
« Ответ #5 : 23-04-2004 06:44 » 

В 98 винде функция ExitWindowsEx работает всегда нормально, а в НТ, 2000 надо по другому.... Там используется функция AdjustTokenPrivileges для получения или запрещения привилегий указанных в access token
Записан
Daniloff
Помогающий

ru
Offline Offline

« Ответ #6 : 23-04-2004 08:05 » 

Вот кусочек кода для удаленной перезагрузки NT/2k/XP, поменяв название привилегии можно и выключить...
Код:
HANDLE her;
TOKEN_PRIVILEGES bok,prev;
int     RetLen;

i=MessageBox(NULL,"Убить его?","УРА!",MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1);
if(i!=IDNO)
{
 i=OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&her);
 i=GetLastError();
 i=LookupPrivilegeValue(NULL, "SeRemoteShutdownPrivilege",&(bok.Privileges[0].Luid));
 prev=bok;
 bok.PrivilegeCount= 1; // one privilege to set
 bok.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
 i=AdjustTokenPrivileges(her, FALSE, &bok, sizeof(prev),&prev, (PDWORD)&RetLen);
 i=InitiateSystemShutdown(client,"Досвиданья!",3,TRUE,TRUE);
 MessageBox(NULL,"Убили негра, убили...","Ай-яй-яй!",MB_OK);
}
« Последнее редактирование: 25-11-2007 17:24 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines