Dizüstü bilgisayar pille (veya AC) çalışırken (Delphi'den) nasıl tespit edilir?Dizüstü bilgisayar pille çalışırken nasıl algılanır?
10
A
cevap
15
Vista ve Windows 7'de durum değiştiğinde bildirim almak için RegisterPowerSettingNotification
'u kullanabilirsiniz.
Windows 2000 ve üstü için, GetSystemPowerStatus
'a bakın veya MSDN'ye gidin ve yaklaşık Power Management'u okuyun. laptop pille çalışırken algılamak kod İşte
(I :-(yazarak am süre biri hep nakleder)
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
Delphi'den çalıştırabileceğine inandığım bir WINAPI işlevi var, GetSystemPowerStatus.
1
kısım (bazı olayı tetikler değilse):
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;
İlgili konular
- 1. iPython Dizüstü Bilgisayar
- 2. ipython: Dizüstü bilgisayar JSON
- 3. HTML ipywidgets durumu dizüstü bilgisayar
- 4. IPython Dizüstü Bilgisayar Sekmesi Tamamlandı - Dökümanı Göster
- 5. IPython dizüstü bilgisayar yüklenirken hata oluştu
- 6. jupyter dizüstü bilgisayar çekirdeği farklı env'de çalışıyor
- 7. Ipython: Dizüstü Bilgisayar İçerisinde Hata Ayıklama Kodu
- 8. Ttk Dizüstü Bilgisayar Sekmesi Çıkıntılı Satırını Kaldırma
- 9. Dizüstü Bilgisayar Bağlantılı Fan Denetleyicisine programlı olarak erişin?
- 10. Jupyter dizüstü bilgisayar sürümünü değiştirme 4.x + logo
- 11. Web tarayıcısını çalıştırmadan IPython dizüstü bilgisayar sunucusunu başlatın?
- 12. ortak anahtar github'a bağlanmak için yeni bir dizüstü bilgisayar çalışmıyor
- 13. wxPython: Bir dizüstü bilgisayar sekmesini devre dışı bırakabilir misiniz?
- 14. Jupyter dizüstü bilgisayar çıkış hücresi tam ekranı oluşturma
- 15. ipython dizüstü bilgisayarı başlatma
- 16. ImportError: dizüstü
- 17. R çalışırken, Emacs-ESS'den nasıl çıkılır?
- 18. Pencerelerin altında pille için bir yapılandırma dosyası nasıl belirlenir?
- 19. MKUserTrackingBarButtonItem kullanıldığında nasıl algılanır
- 20. Tablet modu nasıl algılanır
- 21. Windows nasıl algılanır?
- 22. UITextField boşaldığında nasıl algılanır?
- 23. Üç.js'deki çarpışma nasıl algılanır?
- 24. Ağda cihaz nasıl algılanır?
- 25. WindowState değişiklikleri nasıl algılanır?
- 26. Ses kapatılamadığında nasıl algılanır?
- 27. Yapılandırma Jupyter dizüstü
- 28. Beaker dizüstü bilgisayarımı nasıl python/r/... olarak kaydederim?
- 29. Dizüstü bilgisayar ile masaüstü arasındaki sklearn kodunun çalışma davranışında değişiklik yapma
- 30. Bir iPython Dizüstü Bilgisayardan CSV'yi İndirme
Evet, bu doğanın ingilizcesi (benim durumum) ingilizcede değilken daha da zor.Çünkü buna alışmak zorundasın :-). Hızlı bir şey yazarken "çaresiz" olmaktan kaçınmak için meta http://meta.stackexchange.com/questions/73/is-the-fastest-gun-in-the-west-solved/93#93 adresindeki bir tartışmayı hatırlıyorum . – GmonC
Sadece Windows 7'de bu kodu test etti ve ÇALIŞIYOR !! Bu bir sürpriz oldu. – Reallyethical
@GmonC Haklıyım Sakinleşmeliyim, ama dürüst olmak gerekirse bu sitenin hızına alışmaktayım. Diğerleri benim yaptığım gibi aynı fikirde olduğu için, gönderme sırasında neredeyse anlamsız görünüyor. – Reallyethical