Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перезагрузка


DimaK ©   (2003-08-06 13:26:00) 

У меня два вопроса:

1) Как понять что было выбрано, перезагрузка компа или его
выключение.

2) В Win9x пишу так ExitWindowsEx(EWX_Reboot, 0);
( да и воопще
на NT ядре
)

У меня два вопроса:

1) Как понять что было выбрано, перезагрузка компа или его
выключение.

2) В Win9x пишу так ExitWindowsEx(EWX_Reboot, 0);
Все нормально, машина перезагружается, но в XP (да и воопще
на NT ядре) это не работает. Может кто знает как сделать на
NT ядре перезагрузку?


Prov   (2003-08-20 17:15:00) [1]

Значит, можно определить......
Я точно не помню, но при мне такое делали. Короче говоря, поройся немножко в параметрах TWMQueryEndSession и TWMEndSession..

Должен найти...


DimaK   (2003-08-20 13:07:00) [2]

Значит нельзя определить?


mitur   (2003-08-20 10:11:00) [3]

Не совсем в тему, но всё же.
Я уже задавал этот вопрос, но почему-то никто не ответил.
Как заставить Win2k/Xp/NT перейти в спящий режим?
Я смторел UBPFD, функцию NTSleep by DeMon-777. Он использует
SetSystemPowerState(true,true);
но машина в ответ просто ничего не делает!


Prov   (2003-08-20 09:50:00) [4]

Хочешь, чтобы выключаться ??? Пожалуйста...:::

procedure Reboot;
var Dummy, Priv: TTokenPrivileges; TH: Cardinal; LUID: TLargeInteger; RL: Cardinal; Text: PChar; TextLen: integer;
Begin
TextLen:= GetWindowTextLength(hEdit);
GetMem(Text, TextLen + 1);
GetWindowText(hEdit, Text, TextLen + 1);
OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS or TOKEN_QUERY, TH);
LookUpPrivilegeValue(nil, "SESHUTDOWNPRIVILEGE", LUID);
Priv.PrivilegeCount:= 1;
Priv.Privileges[0].Luid:= LUID;
Priv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TH,
false,
Priv,
SizeOf(Priv),
Dummy,
RL);
ExitWindowsEx(EWX_FORCE + EWX_POWEROFF);
End;


А ишо кто-то там мне доказывал, что нельзя под НТ вырубить питание компьютера.... ххххааааааааа !!!

P.S.: А лучше мне на мыло написать, если не получиться(вдруг, врядли и т.д. и т.п..)


DimaK   (2003-08-19 13:25:00) [5]

Разобрался, перезагружается (или выключается, смотря что задам), но получается как-то не красиво, говоришь машине выключиться, а она перезагружается. Может всетаки у кого-нибуть есть способ определить выключение или перезагрузка?


VMcL   (2003-08-09 02:25:00) [6]

F1 - там всё написано (серьёзно - это я не издеваюсь:)


DimaK   (2003-08-08 16:12:00) [7]

Что тоже идей нет?


DimaK   (2003-08-08 13:01:00) [8]

[Error] UMain.pas(200): Ambiguous overloaded call to "AdjustTokenPrivileges"


VMcL   (2003-08-07 20:08:00) [9]

Провидцев здесь нет! Как именно ругается?


DimaK   (2003-08-07 13:42:00) [10]

Естественно, uses как и положено!


VMcL   (2003-08-07 13:18:00) [11]

>DimaK © (07.08.03 13:01)

uses Windows?


DimaK   (2003-08-07 13:01:00) [12]

Блин, тупость.

Создаю форму - пишу последний текст - все нормально, компилируется, перезагружается.
Пишу текст к себе в прогу - при компиляшии ругается на
AdjustTokenPrivileges. Что за хрень?


Prov   (2003-08-07 10:13:00) [13]

Вот Вам пример, который перезагрузит Ваш комп, если он на ядре НТ:
procedure Reboot;
var Dummy, Priv: TTokenPrivileges; TH: Cardinal; LUID: TLargeInteger; RL: Cardinal; Text: PChar; TextLen: integer;
Begin
TextLen:= GetWindowTextLength(hEdit);
GetMem(Text, TextLen + 1);
GetWindowText(hEdit, Text, TextLen + 1);
OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS or TOKEN_QUERY, TH);
LookUpPrivilegeValue(nil, "SESHUTDOWNPRIVILEGE", LUID);
Priv.PrivilegeCount:= 1;
Priv.Privileges[0].Luid:= LUID;
Priv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TH,
false,
Priv,
SizeOf(Priv),
Dummy,
RL);
InitiateSystemShutDown("",
("Быренько позакрывать все программы - тачка вырубается" + #13 + #13 + "Prov©2003™"),
ConvertToInt(Text),
true,
false);
End;


clickmaker   (2003-08-06 19:14:00) [14]

procedure TFMain.WMQueryEndSession(var Message:
TWMQueryEndSession);
begin
Message.Result := 1;
end;

А вообще-то, если не определен обработчик WM_QueryEndSession, то винда по умолчанию считает, что прога готова закрыться. Так что, если твоя программа когда загружена блокирует перезагрузку или выключение винды, дело в коде. Проверь, не остается ли у тебя работающих потоков при закрытии программы.


DimaK   (2003-08-06 17:02:00) [15]

Хорошо.

Дело в том, что моя программа когда загружена блокирует перезагрузку или выключение винды.

Пишу так:
procedure TFMain.WMQueryEndSession(var Message:
TWMQueryEndSession);
begin
inherited;
// Message:=1;
FMain.Close;
end;

В FAQ написано что если Message возвратит число не равное нулю, то приложение как бы будет готово к закрытию. Ставил любое число - бесполезно.

Когда написал FMain.Close - то при завершении работы винды
прога выгружается, но винда остается работать.
Что делать?


Anatoly Podgoretsky   (2003-08-06 14:30:00) [16]

WM_QUERYENDSESSION


clickmaker   (2003-08-06 13:41:00) [17]

1) Никак
2) В FAQ есть


Наверх

Титульная страница Поиск, карта сайта Написать письмо