主要是锻炼一下自己关于进程操作方面的能力 最主要是 要用好MSDN
不废话 上代码
1
2 void CEnumProcessDlg::OnBnClickedOk()
3 {
4 DWORD dwPIDPrcess[1024];
5 // DWORD dwArrSize;
6 DWORD dwSize;
7
8 ::EnumProcesses(dwPIDPrcess , 1024 , &dwSize); //枚举进程 拿到PID
9 int iCount = dwSize / sizeof(DWORD);
10 for (int i = 0 ; i < iCount ; i++) //枚举所有进程
11 {
12 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS , TRUE , dwPIDPrcess[i]);
13 HMODULE hProcessModule;
14 DWORD dwEnumProcessModuleSize;
15 TCHAR szProcessName[512];
16 if (hProcess != INVALID_HANDLE_VALUE) //打开了进程
17 {
18 if (EnumProcessModules(hProcess , &hProcessModule , sizeof(HMODULE), &dwEnumProcessModuleSize))
19 {
20 GetModuleBaseName(hProcess , hProcessModule , szProcessName , 512);
21 HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE , dwPIDPrcess[i]);
22 if (hSnapShot == INVALID_HANDLE_VALUE)
23 {
24 CloseHandle(hProcess);
25 continue;
26 }
27 MODULEENTRY32 me32;
28 me32.dwSize = sizeof(MODULEENTRY32);
29 if ( !Module32First(hSnapShot , &me32))
30 {
31 //添加出错代码
32 CloseHandle(hSnapShot);
33 CloseHandle(hProcess);
34 continue;
35 }
36 CString strTemp;
37 strTemp.Format(_T("%d") , dwPIDPrcess[i]);
38 m_strProcessName += szProcessName ; //进程名称
39 m_strProcessName += _T(" ");
40 m_strProcessName +=me32.szExePath; //程序的存放路径
41 m_strProcessName += _T(" ");
42 m_strProcessName += strTemp; //PID
43 m_strProcessName += _T("\r\n");
44
45 UpdateData(FALSE);
46 CloseHandle(hSnapShot);
47 CloseHandle(hProcess);
48 }//
49
50 }
51 }
52 //OpenProcess
53 //OnOK();
54 }
代码很短吧...
上图片 执行的效果图
posted on 2009-08-15 17:47
李佳 阅读(215)
评论(0) 编辑 收藏 引用