procedure CheckParentProc; var //检查自己的进程的父进程 Pn: TProcesseNtry32; sHandle:THandle; H,ExplProc,ParentProc:Hwnd; Found:Boolean; Buffer:array[0..1023]of Char; Path:string; begin H:= 0; ExplProc:= 0; ParentProc:= 0; //得到Windows的目录; SetString(Path,Buffer,GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1)); Path:= UpperCase(Path)+ '\Explorer.EXE';//得到Explorer的路径 //得到所有进程的列表快照 sHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); Found:= Process32First(sHandle,Pn);//查找进程 while Found do //遍历所有进程 begin if Pn.szExeFile = ParamStr(0) then //自己的进程 begin ParentProc:= Pn.th32ParentProcessID;//得到父进程的进程ID //父进程的句柄 H:= OpenProcess(PROCESS_ALL_ACCESS,True,Pn.th32ParentProcessID); end else if UpperCase(Pn.szExeFile)= Path then begin ExplProc:= Pn.th32ProcessID;//Ex plorer的PID Found:= Process32Next(sHandle,Pn);//查找下一个 end;
//父进程不是Explorer,是调试器…… if ParentProc <> ExplProc then begin TerminateProcess(H,0); while 1<>1 do Application.MessageBox('', '', MB_OK + MB_ICONSTOP); end; end; end;