Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab6

.docx
Скачиваний:
5
Добавлен:
30.06.2018
Размер:
156.61 Кб
Скачать

Лабораторная работа № 6

Студента ИТ 14-1 Красовского Абхая

Технологии обмена данными между процессами: использование разделяемой памяти

Вариант №9

Цель: Получить навыки в следующих предметных областях:

  • создание и использование блоков разделяемой памяти;

  • открытие и использование буфера обмена (clipboard)

Индивидуальное задание

Реализовать задание взаимодействия процессов и буера обмена.

Код сервера:

#include <windows.h>

#include <conio.h>

#include <iostream>

using namespace std;

void main()

{

setlocale(LC_ALL, "rus");

static HGLOBAL TextCopyBufer;

LPSTR CopyText;

Char ConstText[] = "Этот текст я запишу в универсальный буфер обмена";

// Закажем глобальный блок памяти для нашего текста

TextCopyBufer = GlobalAlloc(GHND, sizeof(ConstText) + 1);

if (TextCopyBufer != NULL)

{

cout << "Глобальный блок памяти заказан" << endl;

// Зафиксируем наш блока памяти

CopyText = (LPSTR)GlobalLock(TextCopyBufer);

if (CopyText != NULL)

{

cout << "Блок памяти зафиксирован" << endl;

// Скопируем текст в блок памяти

lstrcpyA(CopyText, ConstText);

cout << "Текст скопирован в блок памяти" << endl;

// Расфиксируем наш блок памяти

GlobalUnlock(TextCopyBufer);

cout << "Блок памяти расфиксирован" << endl;

// Откроем и очистим буфер обмена

OpenClipboard(0);

EmptyClipboard();

cout << "Буфер обмена открыт и очищен" << endl;

// Запишем текст в буфер обмена

SetClipboardData(CF_TEXT, TextCopyBufer);

cout << "В буфер обмена скопирован текст" << endl;

// Закрываем буфер обмена

CloseClipboard();

cout << "Буфер обмена закрыт" << endl;

}

else

MessageBoxA(0, "Мало памяти", "Server", MB_OK);

}

else

MessageBoxA(0, "Мало памяти", "Server", MB_OK);

_getch();

}

Код клиента:

#include <windows.h>

#include <conio.h>

#include <iostream>

using namespace std;

void main()

{

setlocale(LC_ALL, "rus");

static HGLOBAL ClipTextBufer;

LPSTR ClipText;

OpenClipboard(0);

cout << "Открыт буфер обмена" << endl;

ClipTextBufer = GetClipboardData(CF_TEXT);

cout << " Получаем идентификатор блока памяти,содержащего текстовые данные Clipboard" << endl;

ClipText = (LPSTR)GlobalLock(ClipTextBufer);

cout << "Фиксируем блок памяти и читаем сообщение из буфера обмена" << endl;

cout << "Наше сообщение: " << ClipText << endl;

GlobalUnlock(ClipTextBufer);

cout << "Блок памяти расфиксирован" << endl;

CloseClipboard();

cout << "Буфер обмена закрыт" << endl;

_getch();

}

Результат:

Соседние файлы в предмете Операционные системы