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 遍歷程序快照。輪流顯示每...