{{notification.text}}

MirGames

05.10.08 01:15
0
Как это можно сделать?Помогите или если не трудно пожалуйста дайте пример как это сделать желательно на Дельфи хотя и на Сях тож норм =)Зааранее спасибо=)
#1
аксакал
05.10.08 01:24
0
Код
ShellExecute(0, 'open', 'shutdown.exe', '-s -t 0', nil, SW_SHOWNORMAL);
Отредактировано: 05.10.08 01:44
#2
05.10.08 01:40
0
Функция DownWindows. На WinNT сперва нужно активировать привилегию SeShutdownPrivilege.
Код

unit PowerOff;

interface

uses
  Windows, AvL;

function LogOffWindows: boolean;
function PowerOffComputer: boolean;
function RebootComputer: boolean;
//function ShutdownComputer: boolean;

implementation

function DownWindows(Flags: UINT): boolean;
var
  TokenPriv: TTokenPrivileges;
  TokenHandle: THandle;
begin
  Result:=false;
  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
      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;
  Result:=ExitWindowsEx(Flags,0);
end;

function LogOffWindows: boolean;
begin
  Result:=DownWindows(EWX_LOGOFF);
end;

function PowerOffComputer: boolean;
begin
  if (GetVersion and $80000000)<>0
    then Result:=DownWindows(EWX_SHUTDOWN)
    else Result:=DownWindows(EWX_POWEROFF);
end;

function RebootComputer: boolean;
begin
  Result:=DownWindows(EWX_REBOOT);
end;

initialization
  GetWinVer;

end.

Не помню точно зачем там AvL, вроде только для проверки версии винды. Ее мона переписать на любой другой вариант - WinAPI, RTL, etc.
#3
05.10.08 01:50
0
Огромное спасибо=)))Очень благодарен=)

------
XProger Почему то твоя функция не дает результата...она выполняет конечно запуск программы...но эффекта нет =( А у Vga все пошло на ура=)
Отредактировано: 05.10.08 02:27
#4
05.10.08 14:33
0
Код
ExitWindowsEx(EWX_FORCE, 0); // улетаем со скоростью света
ExitWindowsEx(EWX_SHUTDOWN, 0); // спокойно с сохранением данных
#5
аксакал
05.10.08 17:15
0
Ignis
Код
ShellExecute(0, 'open', 'cmd.exe', 'shutdown -s -t 0', nil, SW_HIDE);
#6
05.10.08 20:03
0
mofo Я этот способ пробовал давно и результата почему то не дало....=)

XProger Спасибо=)Проверю и этот способ=)))

------
А и забыл сказать....Vga я написал без Avl и все работает...тож не понял зачем он там=)
Отредактировано: 05.10.08 20:06
#7
FrozenKing
08.10.08 23:09
0
Цитата

ExitWindowsEx(EWX_FORCE, 0); // улетаем со скоростью света
ExitWindowsEx(EWX_SHUTDOWN, 0); // спокойно с сохранением данных


Это функция для выхода из windows 9x. По идее сначала нужно опредилить ОС'ь, а потом соответсвующим результатом выключать комп. Если 9x, то функциями которые mofo написал, а если NT, то как Vga и XProger написал. Только используя метод XProger'а комп отрубиться быстро и без сохранения данных!
Отредактировано: 08.10.08 23:11
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}