IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Inverser mon code (Convertir une date en hexadécimal pour REG_BINARY)


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Points : 99
    Points
    99
    Par défaut Inverser mon code (Convertir une date en hexadécimal pour REG_BINARY)
    Bonjour à tous et à toutes !

    J'ai trouvé ce code sur internet (après de longues recherches ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    BOOL GetStopTime(SYSTEMTIME *pstStop)
    {
      HKEY hKey = NULL;
     
      if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Windows", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
      {
        FILETIME ft;
        DWORD dwType = REG_BINARY;
        DWORD dwData = sizeof(FILETIME);
     
        if(RegQueryValueEx(hKey, "ShutdownTime", NULL, &dwType, (LPBYTE)&ft, &dwData) == ERROR_SUCCESS)
        {
          FileTimeToSystemTime(&ft, pstStop);
          //SystemTimeToFileTime(pstStop,&ft);
          SystemTimeToTzSpecificLocalTime(NULL, pstStop, pstStop);
          RegCloseKey(hKey);
          return TRUE; 
        }
        RegCloseKey(hKey); 
      }
      return FALSE;
    }
    Et on l'utilise de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SYSTEMTIME st1;
     
      GetStopTime(&st1);
      Label1->Caption=Label1->Caption + st1.wDay + "/" + (st1.wMonth) + "/" + st1.wYear;
      Label1->Caption=Label1->Caption + "  " + (st1.wHour) + ":" + st1.wMinute + ":" + st1.wSecond;
    Il sert donc à afficher la date et l'heure du dernier arret de windows.

    Moi je voudrais maintenant inverser ce code, de façon, à ce que lorque je précise une date et une heure, il me la convertisse en REG_BINARY pour après l'inserer manuelement dans le registre.

    Ce qui reviendrais à convertir une date choisit en REG_BINARY puis l'afficher.

    Merci à tous de m'aider c'est important pour moi de savoir faire ça.

    Merci d'avance,
    FluidBlow

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    tu peux utiliser le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
       FILETIME ft;
       TIME_ZONE_INFORMATION tmz;
       if (GetTimeZoneInformation(&tmz)!=-1)
        {
          AdjustTime(&st1,tmz.Bias);
        }
        SystemTimeToFileTime(&st1,&ft);  // ft contient le format recherché
        TDateTime Utc=SystemTimeToDateTime(st1);
        Label2->Caption="UTC Time : ";
        Label2->Caption=Label2->Caption+FormatDateTime("dd.mm.yyyy hh:mm:ss",Utc);
     
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TForm1::AdjustTime(SYSTEMTIME*  mtime, int Bias)
    {
      // Ajuste la date et l'heure en fonction du time zone donné sous le paramètre Bias
      const int MaxH=23;
      const int MaxM=60;
      const int Maxd=6;
      const int Mind=0;
      const int MaxMh=12;
      const int MaxHd=24;
      TDateTime  VclTime= SystemTimeToDateTime(*mtime); // utilisée par DaysInMonth
      int vBias=abs(Bias);
      int BHour,BMin;
      BHour=vBias/MaxM;
      BMin= vBias%MaxM;
      mtime->wMinute+=BMin;
      if(mtime->wMinute >MaxM)
      {
       mtime->wMinute-=MaxM;
       BHour++;
       }
      if (vBias == Bias)// détermination d'une avance ou d'un recul de l'heure
      {
        mtime->wHour-=BHour;
        if(mtime->wHour>MaxHd)
        {
          mtime->wHour=MaxHd+mtime->wHour;
          if(mtime->wDayOfWeek==Mind)
                mtime->wDayOfWeek=Maxd;
          else
            mtime->wDayOfWeek--;
          mtime->wDay--;
          if(mtime->wDay ==Mind)      // dépassement de mois
           {
             mtime->wDay=DaysInMonth(VclTime-1);
             mtime->wMonth--;
             if(mtime->wMonth ==Mind)                  // dépassement d'année
             {
               mtime->wMonth=MaxMh;
               mtime->wYear--;
             }
            }
         }
      }
      else
      {
        if(mtime->wHour>=MaxHd-BHour)        // dépassement de jour
          {
            mtime->wHour+=BHour-MaxHd;
            if(mtime->wDayOfWeek==Maxd)
                mtime->wDayOfWeek=Mind;
            else
              mtime->wDayOfWeek++;
            mtime->wDay++;
            if(mtime->wDay > DaysInMonth(VclTime))      // dépassement de mois
             {
               mtime->wDay=1;
               mtime->wMonth++;
               if(mtime->wMonth >MaxMh)                  // dépassement d'année
               {
                 mtime->wMonth=1;
                 mtime->wYear++;
               }
              }
           }
          else
            mtime->wHour+=BHour;
          }
    }
    Cordialement

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 145
    Points : 99
    Points
    99
    Par défaut
    Waouh !!
    Exellentissime !

    Merci beacoup c'est tout à fait ce qu'il me fallait

    Encore merci,
    FluidBlow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 29/06/2005, 10h22
  2. Convertir une date lunaire
    Par djeckelle dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 03/12/2004, 14h06
  3. []Comment convertir une date GMT en date vb ?
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/08/2004, 16h01
  4. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo