On va remplacer '<< 32' et '/ 10000000' par 2 '='.
30 jours = 25920000000000
J'ai utilisé un DateTimePicker sur une dialog pour tester.
Je fais stocker direct les valeurs dans des __int64.
void __stdcall DireDate(HWND hdlg)
{
SYSTEMTIME sttm;
unsigned __int64 systm, srctm;
SendMessage(hdtp, DTM_GETSYSTEMTIME, 0, (LPARAM) &sttm);
SystemTimeToFileTime(&sttm, (LPFILETIME) &srctm);
GetSystemTimeAsFileTime((LPFILETIME) &systm);
if(srctm > systm) return;
if((systm - srctm) >= 25920000000000) MessageBox(hdlg, "1 mois", szappname, 0);
}
Maintenant utilisons ULARGE_INTEGER pour y stocker le FILETIME comme si on le recevait d'un WIN32_FIND_DATA, se fait en 2 simple affectation.
void __stdcall DireDate(HWND hdlg)
{
FILETIME ftm;
SYSTEMTIME sttm;
ULARGE_INTEGER systm, srctm;
SendMessage(hdtp, DTM_GETSYSTEMTIME, 0, (LPARAM) &sttm);
SystemTimeToFileTime(&sttm, &ftm); // VRAI FILETIME CETTE FOIS
srctm.LowPart = ftm.dwLowDateTime;
srctm.HighPart = ftm.dwHighDateTime;
GetSystemTimeAsFileTime((LPFILETIME) &systm);
if(srctm.QuadPart > systm.QuadPart) return;
if((systm.QuadPart - srctm.QuadPart) >= 25920000000000) MessageBox(hdlg, "1 mois", szappname, 0);
}
ciao...
BruNews, MVP VC++