如何在c ++中检查Microsoft Outlook是否已打开?

时间:2017-03-15 05:11:16

标签: c++ visual-c++ outlook

我想根据outlook是否打开在我的应用程序中执行特定操作。

我尝试了这段代码,但总是返回false。

CLSID clsid;
HRESULT hr = CLSIDFromProgID(_T("Outlook.Application"), &clsid);
if (hr != S_OK) 
return false;

IUnknown *pUnknown = NULL;
hr = GetActiveObject(clsid, 0, &pUnknown);
return (hr == S_OK);

有谁能告诉我如何在c ++中检查“Outlook”是否被打开。

2 个答案:

答案 0 :(得分:1)

据我所知,C ++标准在这种情况下无济于事,因为您的问题是特定于操作系统的。

如果您使用的是Windows操作系统,则可以使用“WinAPI”。

以下是一些步骤。以下步骤的代码可在以下MSDN链接中找到。您可以根据需要修改代码。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx

  1. 调用“EnumProcesses”。将返回进程ID列表。

  2. 使用“EnumProcesses”返回的进程ID迭代每个进程。

  3. 然后使用“OpenProcess”和“GetModuleBaseName”查找进程名称,如上面的MSDN链接所示。
  4. 在上述步骤(步骤3)返回的进程名称中搜索字符串“Outlook”。
  5. 这是我所知道的一种粗略方式。

答案 1 :(得分:0)

  

获取系统中运行的所有进程的快照,迭代查找   是否“outlook”出现在任何exe名称中。

void isOutlookRunning()    
{           
    bool retval = false; 
    PROCESSENTRY32 t_entry;
    t_entry.dwSize = sizeof(PROCESSENTRY32);
    HANDLE t_snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(t_snapshot, &t_entry))
    {
        while (Process32Next(t_snapshot, &t_entry))
        {   
            if(StrStrI(t_entry.szExeFile,"outlook")
                retval = true; 
        }
    }

    CloseHandle(t_snapshot); 
    return retval;
} 
相关问题