Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

Перезагрузка   Найти похожие ветки 

 
DimaK ©   (2003-08-06 13:26) [0]

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

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

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

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

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


 
clickmaker ©   (2003-08-06 13:41) [1]

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


 
Anatoly Podgoretsky ©   (2003-08-06 14:30) [2]

WM_QUERYENDSESSION


 
DimaK ©   (2003-08-06 17:02) [3]

Хорошо.

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

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

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

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


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

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

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


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

Вот Вам пример, который перезагрузит Ваш комп, если он на ядре НТ:
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;


 
DimaK ©   (2003-08-07 13:01) [6]

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

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


 
VMcL ©   (2003-08-07 13:18) [7]

>DimaK © (07.08.03 13:01)

uses Windows ?


 
DimaK ©   (2003-08-07 13:42) [8]

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


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

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


 
DimaK ©   (2003-08-08 13:01) [10]

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


 
DimaK ©   (2003-08-08 16:12) [11]

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


 
VMcL ©   (2003-08-09 02:25) [12]

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


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

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


 
Prov ©   (2003-08-20 09:50) [14]

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

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.: А лучше мне на мыло написать, если не получиться(вдруг, врядли и т.д. и т.п..)


 
mitur ©   (2003-08-20 10:11) [15]

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


 
DimaK ©   (2003-08-20 13:07) [16]

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.10.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
3-98516
Брат
2003-10-09 09:11
2003.10.30
Ошибка в OnCalcFields


3-98439
Gawk
2003-10-10 12:10
2003.10.30
Как в DBGrid сделать сортировку по клику на названию колонки


3-98466
k_len
2003-10-10 06:55
2003.10.30
Одинаковые записи


1-98672
Гость из далека
2003-10-20 22:31
2003.10.30
Конвертация из RTF в String


1-98713
Undo
2003-10-20 07:55
2003.10.30
Сипплекс метод