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

Вниз

Перезагрузка с принудительным закрытием всех приложений   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
3-1131438547
XGarik
2005-11-08 11:29
2005.12.25
Вложенный DataSet


1-1131357368
Bogdan1024
2005-11-07 12:56
2005.12.25
взять хэндл комбобокса?


9-1122456076
Дед с Морковкой
2005-07-27 13:21
2005.12.25
Формат рисунка dds.


4-1130276882
ВАсилий
2005-10-26 01:48
2005.12.25
Form Hide


2-1133636186
ZeFiR
2005-12-03 21:56
2005.12.25
Как определить наличие файла на диске?