題目:
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 閱讀(1379)
評論(3) 編輯 收藏 引用 所屬分類:
Program in Windows