4.1 Руководство программиста
4.1.1 Общие сведения о программе
Программа предназначена для обмена сообщениями между копиями этой программы с помощью файла, проецируемого в память. А также для анализа рабочей области системного диска, т.е анализ и расшифровку блока параметров Bios и анализ и расшифровку таблицы разделов носителя.
4.1.2 Структура программы
После запуска приложения появляется форма «Авторизация» для присвоения пользователя специального псевдонима для обмена информацией. Форма содержит две кнопки: «Войти» и «Закрыть». По нажатию кнопки «закрыть» происходит выход из приложения. По нажатию кнопки «войти» происходит переход на основную форму программы, данная форма содержит поле вывода сообщений – «поле истории переписки», также поле ввода сообщений, кнопку «ОТПРАВИТЬ» для отправки сообщений, а также кнопки отсоединиться, закрыть и соединится, которая будет появится на форме только после нажатия на кнопку «отсоединиться». Также на форме присутствует панель инструментов с кнопками :
1. Сохранить историю переписки,
2. Загрузить историю переписки.
3. Получить данные о носителях.
4. Справка.
При нажатии на первую кнопку появляется диалоговое окно, в котором необходимо выбрать файл, содержащий историю переписки, если такой имеется, и вывод содержимого этого файла в поле истории переписки.
При нажатии на вторую кнопку происходит открытие диалогового окна, в котором предлагается назначить сохраняемому файлу имя и каталог, в котором данный файл будет сохранён. Содержимым данного файла будет являться история последней переписки.
При нажатию на четвёртую кнопку происходит запуск файла справочной системы, содержащей всю необходимую информацию о программе.
При нажатии на третью кнопку происходит открытие дополнительного окна программы.
Дополнительное окно программы имеет заголовок «Служебная информация о носителях». Это окно содержит поле вывод информации о всех носителях присутствующих в системе . Поле вывода краткой информации о носителе, поле вывода расшифрованной информации о блоке параметров Bios, поле вывода расшифрованной информации о таблице разделов носителя, а также две таблицы, содержащие 16ричные значения первого сектора логического диска- блок параметров Biosи 16ричные значения первого сектора носителя, к которому относится выбранный логический диск (в этом секторе находится таблица разделов логического диска – PartitionTable). Также на форме находятся 4 кнопки:
1. Начать работу с диском
2. Считать BPB(блок параметров Bios)
3. Считать Partition Table.
4. Закрыть.
При нажатии на первую кнопку происходит вывод краткой информации о носителе. При нажатии на кнопку «Считать BPB» происходит считывание блока BPB и заполнение значениями таблицы содержащей расшифрованные данные из BPB и таблицы, содержащей 16ричные значения считанные из BPB, выбранного логического диска.
При нажатии на кнопку – «Считать PartitionTable» происходит считывание первого сектора носителя информации и заполнение данными таблицы, содержащей расшифрованные данные о таблице разделов диска и таблицы содержащей 16ричные значения считанные из первого сектора носителя.
4.1.3 Проверка программы
Входные данные : строка сообщения «сообщение №1»; логический диск «H».
Выходные данные : «сообщение№1»;
Краткая информация о носителе:
«Вы просматриваете логический диск: h
Количество цилиндров: 247
Тип носителя: съёмный носитель
Дорожек на цилиндре: 255
Секторов на дорожке: 63
Байт в секторе: 512»
Информация о таблице разделов диска:
Первый элемент таблицы разделов системного диска:
Признак загрузки: 80
Начало раздела диска{Головка: 1 Сектор: 1 Цилиндр: 0 }
Тип раздела {Ос: 7 }
Конец раздела диска{Головка: 254 Сектор: 255 Цилиндр: 255 }
Номер Сектора {: 63 }
Размер раздела {: 61432497 }
Второй элемент таблицы разделов системного диска:
Признак загрузки: 00
Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }
Тип раздела {Ос: 254 }
Конец раздела диска{Головка: 255 Сектор: 255 Цилиндр: 240 }
Номер Сектора {: 61432560 }
Размер раздела {: 318782480 }
4.1.4 Дополнительные возможности
Программа имеет справочную систему, для её запуска необходимо нажать кнопку
, или F1 на клавиатуре. Также программа определяет носители доступные в системе, это происходит автоматически при переходе на третью форму программы.4.1.5 Сообщения системному программисту
1) При подключении, если не удалось создать проекцию файла при запуске программы, появляется сообщение:
Рисунок 5.1 –Содержание сообщения
2)Если не удалось создать объект типа Mutex для обмена сообщениями с другими программами, появляется сообщение:
Рисунок 5.2 – Содержание сообщения.
3) Если не удалось наладить приём сообщений от других копий программ, появляется сообщение:
Рисунок 5.3 – Текст сообщения.
4) Если не удалось создать объект типа события для оповещения потока о том, что данные записаны в проецируемый файл, появляется сообщение:
Рисунок 5.4 –Текст сообщения.
5) Если не удалось передать данные (записать данные в проецируемый файл) , появляется сообщение:
Рисунок 5.6 – Текст сообщения.
4.2 Руководство пользователя
4.2.1 Назначение и условия выполнения программы
Данная программа предназначена для обмена сообщениями между копиями данной программы, а также для получения системной информации о носителях. Для выполнения программы необходим IBM-совместимый персональный компьютер, оснащенный процессором Intel или аналогичным и операционной системой семейства Windows.
4.2.2 Обращение к программе для запуска:
Для запуска программы необходимо запустить приложение с Redactor.exe . Это делается с помощью ярлыка , который появляется на рабочем столе после установки, с именем OffClient.
4.2.3 Входные и выходные данные:
Входными и выходными данными при обмене сообщениями являются сами сообщения. При получении служебных данных о носителях входными данными являются имена этих носителей, а выходными – данные о них, такие как:
Количество цилиндров, тип носителя, дорожек на цилиндре, секторов на дорожке, байт в секторе и т.д.
4.2.4 Сообщения оператору:
1) Если не введён псевдоним при регистрации то появится сообщение:
Рисунок 5.7 - Текст сообщения.
2) Если не удалось передать сообщение:
Рисунок 5.8 – Текст сообщения.
1) Текст основного модуля программы
program Redactor;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
ThrdRcvr in 'ThrdRcvr.pas',
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
HDDInfo in 'HDDInfo.pas';
{$R *.res}
begin
Application.Initialize;
Application.HelpFile:='СПРАВКА.HLP';
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=false;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
2) Текст модуля Unit1:
unitUnit1; //Основной модуль
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ThrdRcvr,
StdCtrls, Buttons, Menus,ToolWin, ComCtrls, ActnMan, ActnColorMaps,
ImgList, ExtCtrls,Unit3;
const
MMFName:PChar = 'MMFProectFile';
MutxName:PChar = 'UniqMutexName';
EvntName:Pchar = 'ChatEventName';
SHARED_MEMORY_SIZE = 65536;
type
TForm1 = class(TForm)
Memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
ToolBar1: TToolBar;
OpenToolButton: TToolButton;
SaveAsToolButton: TToolButton;
ToolButton3: TToolButton;
ImageList1: TImageList;
StatusBar1: TStatusBar;
Timer1: TTimer;
ToolButton1: TToolButton;
N2: TMenuItem;
N8: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CloseHandles;
procedure CreateHandles;
procedure Button2Click(Sender: TObject);
procedure WriteDataInMMF(s:string);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure N5Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
procedure AppHint(Sender: TObject);
public
HMutex:THandle;
ThreadRec:TThreadReceiver;
HEvent:THandle;
HFileSender:Thandle;
NicName:string;
end;
var
Form1: TForm1;
TxtFile:TextFile;// пременнаяфайла
St:PansiChar;
lincInt:Boolean;
TxtContaningStr:String;
userName:string;
implementation
{$R *.dfm}
//процедурадляпоказакрткихсправок
procedure TForm1.AppHint(Sender: TObject);
begin
StatusBar1.SimpleText:=Application.Hint; //дляотображенияииформациивпанелисоостояния
end;
//закрытие всех хендлов в этой копии программы
procedure TForm1.CloseHandles();
begin
CloseHandle(HFileSender);
CloseHandle(HMutex);
CloseHandle(HEvent);
end;
// создание всех необходимых объектов
procedure TForm1.CreateHandles;
begin
// проекцияфайла
HFileSender:=CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SHARED_MEMORY_SIZE,MMFName);
lincInt:=(GetLastError() <> ERROR_ALREADY_EXISTS);
if HFileSender = 0 then
begin
st:='неудалосьсоздатьпроекциюфайла';
Application.MessageBox(st,'Сообщение...',MB_OK);
exit;
end;
// мьютекс
HMutex:=CreateMutex(nil,false,MutxName);
if HMutex = 0 then
begin