Lire les propriétés de fuseau horaire à partir d’un rendez-vous
Cette rubrique montre une fonction, ReadTimeZones
, qui appelle les deux fonctions, BinToTZDEFINITION
et BinToTZREG
, pour lire les propriétés de fuseau horaire, PidLidAppointmentTimeZoneDefinitionStartDisplay et PidLidTimeZoneStruct, à partir d’un rendez-vous.
PidLidAppointmentTimeZoneDefinitionStartDisplay contient un flux qui correspond au format persistant d’une structure TZDEFINITION , et PidLidTimeZoneStruct contient un flux qui correspond au format persistant d’une structure TZREG . Pour obtenir les structures TZDEFINITION et TZREG exactes, BinToTZDEFINITION
et BinToTZREG
sont utilisés pour analyser les valeurs de flux de ces propriétés de manière appropriée. Ces deux fonctions sont définies dans Analyser un flux à partir d’une propriété binaire pour lire la structure TZDEFINITION et Analyser un flux à partir d’une propriété binaire pour lire la structure TZREG, respectivement.
void ReadTimeZones(LPMAPIPROP lpAppointment)
{
HRESULT hRes = S_OK;
LPSPropTagArray lpNamedPropTags = NULL;
MAPINAMEID NamedID[2] = {0};
LPMAPINAMEID lpNamedID[2];
lpNamedID[0] = &NamedID[0];
lpNamedID[1] = &NamedID[1];
NamedID[0].lpguid = (LPGUID)&PSETID_Appointment;
NamedID[0].ulKind = MNID_ID;
NamedID[0].Kind.lID = dispidTimeZoneStruct;
NamedID[1].lpguid = (LPGUID)&PSETID_Appointment;
NamedID[1].ulKind = MNID_ID;
NamedID[1].Kind.lID = dispidApptTZDefStartDisplay;
hRes = lpAppointment->GetIDsFromNames(
2,
lpNamedID,
NULL,
&lpNamedPropTags);
if (SUCCEEDED(hRes) && lpNamedPropTags)
{
SizedSPropTagArray(2,sptaTzProps) = {2,
CHANGE_PROP_TYPE(lpNamedPropTags->aulPropTag[0],PT_BINARY),
CHANGE_PROP_TYPE(lpNamedPropTags->aulPropTag[1],PT_BINARY),
};
LPSPropValue lpProps = NULL;
ULONG cProps = 0;
hRes = lpAppointment->GetProps(
(LPSPropTagArray)&sptaTzProps,
NULL,
&cProps,
&lpProps);
if (SUCCEEDED(hRes) && 2 == cProps && lpProps)
{
if (PT_BINARY == PROP_TYPE(lpProps[0].ulPropTag))
{
TZREG* ptzReg = BinToTZREG(lpProps[0].Value.bin.cb,lpProps[0].Value.bin.lpb);
// TODO: Do whatever is necessary with ptzReg.
delete ptzReg;
}
if (PT_BINARY == PROP_TYPE(lpProps[1].ulPropTag))
{
TZDEFINITION* ptzDef = BinToTZDEFINITION(lpProps[1].Value.bin.cb,lpProps[1].Value.bin.lpb);
// TODO: Do whatever is necessary with ptzDef.
delete[] ptzDef;
}
}
MAPIFreeBuffer(lpProps);
}
MAPIFreeBuffer(lpNamedPropTags);
}