2015-04-20 70 views
3

我有一個C++程序,涉及打開一個程序(讓我們說calculator.exe)。我需要能夠測試以確保這個程序是開放的。這是我的意思的一個例子。有沒有一種方法來驗證程序是從試圖打開它的C++程序打開的(Windows)?

#include <iostream.h> 

int main() 
{ 
    system("start calculator"); 
    if (xxxxx) 
     cout << "Calculator is running.\n"; 

    cin.get(); 
    return 0; 
} 

什麼會我需要把爲XXXXX,測試計算器是否打開?

+4

使用實際的API調用而不是'system',你會得到一個很好的方便的句柄。 – chris

+0

不要使用'iostream.h',使用'iostream' – chbaker0

+0

等一下!你打算如何處理這些信息。如果您測試應用程序正在運行,並且計劃執行某些知道它已經打開的計劃,那麼如果應用程序在您檢查的時間和您採取行動的時間之間關閉,您將執行什麼操作? –

回答

5

您可以通過進程名稱找到它,也可以通過窗口標題找到它。

#include <iostream> 
#include <windows.h> 
#include <TlHelp32.h> 

DWORD find_by_process_name(const wchar_t* process_name) 
{ 
    DWORD pid = 0; 
    HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPMODULE, 0); 
    if (hndl) 
    { 
     PROCESSENTRY32 process = { sizeof(PROCESSENTRY32) }; 
     Process32First(hndl, &process); 
     do 
     { 
      if (_wcsicmp(process.szExeFile, process_name) == 0) 
      { 
       pid = process.th32ProcessID; 
       break; 
      } 
     } while (Process32Next(hndl, &process)); 

     CloseHandle(hndl); 
    } 

    return pid; 
} 

int main() 
{ 
    ShellExecuteA(0, "open", "calc.exe", 0, 0, SW_SHOWNORMAL); 
    if (find_by_process_name(L"calc.exe")) 
     std::cout << "calculator is running\n"; 
    return 0; 
} 
相關問題