【问题标题】:How to start Outlook from unmanaged VC++ Code?如何从非托管 C++ 代码启动 Outlook?
【发布时间】:2015-09-05 11:32:52
【问题描述】:

长篇大论: 我已经使用来自http://www.codeproject.com/Articles/10881/MAPIEx-Extended-MAPI-Wrapper 的扩展 Mapi 库管理了很多任务。问题是,如果 Outlook 没有运行,它不会发送实际的消息,它会将消息存储在发件箱中,并且使用库函数发送它们需要使用我不会一直拥有的配置文件登录。

小故事: 我需要使用其默认配置文件启动已安装的 Outlook(已检查),以便它可以在其发件箱中发送邮件(如果有)。

在 C# 中有非常巧妙的解决方案,只有 2 到 6 行代码,但不幸的是我不得不坚持使用非托管 VC++。

第一次尝试: 我已经用 WIN32 OLE 界面和 Microsoft Word 做了很多事情。这次我只希望程序启动,如果还没有运行的话。 所以我尝试了

// Outlook Test
CoInitialize(NULL);
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Outlook.Application", &clsid);

IDispatch *pOApp;
    if(SUCCEEDED(hr))
{
    IUnknown *pUnk;
    hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    if(FAILED(hr)) 
    {
        hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, 
                               IID_IDispatch, (void **)&pOApp);
        if(FAILED(hr)) pOApp=NULL;
    }
    else if(pUnk) 
    {
        hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pOApp);
        if(FAILED(hr)) pOApp=NULL;
    }
}

但仍然缺少一些东西。

非常感谢您提供的任何帮助

【问题讨论】:

  • 我们可以做到这一点而不必猜测可能会出现什么问题吗?
  • 我知道这种方法有什么问题。我至少需要调用一个 OLEMethod,但我不知道是哪一个,因为它没有记录在案。我在这里问了这个问题,有点希望,对WIN32OLE界面冷的人给我一些建议。
  • 或者你可以提出另一个建议我如何打开 Outlook。我真的很喜欢这个界面。
  • 代码中是否有错误代码?您可能会发现 support.microsoft.com/en-us/kb/2575036support.microsoft.com/en-us/kb/220600 文章很有帮助。

标签: visual-c++ com mfc outlook ole


【解决方案1】:

您可以考虑在非托管 C++ 中使用原始扩展 MAPI 代码,甚至无需自动执行 Outlook。此外,如果使用 Outlook 对象模型,您将收到 Send 方法触发的安全提示。您可以在Outlook "Object Model Guard" Security Issues for Developers 文章中了解这一点。

请参阅How To Create a Message With an Attachment and Send It Using MAPI/VC++ 以了解 C++(扩展 MAPI)中的示例。

【讨论】:

    【解决方案2】:

    导入 Outlook 类型库 (#import),以便您可以使用 Outlook 特定的界面(例如应用程序)。

    #import "libid:00062FFF-0000-0000-C000-000000000046" rename_namespace("Outlook") raw_interfaces_only
    

    或者您可以使用后期绑定并调用 IDispatch::GetIdsOfNames / Invoke。您可以在OutlookSpy 中查看属性/方法/事件及其分布(例如,单击 Outlook 中 OutlookSpy 功能区上的应用程序按钮)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2010-09-18
      • 2017-11-18
      • 2013-12-29
      • 2021-05-12
      • 1970-01-01
      相关资源
      最近更新 更多