Форум: "Система";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизПерезагрузка Найти похожие ветки
← →
DimaK (2003-08-06 13:26) [0]У меня два вопроса:
1) Как понять что было выбрано, перезагрузка компа или его
выключение.
2) В Win9x пишу так ExitWindowsEx(EWX_Reboot, 0);
( date">да и воопще
на 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c