VC中列舉程序,及獲取程序相關資訊的資料整理

2021-04-09 00:11:21 字數 2572 閱讀 6510

1.列舉所有的程序

方法很多,這裡用enumprocesses這個方法

dword aprocesses[1024], cbneeded, cprocesses;

unsigned int i;

if ( !enumprocesses( aprocesses, sizeof(aprocesses), &cbneeded ) )

return;

cprocesses = cbneeded / sizeof(dword);

for ( i = 0; i < cprocesses; i++ )

printprocessnameandid( aprocesses[i]);

aprocesses陣列裡包含了所有程序id,使用enumprocesses需要安裝sdk,並且需要

header: declared in psapi.h.

library: use psapi.lib.

這個函式在msdn上有詳細的說明

2.根據程序id獲取程序檔名

有了程序id  dword  dwprocessid

tchar szprocessname[max_path] = _t("");

tchar szprocesspath[max_path] = _t("");

handle hprocess = null;

hprocess = openprocess( process_query_information |

process_vm_read,

false, dwprocessid);

if(hprocess != null)

else

}3.根據程序的控制代碼來判斷,該程序是否是系統程序

bool  issysprocess(handle hprocess)

//2.gettokeninformation

ptoken_user  ptoken_user = null;

dword        dwtokenuser = 0l;

if(htoken != null)

if(dwtokenuser>0)

if(ptoken_user != null)

//3.lookupaccountsid...

tchar szaccname[max_path] = ;

tchar szdomainname[max_path] = ;

if(bretval != false && ptoken_user != null)

}//4.compant

if(bretval != false)

}//4.free ptoken_user

if (ptoken_user != null)

//5.closehandle

if(htoken != null)

return bretval ;

}返回true,那麼就說明是系統程序

如果返回false,說明不是系統程序,是使用者的

這些函式在msdn上都有說明的,我記得這些例子也是從上面獲得的,呵呵

4.根據可執行檔名,獲得這個檔案的圖示

shfileinfo            shfileinfo   = ;

::shgetfileinfo(szprocesspath,0,&shfileinfo,sizeof(shfileinfo),shgfi_icon);

shfileinfo.hicon儲存的,就是這個可執行檔案的圖示控制代碼,可以直接拿來用

比如呼叫cimagelist的成員函式int cimagelist::add( hicon hicon );

插入cimagelist

如果想把可執行檔案的圖示插入listctrl,做了乙個類似於任務管理器一樣的程序管理器

那麼有個更簡單的辦法

himagelist himagelist = null;

bretval = shell_getimagelists(&himagelist,null);

獲取系統的imagelist

cimagelist  m_image

if(himagelist != null)

m_image.attach(himagelist);

然後m_listctrl.setimagelist(&m_image,lvsil_**all);

shfileinfo            shfileinfo   = ;

::shgetfileinfo(szprocesspath,0,&shfileinfo,sizeof(shfileinfo),shgfi_sysiconindex);

這樣,根據shfileinfo.iicon

可以獲得這個圖示在imagelist的序號,然後直接呼叫

clistctrl::insertitem

int insertitem(

int nitem,

lpctstr lpszitem,

int nimage );

把帶圖示的行插入listctrl中,這是個很簡單的方法了

5、結束程序

好了,整理了那麼多,累了,就這麼多吧,以後再補充吧~~ ^_^ 

VC列舉程序方法

在windows 2000以上的ms作業系統,通過windows的任務管理器可以列出當前系統的所有活動程序,在windows xp中,更是在控制台下增加了一條tasklist命令,讓系統下的所有程序無所遁行。這一切是怎麼實現的呢?方法二 第二種方法也很常見,通過msdn就可以找到例子 它是通過psa...

VC獲取系統程序列表 查詢程序 關閉程序

1 獲取系統程序列表 include 宣告快照函式標頭檔案 processentry32 pe32 pe32.dwsize sizeof pe32 if hprocesssnap invalid handle value 遍歷程序快照。輪流顯示每個程序的資訊 cstring strprcnameid...

VC獲取系統程序列表 查詢程序 關閉程序

1 獲取系統程序列表 cpp view plain copy include 宣告快照函式標頭檔案 processentry32 pe32 pe32.dwsize sizeof pe32 handle if hprocesssnap invalid handle value 遍歷程序快照。輪流顯示每...