Федеральное агентство связи
Сибирский государственный университет телекоммуникаций и информатики
«Диспетчер задач»
Выполнили:
Группа П-92
Проверил: профессор
Новосибирск, 2011
Задание к курсовой работе
Создать программу, выводящую информацию о запущенных процессах в системе, способную останавливать выбранные процессы, выставлять приоритет процессам, запускать новые процессы.
Описаниефункцийиструктур
void PrintProc(DWORD processID,int &k);
Функция, выводящая информацию о процессе с данным идентификатором.
void List();
Функция, получающая индефикаторы процессов, запущенных в системе.
void Term();
Данная функция завершает процесс с данным идентификатором.
void Setprior();
Функция выставляет какой-либо приоритет для процесса с данным индефикатором.
void Run();
Функция запускает процесс.
void view();
Данная функция выводит информацию о используемых процессом библиотек.
void menu();
Функция выводит на экран меню программы.
Внешний вид программы.
Листинг
программы
Сервер
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include "psapi.h"
using namespace std;
void menu();
void Term();
void Setprior();
void view();
void CurPos(int x,int y){
HANDLE hConsole;
COORD crd;
crd.X=x;
crd.Y=y;
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsole,crd);
}
void PrintProc(DWORD processID,int &k)
{
char szProcessName[MAX_PATH]="<unknown>";
DWORD priorityClass;
char y;
FILETIME fst,fet,fut,fkt;
SYSTEMTIME sst,set,sut,skt;
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
if (NULL != hProcess ){
HWND hWnd;
HMODULE hMod;
DWORD cbNeeded;
char className[95];
char title[110];
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
{
GetModuleBaseName(hProcess,hMod,szProcessName,sizeof(szProcessName)/sizeof(char));
}
}
priorityClass=GetPriorityClass(hProcess);
char prior[10]={'\0'};
switch(priorityClass){
case HIGH_PRIORITY_CLASS:
strcpy(prior,"high");
break;
case IDLE_PRIORITY_CLASS:
strcpy(prior,"idle");
break;
case NORMAL_PRIORITY_CLASS:
strcpy(prior,"normal");
break;
case REALTIME_PRIORITY_CLASS:
strcpy(prior,"realtime");
break;
default:
//strcpy(prior,"<unknown>");
return;
break;
}
GetProcessTimes(hProcess,&fst,&fet,&fkt,&fut);
FileTimeToSystemTime(&fst,&sst);
FileTimeToSystemTime(&fet,&set);
FileTimeToSystemTime(&fkt,&skt);
FileTimeToSystemTime(&fut,&sut);
if(k==0){
k++;
printf("%c %30s %c %10s %c %10s %c %13s %c %10s %c\n",179,"ProcessName",179,"Priority",179,"processID",179,"Start",179,"Kernel",179);
printf("%c",195);
for(int i=0;i<33;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(197);
for(int i=0;i<15;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(180);
printf("\n");
}
printf("%c %30s %c %10s %c %10u %c %2d:%2d:%2d:%3d %c %2d:%2d:%3d %c\n",179,szProcessName,179,prior,179,processID,179,sst.wHour+7,sst.wMinute,sst.wSecond,sst.wMilliseconds,179,skt.wMinute,skt.wSecond,skt.wMilliseconds,179);
if(k<11){
printf("%c",195);
for(int i=0;i<33;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(197);
for(int i=0;i<15;i++)
putchar(196);
putchar(197);
for(int i=0;i<12;i++)
putchar(196);
putchar(180);
printf("\n");
}
else{
printf("%c",192);
for(int i=0;i<33;i++)
putchar(196);
putchar(193);
for(int i=0;i<12;i++)
putchar(196);
putchar(193);
for(int i=0;i<12;i++)
putchar(196);
putchar(193);
for(int i=0;i<15;i++)
putchar(196);
putchar(193);
for(int i=0;i<12;i++)
putchar(196);
putchar(217);
printf("\n");
}
k++;
if(k>11){
CurPos(92,3);
printf("Stop? - s\n");
CurPos(92,4);
printf("Continue? - c\n");
CurPos(92,5);
printf("Terminate? - t\n");
CurPos(92,6);
printf("Set priority? - p\n");
CurPos(92,7);
printf("View modules? - v\n");
CurPos(92,8);
y=getch();
switch(y){
case 's':
k=-1;
break;
case 'c':
k=0;
break;
case 't':
Term();
k=-1;
break;
case 'p':
Setprior();
k=-1;
break;
case 'v':
k=-1;
view();
break;
default:
k=0;
break;
}
system("cls");
}
CloseHandle( hProcess );
}
void List(){
int k=0;
DWORD aProcesses[1024], cbNeeded, cProcesses;
int i;
if (!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))
return;
cProcesses=cbNeeded/sizeof(DWORD);
for (i=0;i<cProcesses;i++)
if(aProcesses[i]!=0){
if(i==cProcesses-1)
k=11;
PrintProc(aProcesses[i],k);
if(k==-1)
return;
}
menu();
}
void Term(){
HANDLE hProcess;
DWORD processID;
CurPos(92,10);
printf("pID:");
scanf("%u",&processID);
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,processID);
// GetExitCodeProcess(hProcess,lpExitCode);
TerminateProcess(hProcess,-9);
}
void Setprior(){
HANDLE hProcess;
DWORD priorityClass;
DWORD processID;
char ch;
CurPos(92,10);
printf("pID:");
scanf("%u",&processID);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
CurPos(92,11);
printf("priority(h\\i\\n\\r):");
ch=getch();
switch(ch){
case 'h':
priorityClass=HIGH_PRIORITY_CLASS;
break;
case 'i':
priorityClass=IDLE_PRIORITY_CLASS;
break;
case 'n':
priorityClass=NORMAL_PRIORITY_CLASS;
break;
case 'r':
priorityClass=REALTIME_PRIORITY_CLASS;
default:
return;
}
SetPriorityClass(hProcess,priorityClass);
}
void Run(){
STARTUPINFO si;
PROCESS_INFORMATION pi;
char name[256];
int l,i;
char s[256]={'\0'};
bool q=0;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
system("cls");
printf("Name process: ");
gets(name);
l=strlen(name);
for(i=0;i<l;i++)
if(name[i]=='\\'){
q=1;
break;
}
if(!q){
strcat(s,"C:\\Windows\\");
strcat(s,name);
strcpy(name,s);
}
if(!CreateProcess(name,NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL, NULL,&si,&pi)){
printf("System error code: %i\n",GetLastError());
}
}
void view(){
DWORD processID;
HANDLE hProcess;
HMODULE* modHndls;
DWORD b_alloc=8, b_needed;
char modName[MAX_PATH];
int i;
CurPos(92,10);
printf("pID:");
scanf("%u",&processID);
system("cls");
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
while(1){
modHndls=(HMODULE*)malloc(b_alloc);
EnumProcessModules(hProcess,modHndls,b_alloc,&b_needed);
if(b_alloc>=b_needed)
break;
else{
free(modHndls);
b_alloc*=2;
}
}
printf("%c %10s %c %22s %c %35s %c\n",179,"HMODULE",179,"Base Name",179,"File Name",179);
printf("%c",195);
for(int i=0;i<12;i++)
putchar(196);
putchar(197);
for(int i=0;i<24;i++)
putchar(196);
putchar(197);
for(int i=0;i<37;i++)
putchar(196);
putchar(180);
printf("\n");
for(i=0;i<b_needed/sizeof(DWORD);i++){
GetModuleBaseName(hProcess, modHndls[i],(LPSTR)modName,sizeof(modName
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.