![]() |
AW: WinCE Batteriestatus in Delphi VCL Anwendung (über RDP)
So hab ichs nun verbaut, vieleicht brauchts mal wer...
Für die Mini-Anwendung auf dem Handscanner mit Windows CE, wurden ![]() ![]() SharpDevelop 3.2 ist wohl die letzte Version, die das CompactFramework mit NET 3.5 unterstützt. Generelle Funktionsweise CE Anwendung C#, schreibt jede Minute den Batteriestatus in eine Ini.
Code:
In WinCE RDP-Verbindungseigenschaften noch die Ordnerfreigabe definieren und auf dem RD-System (WinServ2003 in dem Fall oder sonst irgendnem Win) in der DelphiAnwendung über einen Timer die Ini auslesen.
using System;
using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; using System.Threading; namespace JZPW1310_Battery { public class SYSTEM_POWER_STATUS_EX { public byte ACLineStatus; public byte BatteryFlag; public byte BatteryLifePercent; public byte Reserved1; public uint BatteryLifeTime; public uint BatteryFullLifeTime; public byte Reserved2; public byte BackupBatteryFlag; public byte BackupBatteryLifePercent; public byte Reserved3; public uint BackupBatteryLifeTime; public uint BackupBatteryFullLifeTime; } public partial class MainForm : Form { [DllImport("coredll")] private static extern uint GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate); public static void Main(string[] args) { System.Threading.Timer t = new System.Threading.Timer(TimerCb, null, 0, 60000); Console.ReadLine(); } private static void TimerCb(Object o) { try { SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX(); string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); if (GetSystemPowerStatusEx(status, false) == 1) { // Console.WriteLine("BatteryLifePercent=" + status.BatteryLifePercent.ToString()); StreamWriter sw = new StreamWriter(dir + @"\battery.status"); sw.WriteLine("[BatteryStatus]"); sw.WriteLine("BatteryLifePercent=" + status.BatteryLifePercent.ToString()); sw.Close(); GC.Collect(); } } catch (Exception ex) { // Console.WriteLine(ex.Message + ' : ' + ex.StackTrace); } } } }
Delphi-Quellcode:
Fals das hier zu Detail- oder Erleuterungsarm erscheint, schreib ichs gern ausführlicher bzw. aufgeräumter, habe noch nicht viel Programmierforenerfahrung :).
uses IniFiles;
procedure Tfrm_bla_Programm.tmr1Timer(Sender: TObject); var ini: TIniFile; percent: Integer; caption: string; begin try begin ini := TIniFile.Create('\\tsclient\Files\Temp\battery.status'); caption := ini.ReadString('BatteryStatus', 'BatteryLifePercent', '') + ' %'; percent := StrToInt(ini.ReadString('BatteryStatus', 'BatteryLifePercent', '')); pb1.Position := percent; lbl1.Caption := caption; ini.Free; end; except on e: exception do begin pb1.Position := 100; lbl1.Caption := 'ERROR'; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz