Ler propriedades de fuso horário de um compromisso
Este tópico mostra uma função, , ReadTimeZones
que chama as duas funções BinToTZDEFINITION
e BinToTZREG
, para ler as propriedades do fuso horário, PidLidAppointmentTimeZoneDefinitionStartDisplay e PidLidTimeZoneStruct, de um compromisso.
PidLidAppointmentTimeZoneDefinitionStartDisplay contém um fluxo que faz o mapeamento para o formato persistente de uma estrutura TZDEFINITION, e PidLidTimeZoneStruct contém um fluxo que faz o mapeamento para o formato persistente de uma estrutura TZREG. Para obter as estruturas TZDEFINITION e TZREG exatas, BinToTZDEFINITION
e BinToTZREG
são usadas para analisar os valores de fluxo dessas propriedades adequadamente. Essas duas funções estão definidas em Analisar um fluxo de uma propriedade binária para ler a estrutura TZDEFINITION e Analisar um fluxo de uma propriedade binária para ler a estrutura TZREG, respectivamente.
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);
}