Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.014 c
2-1134140971
Groof
2005-12-09 18:09
2005.12.25
Шаблон vector..


14-1133039450
Алекскндр
2005-11-27 00:10
2005.12.25
Книги по Delphi - Посоветуйте


2-1133966544
Dead.MorozZ
2005-12-07 17:42
2005.12.25
Как устанавливать компоненты


14-1133295820
Shopot
2005-11-29 23:23
2005.12.25
Где достать компоненты для работы с Com портом?


2-1134145546
FormJonh
2005-12-09 19:25
2005.12.25
Запуск процедуры в другом unit^е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский