Determinar se um item do Outlook foi modificado, mas não salvo (Referência Auxiliar do Outlook)
Este tópico mostra como usar a identificação de expedição de dispidFDirty para chamar a propriedade correspondente em um item do Outlook, para ver se o item foi modificado e não foi salvo.
Dado um objeto de item, você pode usar o método IUnknown::QueryInterface para obter um ponteiro de interface IDispatch . A função no tópico FIsItemDirty
aceita um ponteiro IDispatch , pdisp, como um parâmetro de entrada.
FIsItemDirty
chama o método IDispatch::Invoke , especificando dispidFDirty como o argumento para o parâmetro dispIdMember e os sinalizadores DISPATCH_METHOD | DISPATCH_PROPERTYGET
para wFlags, para verificar se o item foi modificado.
FIsItemDirty
retorna um valor booliano (True para indicar que o item tem alterações não salvas; caso contrário, False).
bool FIsItemDirty(IDispatch *pdisp)
{
DISPPARAMS dispparams;
UINT uArgErr;
HRESULT hr = S_OK;
CComVariant varDirty;
dispparams.rgvarg = 0;
dispparams.cArgs = 0;
dispparams.cNamedArgs = 0;
dispparams.rgdispidNamedArgs = NULL;
hr = pdisp->Invoke(dispidFDirty,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD | DISPATCH_PROPERTYGET,
&dispparams,
&varDirty,
NULL,
&uArgErr);
return SUCCEEDED(hr) && varDirty.bVal;
}