![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вырубание компа [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