Для студентов по предмету ИнформатикаСистемное программирование для операционных системСистемное программирование для операционных систем
2016-07-302016-07-30СтудИзба
Курсовая работа: Системное программирование для операционных систем
Описание
Системное программирование для операционных систем
Содержание
- Реферат
- Содержание
- Нормативные ссылки
- Введение
- Структура основной программы
- Программная реализация алгоритма
- Исходный текст программы приведен в приложении Б
- Функциональные возможности программы
- Руководство по использованию программы
- Заключение
- В результате проделанной работы была создана программа, осуществляющая поиск одинаковых документов (по имени, размеру, дате создания). Во время проведения работы были приобретены навыки работы с языком программирования высокого уровня Visual C++. Исходя из того, что программа полностью соответствует заданию курсового проекта, можно сделать вывод, что задание на курсовую работу выполнено в полном объеме.
- Список использованных источников
- Приложение А
- (ОБЯЗАТЕЛЬНОЕ)
- Основной алгоритм программы
- Приложение Б
- (ОБЯЗАТЕЛЬНОЕ)
- Листинги программы
- ItemIndex>=0) Report->SetDirList(NameBox->ItemIndex,DirBox->Items); SetExButton->Enabled=(NameBox->Items->Count>0 && NameBox->ItemIndex>=0); ResetExButton->Enabled=(ExBox->Items->Count>0 && ExBox->ItemIndex>=0); } //--------------------------------------------------------------------------- //обновляет содержимое списка DirBox при выборе файла в списке ExBox void __fastcall TFForm::ExBoxClick(TObject *Sender) { if(Report && ExBox->ItemIndex>=0) Report->SetDirListEx(ExBox->ItemIndex,DirBox->Items); SetExButton->Enabled=(NameBox->Items->Count>0 && NameBox->ItemIndex>=0); ResetExButton->Enabled=(ExBox->Items->Count>0 && ExBox->ItemIndex>=0); } //--------------------------------------------------------------------------- //создание запуск потоков проверки и контроля файлов каталогов void __fastcall TFForm::CallThreads(void) { DirectoryNever=false; DirThr=new TDirThread(false); NotifyThr=new TNotifyThread(false); } //--------------------------------------------------------------------------- //остановка и удаление потоков проверки и контроля файлов каталогов void __fastcall TFForm::StopThreads(void) { //взвести Terminated у обоих потоков NotifyThr->Terminate(); DirThr->Terminate(); //взвести-сбросить событие NeverEvent для завершения потоков (для выхода из функций ожидания) PulseEvent(NeverEvent); DirThr->WaitFor();//дождаться завершения потока DirThr delete DirThr; //удалить DirThr NotifyThr->WaitFor();//дождаться завершения потока NotifyThr delete NotifyThr; //удалить NotifyThr //отключить мигание надписи "Запущена проверка" Timer1->Enabled=false; Label5->Visible=false; } //--------------------------------------------------------------------------- //обработчик OnActivate формы (работает только при запуске программы) //регистрирует значок в System Tray, инициализирует переменные, запускает потоки void __fastcall TFForm::FormActivate(TObject *Sender) { NotifyData.cbSize=sizeof(NotifyData); NotifyData.hWnd=Handle; NotifyData.uID=0; NotifyData.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; NotifyData.uCallbackMessage=WM_SHELLMESS; NotifyData.hIcon=Application->Icon->Handle; strncpy(&(NotifyData.szTip[0]),"Контроль одноименных файлов",sizeof(NotifyData.szTip)); Shell_NotifyIcon(NIM_ADD,&NotifyData); Application->Title="Контроль файлов"; OnActivate=NULL; NeverMutex=CreateMutex( NULL,false,""); NeverEvent=CreateEvent( NULL,true,false,""); if( FileExists(ChangeFileExt(ParamStr(0),".inf")) )//если есть файл параметров {//прочитать файл параметров TStringList *S=new TStringList; S->LoadFromFile(ChangeFileExt(ParamStr(0),".inf")); AddDirButton->Caption=S->Strings[0]; //контролируемый каталог for(int i=1;iCount;i++) ExBox->Items->Add(S->Strings[i]);//список исключений delete S; } else AddDirButton->Caption=ExtractFilePath(ParamStr(0)); SetExButton->Enabled=(NameBox->Items->Count>0 && NameBox->ItemIndex>=0); ResetExButton->Enabled=(ExBox->Items->Count>0 && ExBox->ItemIndex>=0); CallThreads(); } //--------------------------------------------------------------------------- /* Msg.LParam= 512 - кнопки мыши не нажаты 513, 514 - нажать, отпустить левую кнопку ..001,..010 516, 517 - нажать, отпустить правую кнопку ..0100,..0101 519, 520 - нажать, отпустить среднюю кнопку ..0111,..1000 */ //обработчик событий от значка в System Tray - //показывает всплывающее меню при щелчке мышью на значке в System Tray void __fastcall TFForm::WMShellMess(TMessage &Message) { if(Message.WParam ==0) switch(Message.LParam) { case 513: case 516:if(!SDForm->Visible) { TPoint tp; SetForegroundWindow(Handle); GetCursorPos(&tp); N1->Enabled=!Visible || IsIconic(Application->Handle); PopupMenu1->Popup(tp.x,tp.y); PostMessage(Handle,WM_NULL,0,0); } break; } } //--------------------------------------------------------------------------- //обработчик сообщения от второй копии приложения - для открытия и показа главного окна void __fastcall TFForm::ShowMyWin(TMessage &Message) { ShowWindow(Application->Handle, SW_SHOWNORMAL); Show(); } //--------------------------------------------------------------------------- //обработчик пуккта всплывающего меню "Отчет, настройки программы" //открывает и показывает главное окно void __fastcall TFForm::N1Click(TObject *Sender) { ShowWindow(Application->Handle, SW_SHOWNORMAL); Show(); } //--------------------------------------------------------------------------- //обработчик OnClose (при закрытии) формы void __fastcall TFForm::FormClose(TObject *Sender, TCloseAction &Action) { Timer2->Enabled=false; if(AppClose) {//закрытие программы разрешено - выполняет деинициализирующие действия StopThreads();//остановка-удаление потоков if(Report) delete Report; //удаление отчета CloseHandle(NeverMutex); //освобождение объектов CloseHandle(NeverEvent); // Shell_NotifyIcon(NIM_DELETE,&NotifyData); //удаление значка из System Tray //сохранение параметров в файл "FileNames.inf" TStringList *S = new TStringList(); S->Add(AddDirButton->Caption);//контролируемый каталог for(int i=0;iItems->Count;i++) S->Add(ExBox->Items->Strings[i]);//список исключений S->SaveToFile(ChangeFileExt(ParamStr(0),".inf")); delete S; } else {//закрытие программы запрещено - только скрывает окно Action=caNone; Hide(); ShowWindow(Application->Handle, SW_HIDE); } } //--------------------------------------------------------------------------- //обработчик пуккта всплывающего меню "Закрыть программу" //взводит признак AppClose и закрывает главное окно void __fastcall TFForm::N2Click(TObject *Sender) { if(!SDForm->Visible) { AppClose=true; Close(); } } //--------------------------------------------------------------------------- //обработчик кнопки "Скрыть окно" - скрывает главное окно void __fastcall TFForm::Button1Click(TObject *Sender) { Timer2->Enabled=false; Hide(); ShowWindow(Application->Handle, SW_HIDE); } //--------------------------------------------------------------------------- //обработчик таймера - осуществляет мигание надписи "Запущена проверка..." void __fastcall TFForm::Timer1Timer(TObject *Sender) { Label5->Visible=!Label5->Visible; } //--------------------------------------------------------------------------- //Обработчик кнопки AddDirButton - //открывает окно SDForm для смены контр-го каталога, и перезапускает потоки void __fastcall TFForm::AddDirButtonClick(TObject *Sender) { AnsiString Dir=AddDirButton->Caption; if(Dir.Length() > 3) Dir.SetLength(Dir.Length()-1); SDForm->DriveComboBox1->Drive=Dir[1]; SDForm->DirectoryListBox1->Directory=Dir; if(SDForm->ShowModal()==mrOk) { Dir=SDForm->DirectoryListBox1->Directory; if(Dir.Length() > 3) Dir=Dir+''; StopThreads(); AddDirButton->Caption=Dir; CallThreads(); } } //--------------------------------------------------------------------------- //Обработчик кнопки "Стрелка вниз" - передает файл из списка одноименных в список исключений void __fastcall TFForm::SetExButtonClick(TObject *Sender) { if(Report->SetEx(NameBox->ItemIndex)) { Report->SetNameList(NameBox->Items); Report->SetExNames(ExBox->Items); DirBox->Items->Clear(); SetExButton->Enabled=false; ResetExButton->Enabled=false; if(Report->NameList->Count>0) Panel2->Caption="Обнаружены одноименные файлы!"; else Panel2->Caption="Одноименные файлы отсутствуют."; } } //--------------------------------------------------------------------------- //Обработчик кнопки "Стрелка верх" - передает файл из списка исключений в список одноименных // или удаляет файл из списка исключений void __fastcall TFForm::ResetExButtonClick(TObject *Sender) { if(Report->ResetEx(ExBox->ItemIndex)) { Report->SetNameList(NameBox->Items); Report->SetExNames(ExBox->Items); DirBox->Items->Clear(); SetExButton->Enabled=false; ResetExButton->Enabled=false; if(Report->NameList->Count>0) Panel2->Caption="Обнаружены одноименные файлы!"; else Panel2->Caption="Одноименные файлы отсутствуют."; } }
Характеристики курсовой работы
Предмет
Семестр
Просмотров
132
Качество
Идеальное компьютерное
Размер
1,1 Mb