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(sone Art freies VisualStudio) und das CompactFramework verwendet. SharpDevelop V3.2 für .Net 3.5 und CompactFramework 3.5. 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 14:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz