2012-12-21 29 views
1

我正在嘗試迭代當前在64位機器上運行的進程,EnumProcessModules與32位程序很好地工作,但對於64位的程序並不是很好,我嘗試了用DevC++實現EnumProcessModulesEx(我沒有使用visualstudio),但無法設置頭文件的工作,看到這個Question,所以想着是否有另一種出路?替代EnumProcessModulesEx?

在我的程序中,我需要知道某個特定exe執行的進程是否正在運行,進程可以是32位或64位,因此需要同時檢查這兩個進程。

+0

如果您只需要知道某個進程是否正在運行,那麼您需要什麼'EnumProcessModules'? –

+0

@FrerichRaabe我遍歷當前運行的所有進程,使用GetModuleBaseName()獲取每個模塊的基本名稱,然後檢查返回的字符串與我正在尋找的進程,如if(basename.compare(「myexe.exe」)= = 0).... – StudentX

+0

所以你想知道是否有某個給定的可執行文件名稱啓動的進程? –

回答

1

EnumProcessModules確實要求調用進程使用與目標進程相同的體系結構(32位與64位)。但是,對於您的用例,您不需要該功能。

它更有效(並沒有從比賽條件苦...)創建當前進程表的快照,然後遍歷該快照,尋找進程名稱:

  1. 呼叫CreateToolhelp32Snapshot以創建過程表的快照

  2. 使用Process32FirstProcess32Next來迭代快照。

  3. 對於快照中的每個元素,請檢查szExeFile字段(的PROCESSENTRY32結構)以獲取可執行文件的名稱。

你可能想要做名稱的區分大小寫的比較,因爲在Windows上的文件名不區分大小寫。

+0

非常感謝,完美的工作:) – StudentX