我想根据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”是否被打开。
答案 0 :(得分:1)
据我所知,C ++标准在这种情况下无济于事,因为您的问题是特定于操作系统的。
如果您使用的是Windows操作系统,则可以使用“WinAPI”。
以下是一些步骤。以下步骤的代码可在以下MSDN链接中找到。您可以根据需要修改代码。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx
调用“EnumProcesses”。将返回进程ID列表。
使用“EnumProcesses”返回的进程ID迭代每个进程。
这是我所知道的一种粗略方式。
答案 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;
}