Code:

function IsWorkstationLocked: Boolean;

var

hDesktop: HDESK;

begin

Result := False;

hDesktop := OpenDesktop('default',

   0, False,

   DESKTOP_SWITCHDESKTOP);

if hDesktop <> 0 then

begin

   Result := not SwitchDesktop(hDesktop);

   CloseDesktop(hDesktop);

end;

end;

 

  

Code:

SendMessage (FindWindow ('Progman', 'Program Manager'), WM_CLOSE, 0, 0);

 

 

Code:

uses

Registry;

...

procedure TForm1.Button1Click(Sender: TObject);

var

a: TRegistry;

begin

a := TRegistry.create;

with a do

begin

   RootKey := HKEY_CURRENT_USER;

   OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', true);

   WriteInteger('NoClose', 1);

   CloseKey;

   Free;

end;

end;

 

 

  

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

SysPowerStatus: TSystemPowerStatus;

begin

GetSystemPowerStatus(SysPowerStatus);

if Boolean(SysPowerStatus.ACLineStatus) then

begin

   ShowMessage('System running on AC.');

end

else

begin

   ShowMessage('System running on battery.');

   ShowMessage(Format('Battery power left: %d percent.', [SysPowerStatus.BatteryLifePercent]));

end;

end;

 

 

Code:

{ **** UBPFD *********** by ****

>> Переход в ждущий режим под WinNT

 Зависимости: Windows

Автор:       DeMoN-777, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., Санкт-Петербург

***************************************************** }

 

procedure NTWait;

var

hToken: THandle;

tkp: TTokenPrivileges;

ReturnLength: Cardinal;

begin

if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or

   TOKEN_QUERY, hToken) then

begin

   LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);

   tkp.PrivilegeCount := 1;

   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

   if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then

     SetSystemPowerState(true, true);

end;

end;

 

Если текст в Memo1 был изменен, то программа не разрешает завершения сеанса Windows.

 

Code:

function HibernateAllowed: Boolean;

type

TIsPwrHibernateAllowed = function: Boolean;

stdcall;

var

hPowrprof: HMODULE;

IsPwrHibernateAllowed: TIsPwrHibernateAllowed;

begin

Result := False;

if IsNT4Or95 then Exit;

hPowrprof := LoadLibrary('powrprof.dll');

if hPowrprof <> 0 then

begin

   try

     @IsPwrHibernateAllowed := GetProcAddress(hPowrprof, 'IsPwrHibernateAllowed');

     if @IsPwrHibernateAllowed <> nil then

     begin

       Result := IsPwrHibernateAllowed;

     end;

   finally

     FreeLibrary(hPowrprof);

   end;

end;

end;

Как правило, приложение не требуется получать уведомления при переключении сеанса происходить. Тем не менее, если приложение должно быть в курсе, когда его рабочий стол

течение, оно может зарегистрировать для уведомлений переключателя сеанса. Приложения, которые доступ к последовательному порту или другому общему ресурсу на компьютере должен

Проверьте на это. Для регистрации уведомления используйте следующую функцию:

 

Code:

function SuspendAllowed: Boolean;

type

TIsPwrSuspendAllowed = function: Boolean;

stdcall;

var

hPowrprof: HMODULE;

IsPwrSuspendAllowed: TIsPwrSuspendAllowed;

begin

Result := False;

hPowrprof := LoadLibrary('powrprof.dll');

if hPowrprof <> 0 then

begin

   try

     @IsPwrSuspendAllowed := GetProcAddress(hPowrprof, 'IsPwrSuspendAllowed');

     if @IsPwrSuspendAllowed <> nil then

     begin

       Result := IsPwrSuspendAllowed;

     end;

   finally

     FreeLibrary(hPowrprof);

   end;

end;

end;

 

 

Вопрос: А как реализовать в одном компоненте такие функции как выключение компьютера, перезагрузка, завершение сеанса работы пользователя, Eject CD, выключение питания монитора и т.д.? Ответ: предлагаем посмотреть следующий пример ...

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

  SysPowerStatus: TSystemPowerStatus;

begin

  GetSystemPowerStatus(SysPowerStatus);

  if Boolean(SysPowerStatus.ACLineStatus) then

  begin

    ShowMessage('System running on AC.');

  end

  else

  begin

    ShowMessage('System running on battery.');

    ShowMessage(Format('Battery power left: %d percent.', [SysPowerStatus.BatteryLifePercent]));

  end;

end;