2009-09-02 16 views

回答

2

在MSDN is an example of how to detect Outlook版本(或者如果安装了Outlook的话)。下面是该示例的美化版本:

#include <Windows.h> 
#include <Msi.h> 

#include "stdafx.h" 

static int compareOutlookVersion(const TCHAR* exe) 
{ 
    const TCHAR outlookRegister[][MAX_PATH] = { 
     TEXT("{E83B4360-C208-4325-9504-0D23003A74A5}"), // Outlook 2013 
     TEXT("{1E77DE88-BCAB-4C37-B9E5-073AF52DFD7A}"), // Outlook 2010 
     TEXT("{24AAE126-0911-478F-A019-07B875EB9996}"), // Outlook 2007 
     TEXT("{BC174BAD-2F53-4855-A1D5-0D575C19B1EA}") // Outlook 2003 
    }; 
    const int outlookVersions[] = { 
     2013, 
     2010, 
     2007, 
     2003 
    }; 
    DWORD pathLength = 0; 

    for (int i = 0; i < (sizeof(outlookVersions)/sizeof(outlookVersions[0])); i++) 

    if (ERROR_SUCCESS == 
     MsiProvideQualifiedComponent(
      outlookRegister[i], 
      exe, 
      (DWORD) INSTALLMODE_DEFAULT, 
      NULL, 
      &pathLength 
     )) { 
     return outlookVersions[i]; 
    } 

    return 0; 
} 

int getOutlookVersion(int* bits) 
{ 
    int version; 

    *bits = 32; 
    version = compareOutlookVersion(TEXT("outlook.exe")); 
    if (version) { 
     return version; 
    } 

    *bits = 64; 
    version = compareOutlookVersion(TEXT("outlook.x64.exe")); 
    if (version) { 
     return version; 
    } 

    *bits = 0; 
    return 0; // No Outlook found. 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HRESULT result; 
    int version; 
    int bits; 

    version = getOutlookVersion(&bits); 

    if (version) { 
     printf("Outlook %d, %d bit\n", version, bits); 
    } else { 
     printf("No Outlook found.\n"); 
    } 

    return 0; 
} 
1

Outlook暴露了一个COM接口,只是检查该接口?

+0

您能否提供一些示例? – 2009-09-02 07:13:26

1

MSalters,你的意思是像下面的代码:

::CoInitialize(NULL); 
_ApplicationPtr pApp; 
HRESULT hr; 
hr = pApp.CreateInstance(__uuidof(Outlook::Application)); 
if ((pApp == NULL) || FAILED(hr)) 
{ 
    return false; 
} 
2

检查的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE的存在,它的“Default”值包含路径exe文件。