¿Cómo detectar (desde Delphi) cuando la computadora portátil funciona con baterías (o AC)?¿Cómo detectar cuando la computadora portátil funciona con baterías?
10
A
Respuesta
15
Para recibir notificaciones cuando el estado cambie en Vista y Windows 7, puede usar RegisterPowerSettingNotification
.
Para Windows 2000 y posterior, mira GetSystemPowerStatus
, o ve a MSDN y lee sobre Power Management.
(Alguien siempre contabiliza mientras estoy escribiendo :-()
function GetBattery : Boolean;
var
SysPowerStatus: TSystemPowerStatus;
begin
Win32Check(GetSystemPowerStatus(SysPowerStatus));
case SysPowerStatus.ACLineStatus of
0: Result := False;
1: begin
Result := True;
// You can return life with
// String := Format('Battery power left: %u percent.', SysPowerStatus.BatteryLifePercent]);
end;
else
raise Exception.Create('Unknown battery status');
end;
end;
2
Hay una función WINAPI que creo que hace esto, GetSystemPowerStatus, que creo que se puede ejecutar desde Delphi.
1
Aquí parte del código que detecta cuando portátil está funcionando con baterías (si no se dispara un evento):
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
WTSSessionNotification, StdCtrls, MediaPlayer, Buttons, ShellAPI, Settings,
ExtCtrls;
const
WM_ICONTRAY = WM_USER + 1;
type
TSettingsForm = class(TForm)
OpenDialog: TOpenDialog;
pnl1: TPanel;
InfoLabel: TLabel;
grp1: TGroupBox;
AlarmSoundLabel: TLabel;
lbl1: TLabel;
checkIfLocked: TCheckBox;
Filename: TEdit;
Browse: TBitBtn;
TestSound: TBitBtn;
btn1: TBitBtn;
lbl2: TLabel;
procedure Minimize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure TestSoundClick(Sender: TObject);
procedure BrowseClick(Sender: TObject);
procedure checkIfLockedClick(Sender: TObject);
procedure OpenHomepage(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
TrayIconData: TNotifyIconData;
procedure CheckForAC;
protected
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
Function SecuredLockWorkStation : Boolean ;
end;
var
SettingsForm: TSettingsForm;
implementation
{$R *.DFM}
{$R WindowsXP.RES}
var
MPlayer: TMPlayer;
mySettings: TSettings;
isLocked: boolean = false;
// true if A/C is connected, false if not
function ACConnected: boolean;
var PowerStatus: TSystemPowerStatus;
begin
GetSystemPowerStatus(PowerStatus);
result := (PowerStatus.ACLineStatus = 1);
end;
// handles application.minimize; do not really
// minimize, but hide settings window
procedure TSettingsForm.Minimize(Sender: TObject);
begin
Application.Restore;
self.Hide;
end;
// processes window messages (notification about
// power status changes, locking of workstation and
// tray icon activity)
procedure TSettingsForm.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_WTSSESSION_CHANGE:
begin
if Message.wParam = WTS_SESSION_LOCK then
isLocked := true;
if Message.wParam = WTS_SESSION_UNLOCK then
begin
isLocked := false;
if MPlayer.isPlaying then
MPlayer.Close;
end;
end;
WM_POWERBROADCAST:
begin
if (isLocked) or (checkIfLocked.checked=false) then
CheckForAC;
end;
WM_ICONTRAY:
begin
case Message.lParam of
WM_LBUTTONDOWN:
begin
if SettingsForm.visible then
SettingsForm.Hide
else
SettingsForm.Show;
end;
WM_RBUTTONUP:
begin
if SettingsForm.visible then
SettingsForm.Hide
else
SettingsForm.Close;
end;
end;
end;
end;
inherited;
end;
Cuestiones relacionadas
- 1. ¿Cómo detectar cuando el cable de alimentación de la computadora portátil se ha desconectado?
- 2. ¿Podemos detectar el nivel de batería de la computadora portátil con .net?
- 3. Controlar su teléfono desde la computadora portátil
- 4. Detectar si la aplicación se está ejecutando en la computadora portátil
- 5. Cómo atrapar el Fn +? llaves en la computadora portátil?
- 6. ¿Representación fuera de pantalla cuando la computadora portátil apaga la pantalla?
- 7. BlueCove, computadora portátil y una tableta Android con Bluetooth
- 8. El servicio de Windows creado para apagar la computadora no funciona cuando la computadora está bloqueada
- 9. Cómo manejar el botón de apagado de una computadora portátil
- 10. Uso de la computadora portátil como segundo monitor de programación
- 11. daños en el montón, pero sólo cuando se compila en la computadora portátil
- 12. ¿Cómo usar la computadora portátil con Windows como monitor externo para Macbook Pro?
- 13. Acceda al controlador de ventilador integrado para computadora portátil programáticamente?
- 14. ¿Cómo puedo cambiar el brillo de la pantalla de mi computadora portátil en ubuntu?
- 15. Mathematica, funciones de llamada de otra computadora portátil
- 16. Monitoreo de la batería o la fuente de alimentación de la computadora portátil de java
- 17. Obtener Python sin (seleccionado) baterías
- 18. Detectar automáticamente una nueva computadora conectada a la red
- 19. ¿Cómo funciona en C portátil para buscar hacia adelante cuando se lee desde un conducto
- 20. ¿Pueden los navegadores de escritorio detectar cuando la computadora reanuda el sueño?
- 21. ¿Cómo detectar cuando finaliza la aplicación?
- 22. Socket IO detectar cuando el cliente ha perdido la conexión
- 23. ¿Cómo detectar cuando la pantalla está encendida?
- 24. ¿Qué API usaría para cambiar el brillo de la computadora portátil (.NET)?
- 25. ¿Cómo verificar el tipo de máquina? computadora portátil o de escritorio?
- 26. ¿Cómo apago la computadora?
- 27. ¿Acceder mediante programación al ventilador de la CPU en una computadora portátil? (Windows)
- 28. ¿Cómo se crea una aplicación portátil (funciona sin instalar)
- 29. C#: Cómo evitar que una computadora portátil entre en Stand-By
- 30. ¿Cómo puedo saber si un usuario está usando una computadora portátil?
Sí, esa es la naturaleza de SO. Eso es aún más difícil cuando tu inglés nativo no es inglés (mi caso). Solo tienes que acostumbrarte :-). Recuerdo una discusión en meta http://meta.stackexchange.com/questions/73/is-the-fastest-gun-in-the-west-solved/93#93 para evitar ser tan "desesperado" al publicar algo rápido . – GmonC
¡Acabo de probar ese código en Windows 7 y FUNCIONA! eso fue una sorpresa. – Reallyethical
@GmonC su derecho Debería calmarme, pero para ser sincero, me estoy acostumbrando a la velocidad de este sitio. Parece casi inútil publicar, ya que otros tienen la misma idea que yo. – Reallyethical