Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизПерезагрузка с принудительным закрытием всех приложений Найти похожие ветки
← →
MAXHO © (2005-12-08 09:33) [0]Здравствуйте.
Есть приложение написаное а Делфи и в нем запрещено закрытие формы (CanClose := False). При попытки перезагрузки компа прога не закрываеться и комп остается включеным. Подскажите код программы для принудительной перезагрузки и выключения компа (только чтоб небыло надписи "Теперь питание компьютера можно отключить" в WindowsXP)
← →
tesseract © (2005-12-08 09:58) [1]
> Есть приложение написаное а Делфи и в нем запрещено закрытие
> формы (CanClose := False).
А приложение не может перехватывать WM_ENDSESSION WM_QUERYENDSESSION?
Тогда убиваемся :
ExitWindowsEx(ewx_reboot or ewx_force, SHTDN_REASON_MAJOR_HARDWARE);
← →
stone © (2005-12-08 10:00) [2]
> Подскажите код программы для принудительной перезагрузки
> и выключения компа
http://web.avtosklad.info/psites/ovainsh/Downloads/Programms/Miscellaneous/AutoShut_source.zip
здесь выключение
> только чтоб небыло надписи "Теперь питание компьютера можно
> отключить" в WindowsXP
Это аппаратная проблема, в частности отсутствeт или выключено ACPI.
← →
MAXHO © (2005-12-08 10:14) [3]tesseract
[Error] Unit1.pas(28): Undeclared identifier: "SHTDN_REASON_MAJOR_HARDWARE"
← →
kami © (2005-12-08 10:19) [4]
function TForm1.GrantShutdownAccess: Boolean;
var
hToken: THandle;
lpVersionInformation: TOSVersionInfo;
tkp: TTokenPrivileges;
RetLen: DWORD;
PreviousState: TTokenPrivileges;
begin
lpVersionInformation.dwOSVersionInfoSize:=SizeOf (lpVersionInformation);
Result:=GetVersionEx (lpVersionInformation);
if not Result then
Exit;
if (lpVersionInformation.dwPlatformId = VER_PLATFORM_WIN32_NT) then
begin
if not OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, hToken) then
begin
Result:=False;
Exit;
end;
Result:=LookupPrivilegeValue (nil, "SeShutdownPrivilege",
tkp.Privileges[0].Luid);
if not Result then
Exit;
PreviousState:=tkp;
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not (AdjustTokenPrivileges (hToken, False, tkp, SizeOf (PreviousState),
PreviousState, RetLen)) then
begin
Result:=False;
Exit;
end;
end;
Result:=True;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
if GrantShutdownAccess then
ExitWindowsEx(EWX_POWEROFF or EWX_FORCEIFHUNG,0);
// EWX_LOGOFF - завершение текущего сеанса
// EWX_POWEROFF - выключение питания
// EWX_REBOOT - перезагрузка
// EWX_SHUTDOWN - выключение компа
// дополнительные флаги
// EWX_FORCEIFHUNG - быстрое завершение "зависших" процессов
// EWX_FORCE - быстрое завершение всех процессов
end;
ЗЫ. Нехорошо это, так завершать всё, приложения могут просто не сохранить свои данные, и потом будет "больно и обидно за бесцельно прожитые годы" ((с) чье-то). Может, стоит пересмотреть это приложение, да и убрать нафиг CanClose:=False?
← →
MAXHO © (2005-12-08 10:27) [5]stone
Не закрывает форму...
← →
HF-Trade © (2005-12-08 10:27) [6]procedure PowerOff(Flags: UINT);
var
tokenPriv: TTokenPrivileges;
tokenHandle: THandle;
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) and
((Flags and (EWX_POWEROFF or EWX_REBOOT or EWX_SHUTDOWN)) <> 0) then
begin
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,
TokenHandle) then begin
if LookupPrivilegeValue(nil,"SeShutdownPrivilege",
TokenPriv.Privileges[0].LUID) then
begin
TokenPriv.PrivilegeCount:=1;
TokenPriv.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(TokenHandle,false,TokenPriv,0,
TTokenPrivileges(nil^),DWORD(nil^)) then exit;
end;
end;
end;
ExitWindowsEx(Flags, 0);
end;
......
//Флаги -
EWX_POWEROFF
EWX_REBOOT
EWX_ShutDown
//Выключение
PowerOff(EWX_ShutDown);
← →
MAXHO © (2005-12-08 10:33) [7]kami
Не убиваеться процесс :(
← →
MAXHO © (2005-12-08 10:39) [8]Ниодин метод не помогает форма не закрывается.
Блин похоже придеться переписывать код и убирать CanClose. Тогда такой вопрос, как еще можно запретить закрытие формы юзером?
← →
HF-Trade © (2005-12-08 10:41) [9]Убери кнопку - закрыть:)
Что это за приложение то такое?:)
← →
MAXHO © (2005-12-08 10:43) [10]Это шелл для клуба, там вообще никаких кнопок нету :)
← →
HF-Trade © (2005-12-08 10:44) [11]Если кнопок нету как его закрыть тоды? ;)
← →
MAXHO © (2005-12-08 10:46) [12]Alt+F4 например
← →
kami © (2005-12-08 11:48) [13]MAXHO © (08.12.05 10:46) [12]
попробуй поставить ExitWindowsEx(EWX_POWEROFF or EWX_FORCE,0)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c