15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Компонент PowerControl.

Автор: Konstantin Kotzev

Скачать компонент - 6Кб

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

Совместимость: все версии Delphi

Пример:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PowerControl1.Action:=actCDEject;// Или... actLogOFF, actShutDown...
  PowerControl1.Execute;
end;

=========================

Component Code:

unit PowerControl;

interface

uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls,
     Forms, Graphics, MMSystem;

type
   TAction = (actLogOFF,actShutDown,actReBoot,actForce,actPowerOFF,
actForceIfHung,actMonitorOFF,actMonitorON,actCDEject,actCDUnEject);

type
  TPowerControl = class(TComponent)
    private
        FAction : TAction;
        procedure SetAction(Value : TAction);
    protected
    public
        function Execute : Boolean;
    published
        property Action : TAction read FAction write SetAction;
  end;

procedure Register;

implementation

procedure Register;
begin
     RegisterComponents('K2', [TPowerControl]);
end;

procedure TPowerControl.SetAction(Value : TAction);
begin
     FAction := Value;
end;

function TPowerControl.Execute : Boolean;
begin
    with (Owner as TForm) do
       case FAction of
         actLogOff: ExitWindowsEx(EWX_LOGOFF,1);
         actShutDown: ExitWindowsEx(EWX_SHUTDOWN,1);
         actReBoot: ExitWindowsEx(EWX_REBOOT,1);
         actForce: ExitWindowsEx(EWX_FORCE,1);
         actPowerOff: ExitWindowsEx(EWX_POWEROFF,1);
         actForceIfHung: ExitWindowsEx(EWX_FORCEIFHUNG,1);
         actMonitorOFF: SendMessage(Application.Handle,
                        WM_SYSCOMMAND, SC_MONITORPOWER, 0);
         actMonitorON: SendMessage(Application.Handle, WM_SYSCOMMAND,
                       SC_MONITORPOWER, -1);
         actCDEject: mciSendstring('SET CDAUDIO DOOR OPEN
                     WAIT',nil,0, Handle);
         actCDUnEject: mciSendstring('SET CDAUDIO DOOR CLOSED
                       WAIT',nil,0, Handle);
       end; {Case}
    Result := True;
end;

end.