要想獲取系統的程序資訊,有個很好的方法,就是用toolhelp,其提供的介面可以方便的滿足你的要求,如下:
#include //首先匯入標頭檔案
//pe就是我們獲取的程序結構體
//dosomething
fok = process32next(m_hsnapshot, &pe);//還有嗎?
}其中結構體processentry32定義如下:
typedef struct tagprocessentry32
processentry32;
方法二:
我們可以看到上面的方法簡單,但是獲取的程序資訊也相對簡單,下面有個方法可以獲取相對詳細程序資訊。
在windows自帶的ntdll.dll中有個介面ntquerysysteminformation可以用來查詢系統資訊的,介面定義如下:
dword (__stdcall *ntquerysysteminformation )(ulong,pvoid,ulong,ulong);
其實系統裡面的每個程序都分配乙個記憶體快,呼叫上述的介面我們就可以去查詢系統指定記憶體塊的資訊了,而程序與程序之間有乙個偏移量,所有我們只要知道了前乙個程序的資訊和其偏移量,就可以得到下個程序的位址了。
》首先定義介面ntquerysysteminformation
dword (__stdcall *ntquerysysteminformation )(ulong,pvoid,ulong,ulong);
》然後訪問dll介面
if (!ntquerysysteminformation)
ntquerysysteminformation=(dword (__stdcall*)(ulong,pvoid,ulong,ulong))
getprocaddress(getmodulehandle("ntdll.dll"),"ntquerysysteminformation");
》列舉程序
pbyte pbyinfo = null;//程序位址
pprocessinfo pprocessinfo;//程序結構
dword dwsize = 0x4000;//程序最小探索塊
wchar *pname;
bool bret = false;
pbyinfo=(pbyte) malloc(dwsize);//分配記憶體
if (pbyinfo)
pprocessinfo = ( pprocessinfo ) pbyinfo;//得到第乙個程序的位址了
//列舉所有的程序
while(1)
//do something
if ( pprocessinfo->dwrelativeoffset == 0 )//如果偏移量為0,沒有程序了
break;
//獲取下乙個程序位址
pprocessinfo=(pprocessinfo)((pbyte)pprocessinfo+pprocessinfo->dwrelativeoffset);
程序結構體定義如下:
typedef struct
_processinfo, *pprocessinfo;
獲取系統當前的程序及模組資訊
1 bool enumprocesses dword lpidprocess,dword cb,dword cbneeded 獲取當前系統的程序id列表。lpidprocess為儲存程序id的陣列,cb為陣列大小,cbneeded為實際的系統程序數 2 handle openprocess dwor...
sigar獲取程序資訊
最近工作中用到sigar,要用sigar獲得相關的cpu資訊,記憶體資訊,程序資訊等。但是大多數還是能在網上找到的。就只有獲得程序的資訊怎麼找也找不以。今天貼出來和大家分享一下,還請各位指教。獲取程序的相關資訊以及對程序資訊進行包裝 public listgetprocessinfo process...
android5 0以上獲取系統程序資訊
那以後要獲取系統執行的後台程序這個方法用不了了,谷歌了一大把,終於找到了解決的方法,獲取系統執行的程序 如下所示 這是乙個實體類,就是描述應用的一些資訊 public class taskinfo public void setcbchecked boolean cbchecked public d...