[C] Modification du temps d'un pc

ssebounet Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   -  
 SKZ -
Bonjour à tous!!

Je suis en train de rechercher comment modifier la date et l'heure d'un pc en executant un programe.
je suis sous window xp.
je souhaiterai modifier la date surtout. il faudrai que j'arrive a l'avancé de 2 jours à 10 jours. (après la reculer pour la remettre en place!)
enfin bon y-a-t-il une fonction en c qui permet de faire cela ou comment le faire???

Merci d'avance pour toutes reponses!!!

Séb
A voir également:

6 réponses

blurk Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour,

#include <time.h>

void reglage
(int heure, int minute,int seconde,int jour ,int mois, int an)
{
struct  time t;
t.ti_hour=(char) heure;
t.ti_min= (char) minute;
t.ti_sec= (char) seconde;
settime(&t);
struct date today;
today.da_day = (char) jour;
today.da_mon =(char)mois;
today.da_year =(char)an;
setdate(&today);
}

et voilà!

cordialement
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
salut.
à priori rien dans <ctime> ni sur la MSDN.
Mais tu peux utiliser la commande date du shell.
Je ne sais pas ce que tu veux faire, mais il est possible de changer la date d'un fichier en C.
0
ssebounet Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   6
 
merci beaucoup blurk je vais tester ca de suite et je vous tien au courant!!
sinon pour repondre a char snipeur je souhaite changer la date de l'ordinateur pas d un fichier!!
merci bien encore je vais tester ce program de suite!!!
seb
0
ssebounet Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   6
 
voila j'ai tester ce que tu me disais!!
mais je ne sais pas pourquoi il me refusait struct time t et idem pour la date!!
j'ai donc reutiliser une parti de ce que tu as fait!!

void reglage(int hour,
int minute,
int second,
int day,
int month,
int year)
{
SYSTEMTIME systime;

systime.wYear = year;
systime.wMonth = month;
/* systime.wDayOfWeek = tm->tm_wday; not permit*/
systime.wDay = day;
systime.wHour = hour;
systime.wMinute = minute;
systime.wSecond = second;
systime.wMilliseconds = 00;

/* Set the time of the host */
SetLocalTime(&systime);
}

voila celui ci fonctionne c est sur!!
maintenant il faut juste apeler la date du jour et ajouter les valeurs a la date du jour!
en tout cas merci beaucoup pour votre rapidité de réponse!!!
seb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
:-( et bien sur ça tourne pas sur Linux !
SYSTEMTIME n'est pas reconnu.
Desoler pour la reponse eroner, j'avais cru comprendre sur MSDN que SetLocalTime ne modifiait pas l'heure, du PC mais seulement celle du programme.
0
SKZ
 
Sans les droits root, de toute façon, ça ne marchera pas...

Ce genre de manip est très dépendante du système.
Le mieux pour un prog qui se veux portable, est de créer un fonction spéciale qui le fait, et de la réécrire pour chaque système cible, et de faire une édition de lien conditionnée par le système cible (ex : un makefile.win et un autre makefile.linux...)
0
ssebounet Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   6
 
en fait j ai encore mieux!!!
la il y avait un probleme avec les jours par exemple aujourd hui on est le 23 si je voulais ajouter 10 jours ca passait au 33!!!
probleme!

donc en fait j ai une parade:

void set_date_hour_minute( int day,
int hour,
int minute)
{

SYSTEMTIME systemTime1;
FILETIME fileTime1;
ULARGE_INTEGER uLargeIntegerTime1;
int result;

GetLocalTime( &systemTime1 );

/* Conversion from SYSTEMTIME structure to FILETIME structure */
result = SystemTimeToFileTime(&systemTime1, &fileTime1);
if (!result) printf("Conversion from SYSTEMTIME to FILETIME failed.");

/* Copies the FILETIME structure into the ULARGER_INTEGER structure; */
uLargeIntegerTime1.LowPart = fileTime1.dwLowDateTime;
uLargeIntegerTime1.HighPart = fileTime1.dwHighDateTime;

/* Modification of the ULARGER_INTEGER in days hours or minutes or several of them */
if (day)
uLargeIntegerTime1.QuadPart += (unsigned __int64) (1000*1000*10) /* seconds */
* (unsigned __int64) (60 * 60 * 24) /* days */
* (unsigned __int64) (day); /* # of days */

if (hour)
uLargeIntegerTime1.QuadPart += (unsigned __int64) (1000*1000*10) /* seconds */
* (unsigned __int64) (60 * 60) /* days */
* (unsigned __int64) (hour); /* # of days */

if (minute)
uLargeIntegerTime1.QuadPart += (unsigned __int64) (1000*1000*10) /* seconds */
* (unsigned __int64) (60) /* days */
* (unsigned __int64) (minute); /* # of days */


/* Converts back to FILETIME structure from ULARGE_INTEGER structure */
fileTime1.dwLowDateTime = uLargeIntegerTime1.LowPart;
fileTime1.dwHighDateTime = uLargeIntegerTime1.HighPart;

/* Coverts back to SYSTEMTIME structure from FILETIME structure */
result = FileTimeToSystemTime( &fileTime1, &systemTime1);
if (!result) printf("Conversion from FILETIME to SYSTEMTIME failed.");

/* Set the time of the host */
SetLocalTime(&systemTime1);
}




et voila celui la est niquel!!! j'en suis assez content!!
sinon comment pourrais-je faire pour que cela fonctionne aussi sous linux???
y a t il un moyen de le faire aussi???

Séb
0