Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
4.64 Кб
Скачать
#include "stdafx.h"

using namespace std;

BOOL GetProcessList();
void printError(TCHAR*);
BOOL GetProcessThreads();
BOOL ListProcessThreads(DWORD); 

int a;
char* i="ID";

int _tmain(int argc, _TCHAR* argv[])
{
 system("cls");
 cout<<"\n                                The seventh laboratory work "<<endl;
 cout<<"                              Threads and processes research"<<endl;
 getch();
 do
  {
   system("cls");
   cout<<"\n                                     Menu\n"<<endl;
   cout<<" 1.Processes sorting in decreasing order of priority"<<endl;
   cout<<" 2.Threads sorting in decreasing order of priority"<<endl;
   cout<<" 3.Exit"<<endl;
   do
	{
	 cout<<"\n   Vibirite punkt menu:"<<endl;
	 fflush(stdin);
     cin>>a;
     if(a<0||a>3)
      {
	   cout<<"\n   Vi dopustili oshibku!!!(1-3)"<<endl;
	   getch();
	  }
	}
   while(a<0||a>3);
   switch(a)
    {
	 case 1:
	  {
	   GetProcessList();
	   break;
	  }
	 case 2:
	  {  
	   GetProcessList();
	   GetProcessThreads();
	   break;
	  }
	}
  }
 while(a!=3);
 return 0;
}


BOOL GetProcessList()
 {
  int p=0;
  LONG temp;
  system("cls");
  HANDLE hProcessSnap;
  HANDLE hProcess;
  PROCESSENTRY32 pe32;
  PROCESSENTRY32 proc[50];
  hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  if(hProcessSnap==INVALID_HANDLE_VALUE)
   { 
    printError("CreateToolhelp32Snapshot(of processes)");
    return(FALSE);
   }
  pe32.dwSize = sizeof( PROCESSENTRY32);
  if(!Process32First(hProcessSnap,&pe32))
   {
    printError("Process32First");  
    CloseHandle(hProcessSnap);     
    return(FALSE);
   }
  do
   {
    proc[p]=pe32;
	p++;
   } 
  while(Process32Next(hProcessSnap,&pe32));
  for(int q=1;q<p;q++)
   {
    for(int r=0;r<p-1;r++)
	 {
	  if(proc[r].pcPriClassBase>proc[r+1].pcPriClassBase)
	   {
	    temp=proc[r].pcPriClassBase;
		proc[r].pcPriClassBase=proc[r+1].pcPriClassBase;
		proc[r+1].pcPriClassBase=temp;
	   }
	 }
   }
  for(int q=1;q<p;q++)
   {
    printf("PROCESS:%-25s",proc[q].szExeFile);
	printf("%-3s:%-3d",i,proc[q].th32ProcessID);
	printf("\tPriority Base:%d\n",proc[q].pcPriClassBase);
   }
  getch();
  CloseHandle( hProcessSnap );
  return( TRUE );
 }

BOOL ListProcessThreads(DWORD dwOwnerPID) 
 { 
  int j=0;
  LONG temp; 
  HANDLE hThreadSnap = INVALID_HANDLE_VALUE; 
  THREADENTRY32 te32; 
  THREADENTRY32 id[100];
  hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0); 
  if( hThreadSnap==INVALID_HANDLE_VALUE) 
  return( FALSE ); 
  te32.dwSize=sizeof(THREADENTRY32); 
  if(!Thread32First(hThreadSnap,&te32)) 
   {
    printError("Thread32First");  
    CloseHandle(hThreadSnap);     
    return(FALSE);
   }
  do 
   { 
    if(te32.th32OwnerProcessID==dwOwnerPID)
     {
	  id[j]=te32;
	  j++;
     }
   }
  while(Thread32Next(hThreadSnap,&te32)); 
  for(int k=1;k<j;k++)
   {
	for(int l=0;l<j-1;l++)
	 {
      if(id[l].tpBasePri>id[l+1].tpBasePri)  
	   {
	    temp=id[l].tpBasePri;
		id[l].tpBasePri=id[l+1].tpBasePri;
		id[l+1].tpBasePri=temp;
	   }
	 }
   }
  for(int k=0;k<j;k++)
   {
    printf("Thread ID:%-7dBase priority:%d\n",
	id[k].th32ThreadID,id[k].tpBasePri);
   }
  CloseHandle(hThreadSnap);
  return(TRUE);
 }

BOOL GetProcessThreads()
 {
  DWORD id; 
  cout<<"Enter process id:";
  fflush(stdin);
  cin>>id;
  HANDLE hProcessSnap;
  HANDLE hProcess;
  PROCESSENTRY32 pe32;
  hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  if(hProcessSnap == INVALID_HANDLE_VALUE)
   {
    printError("CreateToolhelp32Snapshot(of processes)");
    return( FALSE );
   }
  pe32.dwSize = sizeof(PROCESSENTRY32);
  if(!Process32First(hProcessSnap,&pe32))
   {
    printError("Process32First");
    CloseHandle(hProcessSnap);  
    return(FALSE);
   }
  do
   {
    if(id==pe32.th32ProcessID)
	 {
      system("cls");
	  cout<<"Process ID:"<<pe32.th32ProcessID<<endl<<"\n";
      ListProcessThreads(pe32.th32ProcessID);
	 }
   } 
  while(Process32Next(hProcessSnap,&pe32));
  getch();
  fflush(stdin);
  CloseHandle(hProcessSnap);
  return(TRUE);
 } 

void printError(TCHAR* msg)
 {
  DWORD eNum;
  TCHAR sysMsg[256];
  TCHAR* p;
  eNum = GetLastError();
  FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
         NULL, eNum,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),sysMsg, 256, NULL );
  p = sysMsg;
  while((*p>31)||(*p==9))
    ++p;
  do {*p--=0 ;}while((p>=sysMsg)&&((*p=='.')||(*p<33)));

  printf("\nWARNING: %s failed with error %d (%s)",msg,eNum,sysMsg);
 }


 
Соседние файлы в папке 7