2017-01-26 4 views
0

J'essaie de définir l'heure du périphérique Windows Mobile à l'aide de coredll.dll. J'ai créé les fonctions qui permettront de régler l'heure, mais je suis confus sur la façon dont je devrais appeler la fonction sur le bouton clic pour régler l'heure. Ci-dessous l'objet et la méthode pour régler le temps, mais ne savez pas comment l'appeler à cliquez sur le boutonRéglez l'heure sur le périphérique Windows CE sur le bouton cliquez sur

// Ce sera la méthode que vous devez régler l'heure du système

[DllImport("coredll.dll", SetLastError=true)] 
static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime); 

// Ceci est la l'objet que vous devez remplir avant d'utiliser SetLocalTime

public struct SYSTEMTIME 
{ 
    public short year; 
    public short month; 
    public short dayOfWeek; 
    public short day; 
    public short hour; 
    public short minute; 
    public short second; 
    public short milliseconds; 
} 

// Et ceci est la dernière méthode pour exécuter

public static void SetSystemDateTime(DateTime dt) 
{ 
    SYSTEMTIME systime; 
    systime.year = (short)dt.Year; 
    systime.month = (short)dt.Month; 
    systime.day = (short)dt.Day; 

    systime.hour = (short)dt.Hour; 
    systime.minute = (short)dt.Minute; 
    systime.second = (short)dt.Second; 
    systime.milliseconds = (short)dt.Millisecond; 
    systime.dayOfWeek = (short)dt.DayOfWeek; 

    SetLocalTime(systime); 
} 

Comment dois-je appeler cette fonction dans la méthode de clic de bouton ci-dessous?

private void btnSync_Click(object sender, EventArgs e) 
     { 
//What Should I write here? 
     } 
+0

vous ne pouvez pas le définir via http. –

Répondre

1

Vous devez d'abord instancier une variable DateTime et la remplir avec les valeurs que vous souhaitez définir.

DateTime localDateTime = DateTime.Now; 

maintenant localDateTime contient les valeurs de date et d'heure locales (de l'ordinateur). Vous pouvez ensuite modifier les propriétés de la structure DateTime selon vos besoins. Par exemple changer l'heure:

//localDateTime.Hour=13; // cannot be changed, so create a new DateTime 
DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day, 
    13, localDateTime.minute, localDateTime.second, localDateTime.millisecond); 

Cela va changer la valeur de l'heure DateTime à 13. Le LocalDateTime modifié peut maintenant être utilisé pour changer l'heure locale dans votre gestionnaire de clic:

private void btnSync_Click(object sender, EventArgs e) 
    { 
     DateTime localDateTime = DateTime.Now; 
     //localDateTime.Hour=13; // cannot be changed, so create a new DateTime 
     DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day, 
     13, localDateTime.minute, localDateTime.second, localDateTime.millisecond); 
     SetSystemDateTime(newDT 
     // set datetime a second time to avoid issues when crossing DST intervals 
     System.Threading.Thread.Sleep(500); 
     SetSystemDateTime(newDT); 
    } 

BTW: Je qualifierais mieux SetSystemDateTime de SetLocalDateTime car cela modifie l'heure locale et non l'heure système. L'heure locale est calculée à partir de l'heure du système plus le réglage du décalage de fuseau horaire de l'ordinateur (c.-à-d. GMT + 1) plus l'heure d'été actuelle (le cas échéant). L'inverse fonctionne également, où le réglage de l'heure locale change l'heure du système en ce qui concerne les décalages. Remarque: l'heure locale peut changer en raison de changements de TZ ou d'heure d'été, mais l'heure du système est la même sur tous les ordinateurs (à Honkong ou à New York). Sinon, le monde informatique serait désynchronisé.

Il y a aussi une fonction API SetSystemTime qui est appelé en utilisant le même schéma:

[DllImport("coredll.dll", SetLastError=true)] 
    static extern bool SetSystemTime(ref SYSTEMTIME lpSystemTime); 

Bien que l'on pourrait penser à régler dayofweek lors du changement de la valeur de l'heure. Mais il n'y a aucun besoin si vous changez l'une des autres valeurs.N'oubliez pas d'appeler SetSystemTime ou SetLocalTime deux fois pour éviter les problèmes lors du passage d'une zone d'heure d'été à l'autre. Voir aussi http://www.hjgode.de/wp/2010/10/08/windows-mobile-setsystemtime-and-dst-einsteins-relativity-theory/

+0

Cela ne fonctionne pas? Cela ne change pas l'heure locale de l'appareil? – Programmermid

+0

lorsque j'ai défini localDateTime.Hour = 13; il afficher une erreur indiquant System.Date.Time.Hour ne peut pas être affecté en lecture seule? Est-ce dû au fait que l'heure de l'appareil n'est pas réglée? – Programmermid

+0

voir les changements de code qui créent un nouveau datetime – josef

0

Vous pouvez faire glisser un élément DateTimePicker de la boîte à outils VS, puis déposez-le dans votre formulaire. Il sera nommé: dateTimePicker1. Si vous avez un nom de bouton btnSync dans votre formulaire, pour définir la date de votre appareil et l'heure lorsque le bouton est cliqué, vous pouvez faire comme ceci:

private void btnSync_Click(object sender, EventArgs e) 
{ 
    DateTime dtToBeSet = dateTimePicker1.Value; 
    SetSystemDateTime(dtToBeSet); 
} 

Si vous n'utilisez pas DateTimePicker, vous avez de toute façon de récupérer de la même vos valeurs à partir de vos éléments d'interface utilisateur, créez un DateTime, puis définissez-le.

+0

Je n'ai jamais utilisé DateTimePicker. Je suis assez nouveau à C#. Pouvez-vous m'en donner un exemple? Comment puis-je l'utiliser dans ce scénario particulier? – Programmermid

+0

vous suffit de faire glisser un élément DateTimePicker de la boîte à outils dans VS et le déposer dans votre formulaire. Ensuite, vous pouvez aller aux propriétés et définir un nom approprié et vous avez terminé – salvolds

+0

mais cela va mettre l'heure sur datetimepicker pas sur le bon appareil? J'essaie de régler l'heure sur l'appareil. – Programmermid