222上位机VC MFC获取系统运行中全部程序
222上位机VC MFC获取系统运行中全部程序 功能展示 我们打开资源管理器软件都可以看到当前系统在运行的程序,我们当前例程也实现当前系统运行程序的获取与显示,我们可根据自己的程序开发需求,进一步对获取的程序进行操作,效果如图,点击<获得系统运行中全部程序>按钮,可将全部运行中程序实现罗列在列表框中; 要点提示 系统中运行的程序可以使用函数Process32First()Process32Next()组合实现;process32First 是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄; BOOL WINAPI Process32First( HANDLE hSnapshot, LPPROCESSENTRY32 lppe); typedef struct tagPROCESSENTRY32 { DWORD dwSize; // 结构大小; DWORD cntUsage; // 此进程的引用计数; DWORD th32ProcessID; // 进程ID; DWORD th32DefaultHeapID; // 进程默认堆ID; DWORD th32ModuleID; // 进程模块ID; DWORD cntThreads; // 此进程开启的线程计数; DWORD th32ParentProcessID;// 父进程ID; LONG pcPriClassBase; // 线程优先权; DWORD dwFlags; // 保留; WCHAR szExeFile[MAX_PATH]; // 进程全名; } PROCESSENTRY32; 此函数往往和函数Process32Next(HandlehsnapShot,LPPROCESSENTRY32 lppe) 搭配使用,用来枚举当前系统快照相关的所有进程。 实现功能 1.新建基于对话框的应用程序 2.拖拽一按钮控件关联函数 - void CGkbc8Dlg::OnGet()
- {
- CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST1);
- HANDLE toolhelp=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- if(toolhelp==NULL)
- return ;
- PROCESSENTRY32 processinfo;
- int i=0;
- CString str;
- BOOL bContinue=Process32First(toolhelp,&processinfo);
- while(bContinue)
- {
- pListCtrl->InsertItem(i,"");
- pListCtrl->SetItemText(i,0,processinfo.szExeFile);
- str.Format("%08x",processinfo.th32ProcessID);
- pListCtrl->SetItemText(i,1,str);
- str.Format("%08x",processinfo.th32ParentProcessID);
- pListCtrl->SetItemText(i,2,str);
- bContinue=Process32Next(toolhelp,&processinfo);
- i++;
- }
- }
复制代码拖拽一列表控件ID为IDC_LIST1用于显示系统运行中全部程序 3.在对话框初始函数OnInitDialog()中对列表框控件初始化 - CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST1);
- pListCtrl->ModifyStyle(0,LVS_REPORT,0);
- pListCtrl->SetExtendedStyle(LVS_EX_GRIDLINES);
- pListCtrl->InsertColumn(0,"进程",LVCFMT_LEFT,150,0);
- pListCtrl->InsertColumn(1,"ID",LVCFMT_CENTER,75,1);
- pListCtrl->InsertColumn(2,"父进程",LVCFMT_CENTER,75,2);
复制代码我们来演示下功能实现的整个过程
|