ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.06.2019
Просмотров: 101
Скачиваний: 1
Лабораторная работа № 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();
}
Р езультат: