共有回帖数  0  个 
	 
	
	
	
     
          
          
               
				
			 
				
					 
 
            
				   - 
						
						
							 
									本来不想发这个帖子的,因为这个程序主要是WindowsAPI的应用,不是你们熟悉的DOS编程,不是TurboC的函数不是什么很精辟的算法更不是什么什么的。 
但是自己急于想的到大家的评价和认同,就发了这个帖子,希望不浪费大家的时间。再说了,这是用C写的。 
说明: 
(1)程序的名字叫PK.exe,英文名就是Process Killer,中文叫进程杀手小王子,花名叫进程杀手,小名叫杀手。 
(2)用法:PK.exe [-p/-n] str_1 [str_2] [str_3]....[str_n] 
参数-p:按进程ID杀进程。 
参数-n:按进程名字杀进程,是默认的。 
参数str_n:你要杀的进程(不分大小写的)。 
例如:PK qq.exe Iexplore maxthon 这个命令将把QQ,你的IE浏览器和你的maxthon浏览器这3进程杀死(请试试看)。 
参数-h:帮助命令。 
参数-r:刷新进程列表。 
参数-a:关于这个程序。 
(3)没什么很重要的了。 
(4)这个在TC下是通不过的,我在xp下用dev-c++编译通过。 
(5)大家看不懂完全没有关系,这不能说明什么,(但是如果你是学Windows编程的就很有关系了)我只是想让大家用一用评价一下。 
(6)程序有1个主文件和2个头文件。 
(7)实在没什么很重要的了,那我就发了��
/*下面的保存为PK.c*/  
#includestdio.h 
#includeconio.h 
#include "Kill_in_DOS.h" 
/*函数声明*/ 
/*扫描系统进程返回句柄*/ 
ERRORCODE Krefresh(HANDLE *hProcessSnap); 
/*处理 main(int argc,char *argv[])的参数 
 nLong 就是参数的长度,argv是字符数组首地址,从第nBegin个字符开始,hProcessSnap是句柄*/  
ERRORCODE KDoWithParameterInDOS(int nLong, char **argv, int nBegin, HANDLE hProcessSnap); 
/*处理错误*/  
void KDoWithError(ERRORCODE errorCode); 
/*通过进程名字杀进程*/  
ERRORCODE KKillByName(HANDLE hProcessSnap, PROCESSENTRY32 pe32, char *szStr); 
/*通过进程ID杀进程*/  
ERRORCODE KKillByPID(HANDLE hProcessSnap, PROCESSENTRY32 pe32, DWORD dwProcessID); 
/*0===]============主函数只有这么一点 */ 
int main(int argc,char *argv[]) 
{ 
ERRORCODE errorCode; 
HANDLE hProcessSnap; 
KDoWithError(Krefresh(&hProcessSnap)); 
KDoWithError(KDoWithParameterInDOS(argc,argv,1,hProcessSnap)); 
 CloseHandle(hProcessSnap); 
 return 0; 
} 
/*0===]============处理 main(int argc, char *argv[])的参数 */ 
ERRORCODE KDoWithParameterInDOS(int nLong, char **argv, int nBegin, HANDLE hProcessSnap) 
{ 
int i; 
int nRank = nBegin; /*把开始的位置赋值给nRank*/  
 int nModeOfKill = K_NAME;/*杀进程的方式,默认是以进程名字杀进程*/  
 DWORD dwPID; 
 ERRORCODE errorCode = TRUE; 
 PROCESSENTRY32 pe32; 
 pe32.dwSize = sizeof(pe32); 
 errorCode = KDoWithaheadParameter(nLong, argv, &nRank, &nModeOfKill); 
 if (errorCode==IMMEDIATELY_RETURN) return TRUE; 
 if (errorCode==TRUE) 
 { 
 if (nModeOfKill==K_NAME) 
 for (i=nRank, nRank=1; i=nLong-1;i++) 
 { 
printf(""%s"n",argv); 
 errorCode = KKillByName(hProcessSnap, pe32, argv); 
 if (errorCode!=TRUE) errorCode=(++nRank); 
 } 
 if (nModeOfKill==K_PID) 
 for (i=nRank,nRank=1; i=nLong-1;i++) 
 { 
 errorCode = KCharToNum(argv, &dwPID); 
 if (errorCode!=TRUE) errorCode=(++nRank); 
 else 
 	{ 
 errorCode = KKillByPID(hProcessSnap, pe32, dwPID); 
 	 if (errorCode!=TRUE) errorCode=(++nRank); 
 } 
 } 
 return errorCode; 
 } 
 else return errorCode; 
}
/*把这个保存为Kill_in_DOS.h*/ 
#includewindows.h 
#includestdio.h 
#includeconio.h 
#include "KFunction.h" 
/*接口函数  
void KDoWithError(ERRORCODE errorCode); 
ERRORCODE KDoWithaheadParameter(int nLong,char **argv,int *nRank,int *nModeOfKill);*/ 
/*辅助函数 */ 
ERRORCODE KPrintProcess(); 
ERRORCODE KPrintHelp(); 
ERRORCODE KPrintInfo(); 
ERRORCODE KDoWithaheadParameter(int nLong, 
 char **argv, 
 int *nRank, 
 int *nModeOfKill) 
{ 
 while(*nRank=nLong) 
{ 
 if (argv[*nRank]==NULL && (*nRank)==1) {KPrintHelp();return IMMEDIATELY_RETURN;} 
  
 else if (KIfEqualStr(argv[(*nRank)],"-a")==TRUE && (*nRank)==1) 
 	{KPrintInfo();return IMMEDIATELY_RETURN;} 
  
 else if (KIfEqualStr(argv[(*nRank)],"-h")==TRUE && (*nRank)==1) 
{KPrintHelp();return IMMEDIATELY_RETURN;} 
else if (KIfEqualStr(argv[(*nRank)],"-r")==TRUE && (*nRank)==1) 
{if (KPrintProcess()!=TRUE)return PROCESS_SNAP_FAILED; 
 else return IMMEDIATELY_RETURN;} 
  
 else if (KIfEqualStr(argv[(*nRank)],"-p")==TRUE && (*nRank)==1) 
 { 
if ((*nRank)+2nLong) return SHORT_OF_PARAMETER; 
 *nModeOfKill=K_PID; 
 (*nRank)++; 
 continue; 
 } 
  
 else if (KIfEqualStr(argv[(*nRank)],"-n")==TRUE && (*nRank)==1) 
 { 
 if ((*nRank)+2nLong) return SHORT_OF_PARAMETER; 
 *nModeOfKill=K_NAME; 
 (*nRank)++; 
 continue; 
 } 
 else return TRUE; 
} 
  
return TRUE; 
} 
ERRORCODE KPrintProcess() 
{ 
 PROCESSENTRY32 pe32; 
 pe32.dwSize = sizeof(pe32); 
 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
  
  
 if (hProcessSnap==INVALID_HANDLE_VALUE) 
 { 
 return PROCESS_SNAP_FAILED; 
 } 
  
 BOOL bMore = Process32First(hProcessSnap,&pe32); 
 while (bMore) 
 { 
 printf("Process Name: %sn", pe32.szExeFile); 
 printf("Process ID : %unn", pe32.th32ProcessID); 
 bMore = Process32Next(hProcessSnap, &pe32); 
 } 
  
 CloseHandle(hProcessSnap); 
  
 getch(); 
 return TRUE; 
} 
ERRORCODE KPrintHelp() 
{ 
printf("nPK.exe [-n/-p] [-f] [file path] [-t] [time] str_1 [str_2] [str_3] ... [str_n]nn"); 
printf(" -n : Kill processes by name,it's default.n" ); 
printf(" -p : Kill processes by PID.n" ); 
printf(" str_n : they are the processes which you want to KILL! You must set one at least.n"); 
printf("nHere are other parameters :n"); 
printf(" -h : To have a Help.n"); 
printf(" -a : About this software.n"); 
printf(" -r : Refresh system process.n"); 
getch(); 
return IMMEDIATELY_RETURN; 
} 
ERRORCODE KPrintInfo() 
{ 
printf("nProcess Killernn" ); 
printf("Version : 1.0n" ); 
printf("Made by : PTSoft PTn" ); 
printf("History : v1.0 2005-07-15 12:15n" ); 
printf("Statement:n" ); 
printf(" This is a free software which I had spent 2 days and nightes,n" ); 
printf("very painstaking but worthy. Thank you!n" ); 
 getch(); 
return IMMEDIATELY_RETURN; 
} 
void KDoWithError(ERRORCODE errorCode) 
{ 
 switch (errorCode) 
 { 
case NOT_NUMBER: 
 printf("time is not right.n"); 
 case SHORT_OF_PARAMETER: 
 printf("No enough parameter.n"); 
 break; 
 case PROCESS_SNAP_FAILED: 
 printf("System Process snapshot is unsuccessfuln"); 
 getch();exit(0); 
 break; 
 case TRUE: 
 break; 
 default: 
 printf("%d processes could not been killedn",errorCode-1); 
 break; 
 } 
}
/*把这个保存为 KFunction.h */ 
#includewindows.h 
#includetlhelp32.h 
#define ERRORCODE int 
#define UNABLE_TO_KILL -1 
#define NOT_NUMBER -2 
#define UNKNOWN_PROCESS -3 
#define UNKNOWN_FILE -4 
#define SHORT_OF_PARAMETER -5 
#define PROCESS_SNAP_FAILED -6 
#define IMMEDIATELY_RETURN -7 
#define K_NAME 2 
#define K_PID 3 
/* 接口函数 
ERRORCODE Krefresh(HANDLE *hProcessSnap); 
ERRORCODE KKillByName(HANDLE hProcessSnap, PROCESSENTRY32 pe32, char *szStr); 
ERRORCODE KKillByPID(HANDLE hProcessSnap, PROCESSENTRY32 pe32, DWORD dwProcessID);*/ 
/* 辅助函数*/ 
BOOL KTerminateProcessID(DWORD dwID); 
BOOL KIfequalStrAndProcess(char *szStr ,char *szProcess); 
BOOL KIfEqualStr(char *szStr1, char *szStr2); 
ERRORCODE KCharToNum(char * szStr,DWORD *dwPID); 
ERRORCODE KKillByName(HANDLE hProcessSnap, PROCESSENTRY32 pe32, char *szStr) 
{ 
 BOOL bMore = Process32First(hProcessSnap,&pe32); 
 while (bMore) 
 { 
 if (KIfequalStrAndProcess(szStr, pe32.szExeFile)==TRUE) 
 { 
 if(KTerminateProcessID(pe32.th32ProcessID)==FALSE) return UNABLE_TO_KILL; 
 else return TRUE; 
 } 
 bMore = Process32Next(hProcessSnap, &pe32); 
 } 
 return UNKNOWN_PROCESS; 
} 
ERRORCODE KKillByPID(HANDLE hProcessSnap, PROCESSENTRY32 pe32, DWORD dwProcessID) 
{ 
 BOOL bMore = Process32First(hProcessSnap,&pe32); 
 while (bMore) 
 { 
 if (dwProcessID==pe32.th32ProcessID) 
 { 
 if(KTerminateProcessID(pe32.th32ProcessID)==FALSE) return UNABLE_TO_KILL;  
 else return TRUE; 
 } 
 bMore = Process32Next(hProcessSnap, &pe32); 
 } 
  
 return UNKNOWN_PROCESS; 
} 
BOOL KTerminateProcessID(DWORD dwID) 
{ 
 BOOL bRet = FALSE; 
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID); 
 if (hProcess!=NULL) 
 { 
 bRet = TerminateProcess(hProcess, 0); 
 } 
 CloseHandle(hProcess); 
 return bRet; 
} 
ERRORCODE Krefresh(HANDLE *hProcessSnap) 
{ 
*hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
if (*hProcessSnap==INVALID_HANDLE_VALUE) 
 { 
 return PROCESS_SNAP_FAILED; 
 } 
 else return TRUE; 
} 
ERRORCODE KCharToNum(char * szStr,DWORD *dwPID) 
{ 
 int i = 0; 
 DWORD dwSuccReturn = 0; 
 DWORD dwFailRegPID = *dwPID; 
  
 while( (szStr=48 && szStr=57) ) 
 { if (i=15) dwSuccReturn = dwSuccReturn*10+(szStr[i++]-48); } 
  
 if ( szStr==' ' || szStr=='n' ) 
 {*dwPID=dwSuccReturn;return TRUE;} 
 else 
 {*dwPID = dwFailRegPID;return FALSE;} 
} 
BOOL KIfequalStrAndProcess(char *szStr ,char *szProcess) 
{ 
 int i; 
 if (szStr==NULL && szProcess==NULL) return FALSE; 
 for (i=0; ;i++) 
 { 
 if (szStr==' ' && (szProcess=='.' || szProcess==' ')) return TRUE; 
 if (szStr==szProcess) continue; 
 if (((szStr=65 && szStr=90) || (szStr=97 && szStr=122)) && 
 ((szProcess=65 && szProcess=90) || (szProcess=97 && szProcess=122))) 
 {if (szStr-32==szProcess || szStr==szProcess-32) continue; 
 else return FALSE;} 
 else return FALSE; 
 } 
} 
BOOL KIfEqualStr(char *szStr1, char *szStr2) 
{ 
 int i; 
 if (szStr1==NULL && szStr2==NULL) return FALSE; 
 for (i=0; ;i++) 
 { 
  
 if (szStr1==' ' && szStr2==' ') return TRUE; 
 if (szStr1==szStr2) continue; 
 if (((szStr1=65 && szStr1=90) || (szStr1=97 && szStr1=122)) && 
 ((szStr2=65 && szStr2=90) || (szStr2=97 && szStr2=122))) 
 {if (szStr1-32==szStr2 || szStr1==szStr2-32) continue; 
 else return FALSE;} 
 else return FALSE; 
 } 
}
完毕,收工! 
等着大家的回复…��
							 
							 
							 
							  
							  
							  楼主 2016-03-16 12:37 回复
						 
						 
           
          
          
         
   
         
      
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知