André Alves de Lima

Talking about Software Development, Technology and more…

.NET Compact Framework: Alterando a data do dispositivo via código

.NET Compact Framework: Alterando a data do dispositivo via código

Fala pessoal, tudo tranquilo?
 
Para quem precisa de uma maneira de alterar a data do dispositivo, seja a data de sistema ou a data local (que considera o fuso horário), segue o código que faz exatamente isso, utilizando os DllImports das funções da coredll.dll:
 
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace SmartDeviceProject1
{
    public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();

            // Utilizando:
            DateTimeUtils.SetLocalDateTime(new DateTime(2010, 7, 29, 15, 5, 0));
            // Ou:
            //DateTimeUtils.SetLocalDateTime(new DateTime(2010, 7, 29, 15, 5, 0));
        }

         public struct SystemTime
          {
            public ushort Year;
            public ushort Month;
            public ushort DayOfWeek;
            public ushort Day;
            public ushort Hour;
            public ushort Minute;
            public ushort Second;
            public ushort Millisecond;
          }

         public class DateTimeUtils
         {
             [DllImport("coredll.dll", EntryPoint = "SetLocalTime", SetLastError = true)]
             public extern static bool WinCESetLocalTime(ref SystemTime st);

             [DllImport("coredll.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
             public extern static bool WinCESetSystemTime(ref SystemTime st);

             public static void SetLocalDateTime(DateTime value)
             {
                 SystemTime st = new SystemTime();

                 st.Year = (ushort)value.Year;
                 st.Month = (ushort)value.Month;
                 st.Day = (ushort)value.Day;
                 st.DayOfWeek = (ushort)value.DayOfWeek;
                 st.Hour = (ushort)value.Hour;//((value.Hour + 1) % 24);
                 st.Minute = (ushort)value.Minute;
                 st.Second = 00;
                 st.Millisecond = (ushort)value.Millisecond;

                 bool result = WinCESetLocalTime(ref st);
                 if (true != result)
                 {
                     int error = Marshal.GetLastWin32Error();
                     throw new Exception("Ocorreu um erro : " + error);
                 }
             }
             public static void SetSystemDateTime(DateTime value)
             {
                 SystemTime st = new SystemTime();

                 st.Year = (ushort)value.Year;
                 st.Month = (ushort)value.Month;
                 st.Day = (ushort)value.Day;
                 st.DayOfWeek = (ushort)value.DayOfWeek;
                 st.Hour = (ushort)value.Hour;//((value.Hour + 1) % 24);
                 st.Minute = (ushort)value.Minute;
                 st.Second = 00;
                 st.Millisecond = (ushort)value.Millisecond;

                 bool result = WinCESetSystemTime(ref st);
                 if (true != result)
                 {
                     int error = Marshal.GetLastWin32Error();
                     throw new Exception("Ocorreu um erro : " + error);
                 }
             }
         }
    }
}

 
É isso aí! Espero que ajude!
 
Até a próxima!

André Alves de Lima.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>