Компонент PowerControl
Материал из DRKB
Компонент PowerControl[править | править код]
Вопрос: А как реализовать в одном компоненте такие функции как выключение компьютера, перезагрузка, завершение сеанса работы пользователя, Eject CD, выключение питания монитора и т.д.?
Ответ: предлагаем посмотреть следующий пример ...
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.
Source: Взято из http://forum.sources.ru
ID: 01672