题目:
DoALLProcesses(参数)函数为接受一个函数指针,确保我下面代码成功:
DoALLProcesses( listEachProc);可以输出每个进程的基本信息。
DoALLProcesses(TerminateQQ);//终止qq
其中listEachProc和TerminateQQ是你自己定义的函数名。
目的:通过本次练习,掌握函数指针的使用,理解C语言中如何利用函数指针对相同框架代码重用。
分析:由提议可知DoALLProcesses为遍历进程的框架代码,具体看代码。
1
2 #include "stdafx.h"
3 #include <Windows.h>
4 #include <tlhelp32.h>
5 #include <iostream>
6 using namespace std;
7 //typedef bool (*DOEACHPROCFUN)(PROCESSENTRY32 &pe32, HANDLE hProcess);
8 bool listEachProc(PROCESSENTRY32 &pe32)//列出进程
9 {
10 static char flag=0; //判断是否是第一行
11 if (flag==0)
12 {
13 flag=1;
14
15 printf("%-30s%-10s%-15s%-15s\n","Process Name","PID","ThreadsCount","Priority");
16 }
17 _tprintf( _T("%-30s%-10ld%-15ld%-15ld\n"), pe32.szExeFile,pe32.th32ProcessID,
18 pe32.cntThreads,pe32.pcPriClassBase);
19 return TRUE;
20 }
21
22 bool terminateQQ(PROCESSENTRY32 &pe32)//若是QQ就终止
23 {
24 if(_tcsicmp(pe32.szExeFile,_T("QQ.exe"))==0)
25 {
26 HANDLE hProcess=OpenProcess(PROCESS_TERMINATE ,FALSE,pe32.th32ProcessID);
27 TerminateProcess(hProcess,0);
28 printf("A QQ process been terminated !\n");
29 }
30 return true;//表示继续查找
31
32 }
33
34 //DoALLProcesses 为枚举进程的框架代码,没找到一个,就会对它调用pfn所指向的函数
35
36 BOOL DoALLProcesses( bool ( *pfn)(PROCESSENTRY32 &pe32) )//注意函数指针做参数的语法
37 {
38 HANDLE hProcessSnap;
39 PROCESSENTRY32 pe32;
40
41 hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
42 if( hProcessSnap == INVALID_HANDLE_VALUE )
43 {
44 cerr<< "CreateToolhelp32Snapshot error\n" ;
45 return( FALSE );
46 }
47
48 pe32.dwSize = sizeof( PROCESSENTRY32 );
49 if( !Process32First( hProcessSnap, &pe32 ) )
50 {
51 cerr<<"Process32First " ;
52 CloseHandle( hProcessSnap );
53 return( FALSE );
54 }
55 do
56 {
57 if ( !pfn(pe32))//此处调用作为参数传进的函数指针(注意会根据pfn反回的值决定是否跳出循环)
58 break;
59 }
60 while( Process32Next( hProcessSnap, &pe32 ) );
61 CloseHandle( hProcessSnap );
62 return( TRUE );
63 }
64 int _tmain(int argc, _TCHAR* argv[])
65 {
66 DoALLProcesses(listEachProc);//列举所有进程
67 printf("\n\n");
68 DoALLProcesses(terminateQQ);//终止所有QQ进程
69 return 0;
70 }
71
posted on 2012-11-03 17:39
demons 阅读(1367)
评论(3) 编辑 收藏 引用 所属分类:
Program in Windows