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

Вниз

Завершение работы Виндовс   Найти похожие ветки 

 
~GaMeRd~ ©   (2003-12-11 20:35) [0]

Очередной привет и очередной старый, как мир, вопрос.
Как осуществить выключение, спячку, вобщеи весь комплект?
Знаю, знаю, стар вопрос.
Просто нужно четко знать, отличие между осуществлением функций в разных виндах (ХР, 98). Плюс как вызвать Завершение сеанса?

Пасиба


 
Aleksey ©   (2003-12-12 06:12) [1]

unit WinReboot;

{ Usage:

1. Drop TWinReboot component on a form.
2. Call WinReboot1.WinExit(flags)

Where flags must be one of the following:

EWX_LOGOFF - Shuts down processes and logs user off
EWX_REBOOT - Shuts down the restarts the system
EWX_SHUTDOWN - Shuts down system

The following attributes may be combined (OR"d) with above flags

EWX_POWEROFF - shuts down system and turns off the power.
EWX_FORCE - forces processes to terminate.

Example:
WinReboot1.WinExit(EWX_REBOOT or EWX_FORCE);
}

interface

uses
Windows, Classes;

type
TWinReboot = class(TComponent)
private
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
public
function WinExit(flags: integer): boolean;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("My Components", [TWinReboot]);
end;

function TWinReboot.SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);

tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;

dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;

function TWinReboot.WinExit(flags: integer): boolean;
begin
Result := True;
SetPrivilege("SeShutdownPrivilege", true);
if not ExitWindowsEx(flags, 0) then
Result := False;
SetPrivilege("SeShutdownPrivilege", False);
end;

end.

Работает как под 9x так и под XP



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
1-93838
For
2004-02-15 21:27
2004.02.29
Когда много форм


14-94141
ИМХО
2004-02-05 00:55
2004.02.29
---|Ветка была без названия|---


8-94040
Junior
2003-10-25 13:43
2004.02.29
Построение графика динамически


14-94155
4i
2004-02-06 23:11
2004.02.29
MyDoom


7-94207
Aleksey
2003-12-12 06:20
2004.02.29
Shell в