我正在嘗試迭代當前在64位機器上運行的進程,EnumProcessModules與32位程序很好地工作,但對於64位的程序並不是很好,我嘗試了用DevC++實現EnumProcessModulesEx(我沒有使用visualstudio),但無法設置頭文件的工作,看到這個Question,所以想着是否有另一種出路?替代EnumProcessModulesEx?
在我的程序中,我需要知道某個特定exe執行的進程是否正在運行,進程可以是32位或64位,因此需要同時檢查這兩個進程。
我正在嘗試迭代當前在64位機器上運行的進程,EnumProcessModules與32位程序很好地工作,但對於64位的程序並不是很好,我嘗試了用DevC++實現EnumProcessModulesEx(我沒有使用visualstudio),但無法設置頭文件的工作,看到這個Question,所以想着是否有另一種出路?替代EnumProcessModulesEx?
在我的程序中,我需要知道某個特定exe執行的進程是否正在運行,進程可以是32位或64位,因此需要同時檢查這兩個進程。
EnumProcessModules
確實要求調用進程使用與目標進程相同的體系結構(32位與64位)。但是,對於您的用例,您不需要該功能。
它更有效(並沒有從比賽條件苦...)創建當前進程表的快照,然後遍歷該快照,尋找進程名稱:
呼叫CreateToolhelp32Snapshot
以創建過程表的快照
使用Process32First
和Process32Next
來迭代快照。
對於快照中的每個元素,請檢查szExeFile
字段(的PROCESSENTRY32
結構)以獲取可執行文件的名稱。
你可能想要做名稱的區分大小寫的比較,因爲在Windows上的文件名不區分大小寫。
非常感謝,完美的工作:) – StudentX
如果您只需要知道某個進程是否正在運行,那麼您需要什麼'EnumProcessModules'? –
@FrerichRaabe我遍歷當前運行的所有進程,使用GetModuleBaseName()獲取每個模塊的基本名稱,然後檢查返回的字符串與我正在尋找的進程,如if(basename.compare(「myexe.exe」)= = 0).... – StudentX
所以你想知道是否有某個給定的可執行文件名稱啓動的進程? –