Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вырубание компа [D7, WinXP]


gyry ©   (2004-04-25 14:41:00) 

Привет МАСТЕРА DEPLHI!!! Трабл маленький. Пишу

 
  ShellExecute(Application.Handle,
  Pchar('Open'),
  Pchar('C:\Windows\System32\Rundll32.exe'),
  Pchar('user,exitwindows'),
  Pchar('C:\Windows\System32'),
  SW_SHOWNORMAL);
 


А в ответ: "Ошибка при загрузке User. Не найден указанный модуль."
Может кто нить знает другие примеры выключения компа.


antip   (2004-04-26 09:52:00) [1]

выключение компа под NT требует прав администратора...

const
 SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

function NTSetPrivilege(const Privilege: string; bEnabled: Boolean = True): Boolean;
var
 hToken: THandle;
 TokenPriv: TOKEN_PRIVILEGES;
 PrevTokenPriv: TOKEN_PRIVILEGES;
 ReturnLength: Cardinal;
begin
 Result := True;
 // Only for Windows NT/2000/XP and later.
 if not (Win32Platform = VER_PLATFORM_WIN32_NT) then Exit;

 // obtain the processes token
 if OpenProcessToken(GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
 begin
   try
     // Get the locally unique identifier (LUID) .
     if LookupPrivilegeValue(nil, PChar(Privilege),
       TokenPriv.Privileges[0].Luid) then
     begin
       TokenPriv.PrivilegeCount := 1; // one privilege to set

       case bEnabled of
         True:  TokenPriv.Privileges[0].Attributes  := SE_PRIVILEGE_ENABLED;
         False: TokenPriv.Privileges[0].Attributes := 0;
       end;

       ReturnLength  := 0; // replaces a var parameter
       PrevTokenPriv := TokenPriv;

       // enable or disable the privilege
       AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv),
         PrevTokenPriv, ReturnLength);
     end;
   finally
     CloseHandle(hToken);
   end;
 end;
 // test the return value of AdjustTokenPrivileges.
 Result := GetLastError = ERROR_SUCCESS;
 if not Result then
   RaiseLastOSError;
end;

procedure SystemShutdown;
begin
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   if NTSetPrivilege(SE_SHUTDOWN_NAME) then
     if not ExitWindowsEx(EWX_SHUTDOWN, 0) then
       RaiseLastOSError;
 end else
   ExitWindowsEx(EWX_SHUTDOWN, 0);
end;


evvcom   (2004-04-26 08:15:00) [2]

Скромный ник...
Вместо Pchar('Open') можно писать просто 'Open' и т.д.


Darmen   (2004-04-25 19:29:00) [3]

Слюшай сюда.
Данный код должен работать:
Win32Check(ExitWindowsEx(EWX_SHUTDOWN,0));
Если что-то не так, пиши мне на
darmen_tubik@rambler.ru


Наверх

Титульная страница Поиск, карта сайта Написать письмо