Диспетчер задач. WinAPI

Автор: Олег Иванов, 28 Сентября 2010 в 11:30, курсовая работа

Описание работы

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1.1 Общие сведения
Наименование системы
Система диспетчеризации процессов.
Плановые сроки начала и окончания работы
Разработка данной системы была начата 20.02.2008 г.
Завершение разработки планируется на 25.04.2008 г.
Порядок оформления работы
1. Обоснование необходимости разработки программы
Постановка задачи.
Сбор исходных материалов.
Выбор и обоснование критериев эффективности и качества разрабатываемой программы.
2. Научно-исследовательские работы
Определение структуры входных и выходных данных.
Предварительный выбор методов решения задач.
Обоснование целесообразности применения ранее разработанных программ.
Определение требований к техническим средствам.
Обоснование принципиальной возможности решения поставленной задачи.
3. Разработка и утверждение технического задания
Определение требований к программе.
Разработка технико-экономического обоснования разработки программы.
Определение стадий, этапов и сроков разработки программы и документации на нее.
Выбор языков программирования.
Согласование и утверждение технического задания.
1.2. Назначение и цели создания системы
1.2.1. Назначение системы
Программный продукт предназначен для отображения списка процессов системы, получения дополнительной информации о процессах и работы с ними.
1.2.2 .Цели создания системы
Программный продукт предназначен для отображения списка запущенных процессов. Программа должна включать в себя средства по завершению процесса, установке приоритета процесса, выключению, перезагрузке и смене профиля компьютера.
1.3. Характеристики объектов систематизации
1.3.1. Краткие сведения об объекте автоматизации
Объектом автоматизации является представление списка процессов, запущенных в системе, в виде удобном для восприятия пользователем и реализация операций над ними.
1.3.2. Сведения об условиях эксплуатации
Данная система проектируется лишь в учебных целях, вследствие чего будет эксплуатироваться узким кругом лиц на домашних персональных компьютерах.
1.4. Требования к системе

Работа содержит 1 файл

диспетчер задач.doc

— 905.50 Кб (Скачать)

case ID_BUTTON_O_S: 
 

/////////////////////обновление  информации в списке/////////////////////////

      num=0;

      kursor=SendMessage(hCombo,LB_GETCURSEL, 0, 0);

    ListProcesses(hCombo);

      SendMessage(hCombo,LB_SETCURSEL, kursor, 0);

  SendMessage(hEdit, EM_SETSEL, 0, 6);

  char* buf;

  buf = new char;

  itoa(num,buf,10);

  SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM)buf);

//////////////////////////////////////////////////// 
 

      return 0; 

case ID_BUTTON_KILL:

                i = SendMessage (hCombo, LB_GETCURSEL, 0, 0) ;

                        ID = (DWORD)SendMessage (hCombo, LB_GETITEMDATA,

                              (WPARAM)i, 0) ;

                        if(MessageBox(hwnd,TEXT("Вы уверены"),

                              TEXT("Внимание"),MB_YESNO| MB_ICONWARNING)==IDYES) 

                              KillProcess(ID);//завершение процесса!!!! 
 

/////////////////////обновление  информации в списке/////////////////////////

      num=0;

      kursor=SendMessage(hCombo,LB_GETCURSEL, 0, 0);

    ListProcesses(hCombo);

      SendMessage(hCombo,LB_SETCURSEL, kursor, 0);

  SendMessage(hEdit, EM_SETSEL, 0, 6);

 // char* buf;

  buf = new char;

  itoa(num,buf,10);

  SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM)buf);

//////////////////////////////////////////////////// 

      return 0;

case ID_BUTTON_TURN_OFF:

      if(MessageBox(hwnd,TEXT("Вы точно хотите выключить компьютер?"),

                              TEXT("Внимание"),MB_YESNO| MB_ICONWARNING)==IDYES)

      {

            if (!SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE ) )

    {

          ::MessageBox(0,"Недостаточно привилегий!","",MB_OK);

        

    } 

ExitWindowsEx(EWX_POWEROFF,0);

      }

      return 0; 

      case ID_BUTTON_LOG_OFF:

      if(MessageBox(hwnd,TEXT("Вы точно отлогиниться?"),

                              TEXT("Внимание"),MB_YESNO| MB_ICONWARNING)==IDYES)

      {

            if (!SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE ) )

    {

          ::MessageBox(0,"Недостаточно привилегий!","",MB_OK);

        

    } 

ExitWindowsEx(EWX_LOGOFF,0);

      }

      return 0; 

      case ID_BUTTON_REBOOT:

      if(MessageBox(hwnd,TEXT("Вы точно хотите перезагрузить компьютер?"),

                              TEXT("Внимание"),MB_YESNO| MB_ICONWARNING)==IDYES)

      {

            if (!SetCurrentPrivilege( SE_SHUTDOWN_NAME, TRUE ) )

    {

          ::MessageBox(0,"Недостаточно привилегий!","",MB_OK);

        

    } 

ExitWindowsEx(EWX_REBOOT,0);

      }

      return 0; 

}

return 0; 

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ; 

}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

} 

//Отображение  раскрыв. списка процессов

int ListProcesses(HWND hwnd)

{

      PROCESSENTRY32 pe32={0};

      HANDLE myhandle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

      int i=0; 

      SendMessage (hwnd, LB_RESETCONTENT, 0, 0);

      if(myhandle==INVALID_HANDLE_VALUE)

            return false;

      pe32.dwSize=sizeof(PROCESSENTRY32);

      //Поиск процессов в системе

      if(Process32First(myhandle,&pe32))

            do{

                  num++;

                  i=SendMessage(hwnd,LB_ADDSTRING, 0,(DWORD) ((LPSTR) pe32.szExeFile));

             SendMessage(hwnd,LB_SETITEMDATA, i,(DWORD)pe32.th32ProcessID);

            }

      while(Process32Next(myhandle,&pe32));

      //

      SendMessage(hwnd,LB_SETCURSEL, 0, 0);

            

      FORWARD_WM_COMMAND(hwndDlg,ID_COMBO,hCombo,CBN_SELCHANGE,SendMessage);

      i=SendMessage(hwnd,LB_GETCOUNT, 0,0); 

      TCHAR str[100];

      //Отображение  найденных процессов в списке

    SetDlgItemText(hwndDlg,IDC_COUNT,(LPCTSTR)_ltot(i,str,10));   

      CloseHandle(myhandle); 

      return true;

} 
 

//Получение  информации о процессе.

int ProcessesInfo(HWND hwnd,DWORD dwProcessID)

{ 

      PROCESSENTRY32 pe32={0};

      HANDLE myhandle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

      int i=0;

      h=OpenProcess(PROCESS_QUERY_INFORMATION,0,dwProcessID);

      DWORD minphmem,maxphmem;

      DWORD dw=GetPriorityClass(h);

      TCHAR s[20];

      //Отображание  списка приоритетов  

    i=SendMessage (hList, LB_FINDSTRING, 0,(LPARAM) ((LPCTSTR)s));

      SendMessage(hList,LB_SETCURSEL, i, 0);

      SendMessage (hwnd, LB_RESETCONTENT, 0, 0); 

      if(myhandle==INVALID_HANDLE_VALUE)

            return false;

      pe32.dwSize=sizeof(PROCESSENTRY32);

      //Поиск  выбранного процесса и получение  информации о нем

      if(Process32First(myhandle,&pe32))

            do{

                  if(pe32.th32ProcessID==dwProcessID) break;

            }

            while(i++,Process32Next(myhandle,&pe32)); 
 

      TCHAR sz[100];

      //Отображение  информации о процессе в списке

      wsprintf(sz,TEXT("Имя: %s"),pe32.szExeFile);

      SendMessage (hwnd, LB_ADDSTRING, 0, (LPARAM) sz); 

      wsprintf(sz,TEXT("ID процесса: %lu"),pe32.th32ProcessID);

      SendMessage (hwnd, LB_ADDSTRING, 0, (LPARAM) sz); 

      wsprintf(sz,TEXT("Кол-во потоков: %d"),pe32.cntThreads);

      SendMessage (hwnd, LB_ADDSTRING, 0, (LPARAM) sz); 

      wsprintf(sz,TEXT("Базовый приоритет: %d"),pe32.pcPriClassBase);

      SendMessage (hwnd, LB_ADDSTRING, 0, (LPARAM) sz);

      GetProcessWorkingSetSize(h,&minphmem,&maxphmem); 

      wsprintf(sz,TEXT("Мин/макс размер физической памяти:%lu / %lu")

            ,minphmem,maxphmem);  

      SendMessage (hwnd, LB_ADDSTRING, 0, (LPARAM) sz); 

      CloseHandle(h); 

      myhandle=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessID);

      if(myhandle==INVALID_HANDLE_VALUE)

            return false;

      MODULEENTRY32 me32={0};

      me32.dwSize=sizeof(MODULEENTRY32); 

      if(Module32First(myhandle,&me32)) 

            do

                  SendMessage (hList1, LB_ADDSTRING, 0, (LPARAM)me32.szExePath); 

            }while(Module32Next(myhandle,&me32)); 

            CloseHandle(myhandle);

      return true; 

} 

//Получение  прав отладчика для отображения  информации о серверных

//приложениях

inline BOOL GetDebugPriority(void)

{

      BOOL fOk=FALSE;

      HANDLE hToken;

      if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,

            &hToken)){

            TOKEN_PRIVILEGES tp;

            tp.PrivilegeCount = 1;

            LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);

            tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

            AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

            fOk = (GetLastError() == ERROR_SUCCESS);

            CloseHandle(hToken);

      }

      return fOk;

} 

//Отображение  элементов списка приоритетов

void SetListPrioryties(HWND hwnd)

{

Информация о работе Диспетчер задач. WinAPI