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