枚舉進程 C語言怎么讓找到一個進程在內(nèi)存中的起始地址?
C語言怎么讓找到一個進程在內(nèi)存中的起始地址?程序執(zhí)行時,內(nèi)存中有代碼段和代碼堆。動態(tài)數(shù)據(jù)存儲在堆中。代碼段中沒有需要的數(shù)據(jù)?;具^程如下:1。枚舉系統(tǒng)中的所有進程,并找到所需的進程Id2。拍攝進程快照
C語言怎么讓找到一個進程在內(nèi)存中的起始地址?
程序執(zhí)行時,內(nèi)存中有代碼段和代碼堆。動態(tài)數(shù)據(jù)存儲在堆中。代碼段中沒有需要的數(shù)據(jù)?;具^程如下:1。枚舉系統(tǒng)中的所有進程,并找到所需的進程Id2。拍攝進程快照并獲取進程的堆信息。在堆中找到你想要的信息
如果你想自動,你可以直接在超級模塊中得到句柄(進程),但是有些東西不能自動。您只能通過匹配下標(biāo)或根據(jù)窗口的類型信息來獲取窗口的標(biāo)題、類名或進程這里有兩個如何獲取窗口的示例。我個人建議你不要自動得到它。您需要在早期手動獲取它,并在后期完全獲取它。方法1取所有窗口的列表()這是一種簡單的語言,然后根據(jù)窗口對應(yīng)的進程來判斷方法2:枚舉一個進程名的所有進程PID,然后枚舉進程中的所有父窗口,然后逐個過濾(根據(jù)事先使用comet assistant等工具獲得的下標(biāo)或窗口類名)得到窗口結(jié)果
枚舉頂層窗口枚舉桌面頂層窗口可能比枚舉進程容易。枚舉桌面的頂級窗口是使用enumwindows()函數(shù)完成的。不要使用getwindow()創(chuàng)建窗口列表,因為窗口之間復(fù)雜的父子關(guān)系和同級關(guān)系(z順序)很容易造成混淆,并使枚舉結(jié)果不準(zhǔn)確。EnumWindows()有兩個參數(shù),一個是指向回調(diào)函數(shù)的指針,另一個是用戶定義的lParam值。對于每個桌面窗口(或頂級窗口),它只調(diào)用一次回調(diào)函數(shù)。然后回調(diào)函數(shù)對窗口句柄進行一些處理,例如將其添加到列表中。這種方法確保枚舉結(jié)果不會被窗口的復(fù)雜層次關(guān)系所混淆。因此,一旦有了窗口句柄,就可以通過getwindowtext()獲得窗口標(biāo)題。