Jak wykrywać (z Delphi), gdy laptop działa na bateriach (lub AC)?Jak wykrywać, kiedy laptop działa na bateriach?
10
A
Odpowiedz
15
Aby otrzymać powiadomienie, gdy status zmieni się na Vista i Windows 7, można użyć RegisterPowerSettingNotification
.
W przypadku systemu Windows 2000 i nowszych wersji spójrz na numer GetSystemPowerStatus
lub przejdź do witryny MSDN i przeczytaj artykuł o numerze Power Management.
(Ktoś zawsze stanowisk podczas piszę :-()
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
Istnieje funkcja WINAPI, którą wierzę, że to robi, GetSystemPowerStatus, które, jak sądzę, można wykonać z Delphi.
1
Oto część kodu, który wykrywa, gdy laptop pracuje na baterii (jeśli nie powoduje to pewne zdarzenie):
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;
Powiązane problemy
- 1. Jak wykrywać, kiedy kończy się odtwarzanie dźwięku?
- 2. Jak wykrywać, kiedy przycisk naciśnięty i zwolniony na Androidzie
- 3. Jak wykrywać dotyk na NSTextAttachment
- 4. Wyłącz wyświetlanie ekranu, gdy laptop wyłącza ekran?
- 5. Jak/kiedy działa "after_filter"?
- 6. WPF - Jak wykrywać, kiedy dodawane są nowe elementy potomne?
- 7. Jak wykrywać, kiedy zmiana rozmiaru rozpoczyna się i kończy?
- 8. Jak wykrywać, kiedy użytkownik naciśnie Enter w polu wejściowym
- 9. Jak wykrywać, kiedy Przełącznik jest przesuwany, nie kliknięty
- 10. Jak wykrywać, kiedy inne rozszerzenie Chrome zastępuje tę samą stronę?
- 11. Jak wykrywać, kiedy został wyświetlony panel dodatku SDK?
- 12. Jak wykrywać wyjście aplikacji na Androida?
- 13. Jak wykrywać zatrzymanie myszy
- 14. Jak wykrywać fokus przeglądarki na urządzeniach mobilnych?
- 15. Jak wykrywać gest machnięcia na webview
- 16. Jak wykrywać nieużywane właściwości na wiosnę
- 17. Jak wykrywać wciśnięte klawisze na kliknięcie AngularJS
- 18. Jak wykrywać kierunek myszy na konkretnym elemencie?
- 19. Jak wykrywać wątek UI na Androidzie?
- 20. Jak wykrywać dotyk przycisku "backspace" na UITextField?
- 21. Jak wykrywać puste miejsce na stronie internetowej?
- 22. Jak wykrywać, kiedy urządzenie przełącza się z trybu portretowego na poziomy?
- 23. Jak wykrywać dwa jednoczesne dotknięcia?
- 24. Jak wykrywać zatrzymanie myszy?
- 25. Jak wykrywać zamknięcie przeglądarki?
- 26. Jak wykrywać wersję IIS Express?
- 27. Kiedy #if DEBUG działa
- 28. Jak wykrywać środowisko w Salesforce?
- 29. Jak wykrywać Pull, aby odświeżyć
- 30. jak wykrywać kierunek ruchu machnięcia?
Tak, taka jest natura SO.To jest trudniejsze, gdy twój angielski nie jest angielski (mój przypadek) .Przy prostu musisz się do tego przyzwyczaić :-). Pamiętam dyskusję w meta http://meta.stackexchange.com/questions/73/is-the-fastest-gun-in-the-west-solved/93#93, aby uniknąć "desperacji" w publikowaniu czegoś szybko . – GmonC
Właśnie przetestowałem ten kod na Windows 7 i to DZIAŁA !! to była niespodzianka. – Reallyethical
@GmonC Twoje prawo Powinienem się uspokoić, ale szczerze mówiąc, przyzwyczajam się do prędkości tej strony. Wydaje się prawie bezcelowe, gdy inni mają taki sam pomysł jak ja. – Reallyethical