2017-03-15 4 views
0

Outlookが開いているかどうかに基づいて、アプリケーションで特定のアクションを実行したいと考えています。Microsoft OutlookがC++で開かれているかどうかを確認する方法は?

私はこのコードを試しましたが、常に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); 

「Outlook」が開かれているかどうかをC++で確認する方法はありますか?

答えて

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; 
} 
+0

ありがとうございました。あなたが追加したコードスニペットを見ると、それはハードコードされた文字列 "outlook"で構成されています。ハードコーディングされた値で確認することはOKですか?つまり、同じ(OUTLOOK.EXE)のままですか?同じであれば、部分文字列のチェックに心配はありません。ちょっとした疑問がありましたら、あなたに何か考えがあれば明確にしてください。 – Siva

1

私の知る限り、あなたの質問はオペレーティングシステム固有のものなので、C++標準はこの場合には役に立ちません。

Windows OSを使用している場合は、「WinAPI」を使用できます。

以下はいくつかの手順です。以下の手順のコードは、MSDNのリンクの下にあります。コードは、用途に応じて必要に応じて変更できます。

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

  1. コール "EnumProcesses"。プロセスIDのリストを返します。

  2. "EnumProcesses"によるプロセスID戻りを使用して各プロセスを繰り返します。

  3. 上記のMSDNリンクに示すように、 "OpenProcess"と "GetModuleBaseName"を使用してプロセス名を探します。
  4. 上記の手順(手順3)で返されたプロセス名の文字列 "Outlook"を検索します。

これは私が知っている大まかな方法​​です。

関連する問題