1

Outlookの自動化を使用して、カレンダーのアイテムを検索しています。そのために、IsSearchSynchronous()メソッドを使用して、AdvancedSearchCompleteイベントを待機する必要があるかどうかを確認します。ところで、それは今までに同期していますか?

とにかく、Outlookを実行している場合は、この呼び出しに問題はありません。しかし、それが実行されない場合-呼び出しは次のように失敗します

HRESULT: 0x80020009 Exception occurred

EXCEPINFOには次のものが含まれます。

Source: "Microsoft Outlook"
Description: "The operation failed."
scode: 0x80004005

助言がありますか?これが私のテストケースです:

#include <atlstr.h>

int _tmain()
{
    IDispatch*  pApp;
    HRESULT     hr;
    CoInitialize(NULL);
    CLSID clsid;
    hr = CLSIDFromProgID(L"Outlook.Application", &clsid);
    if(SUCCEEDED(hr))
    {
        hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pApp);
        if(SUCCEEDED(hr))
        {
            // Get DISPID for "IsSearchSynchronous"
            OLECHAR Name[] = {L"IsSearchSynchronous"};
            LPOLESTR lp = Name;
            DISPID dispID;
            hr = pApp->GetIDsOfNames(IID_NULL, &lp, 1, LOCALE_USER_DEFAULT, &dispID);
            if(SUCCEEDED(hr))
            {
                // The path name of the folders that the search will search through.
                VARIANT path;
                path.vt = VT_BSTR;
                path.bstrVal = SysAllocString(L"'Calendar'");

                // Build DISPPARAMS
                DISPPARAMS dp = { NULL, NULL, 0, 0 };
                dp.cArgs = 1;
                dp.rgvarg = &path;

                // get IsSearchSynchronous
                VARIANT result;
                VariantInit(&result);
                EXCEPINFO ei = {0};
                hr = pApp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &dp, &result, &ei, NULL);
                VARIANT_BOOL vbIsSearchSynchronous = result.boolVal;
            }
        }
    }
    CoUninitialize();
    return 0;
}
4

1 に答える 1

0

他の誰かが興味を持っている場合、これは Microsoft の助けを借りて解決されます。IsSearchSynchronous() 呼び出しの「スコープ」パラメーターは、次のようにカレンダー フォルダーへの完全なパスである必要があります。

"\\Mailbox - <user_name>\\Calendar"
于 2012-05-31T18:52:48.097 に答える