Главная > Методическое пособие


4.4. Контрольные вопросы

  1. Какой механизм лежит в основе программирования графического интерфейса пользователя Windows?

  2. Что такое сообщение?

  3. Каким образом осуществляется обработка сообщений в программе?

  4. Для чего служат оконные классы?

  5. Что такое контекст устройства и для чего он используется?

4.5. Варианты заданий на лабораторную работу

  1. Написать программу, выводящую в диалоговом окне растровое изображение. Диалоговое окно должно содержать кнопку «OK», при нажатии на которую диалоговое окно закрывается, а также список из 5-ти элементов. При выборе элемента списка должно выводиться сообщение с текстом выбранного элемента. Добавить пункт «Диалоговое окно» в главное меню программы. Используемые функции и сообщения: DialogBox, DialogProc, SendDlgItemMessage, EndDialog, LB_ADDSTRING, LBN_SELCHANGE, LB_GETCURSEL, LB_GETTEXT, WM_COMMAND.

  2. Написать программу, выводящую в главном окне квадрат с координатами (100, 100)-(200, 200) и отображающую координаты курсора мыши. При попадании курсора мыши в квадрат должно выводиться сообщение с запросом на закрытие главного окна. Реализовать вывод такого же запроса при попытке закрытия основного окна. Используемые функции и сообщения: Rectangle, TextOut, WM_MOUSEMOVE, WM_CLOSE.

  3. Написать программу, вычисляющую корни (в том числе и комплексные) квадратного уравнения ax2 + bx + c = 0. Значения коэффициентов a, b, c должны вводиться в полях ввода главного окна. Главное окно должно содержать кнопку «OK», при нажатии которой производятся вычисления. Используемые функции и сообщения: CreateWindow, WM_COMMAND.

  4. Написать программу, отображающую список из 5-ти элементов и пустой список в главном окне. При выборе элемента списка в меню «Список» должен добавляться пункт с текстом выбранного элемента списка. При выборе пункта из меню «Список» во второй список главного окна должен добавляться элемента, соответствующий выбранному пункту меню. Используемые функции и сообщения: CreateWindow, AppendMenu, SendMessage, LB_ADDSTRING, LBN_SELCHANGE, LB_GETCURSEL, LB_GETTEXT, WM_COMMAND.

  5. Написать программу, выводящую растровое изображение в главном окне. Если при изменении размеров окна изображение не умещается в нем полностью, использовать скроллеры для прокрутки изображения по горизонтали и вертикали. Используемые функции и сообщения: GetScrollPos, SetScrollRange, WM_HSCROLL, WM_VSCROLL.

  6. Написать программу, строящую в главном окне график функции sin(t) * e-t, где t – параметр от 0 до 4 (откладывается по оси абсцисс), а  – некоторый коэффициент от 0 до 1. Значение коэффициента  должно вводиться в поле ввода главного окна. Главное окно также должно содержать кнопку «OK», при нажатии которой производится перерисовка графика. Используемые функции и сообщения: CreateWindow, WM_COMMAND.

  7. Написать программу, отображающую в главном окне текущую дату и время. Для даты выбрать шрифт Times New Roman размером 24 пункта. Для времени выбрать шрифт Arial размером 36 пунктов. Выполнять перерисовку даты и времени по сообщению WM_PAINT. Используемые функции и сообщения: gettime, getdate (time.h), CreateFontIndirect.

  8. Написать программу, отображающую в поле ввода главного окна содержание текстового файла. Поле ввода должно быть многостроковым и иметь возможность вертикальной и горизонтальной прокрутки. Имя файла вводить в диалоговом окне. Используемые функции и сообщения: CreateWindow (стиль ES_MULTILINE для многострокового поля ввода), DialogBox, WM_COMMAND.

  9. Написать программу, рисующую в главном окне изображение треугольника Серпинского (см. рисунок). Добавить в подменю «Файл» пункт «Печать», при выборе которого осуществляется распечатка построенного изображения на принтере. Используемые функции и сообщения: MoveTo, LineTo, PrintDlg, Escape, DeleteDC, WM_COMMAND.

  1. Написать программу, использующую диалоговое окно для добавления и удаления элементов списка. В диалоговом окне должен присутствовать список, поле ввода, кнопки «Добавить» и «Удалить». При нажатии кнопки «Добавить» в список должен добавляться элемент, соответствующий тексту в поле ввода. При нажатии кнопки «Удалить» должен удаляться выбранный элемент списка. DialogBox, DialogProc, SendDlgItemMessage, EndDialog, LB_ADDSTRING, LB_DELETESTRING, LBN_SELCHANGE, LB_GETCURSEL, LB_GETTEXT, EM_GETLINE, WM_COMMAND.

5. Лабораторная работа №4

5.1. Цель работы

Ознакомиться с парадигмой программирования в операционных системах Windows 9x (Windows 95, Windows 98, Windows ME). Получить практические навыки создания консольных приложений для ОС Windows 9x. Самостоятельно изучить функции Win32 API, необходимые для выполнения лабораторной работы.

5.2. Основные теоретические положения

5.2.1. Архитектура Windows 95

Операционная система Windows 95 состоит из следующих программных компонентов:

  1. диспетчер виртуальных машин (Virtual Machine Manager, VMM);

  2. виртуальные устройства (Virtual Devices, VxDs);

  3. ROM BIOS;

  4. устанавливаемые драйвера устройств (Installable Device Drivers) и резидентные программы (TSR);

  5. 16bit и 32bit динамические подключаемые библиотеки ОС Windows 95 (Dynamic-Link Libraries, DLL’s);

  6. программы – компоненты MS DOS.

Схематично архитектура Windows 95 представлена на рис. 1.

Рассмотрим подробно основные компоненты архитектуры Windows 95.

Диспетчер виртуальных машин – это 32-битная операционная система защищенного режима, являющаяся ядром Windows 95 и отвечающая в основном за создание, запуск, управление и завершение виртуальных машин. VMM представляет различные виды сервисов, управляющих памятью, процессами, прерываниями и исключениями. VMM и взаимодействующие с ним виртуальные устройства исполняются в едином 32-разрядном линейном адресном пространстве с нулевым уровнем привилегий (т.е. кольцо 0). VMM обеспечивает вытесняющую многозадачность с многопоточностью (Preemptive Multitasking With Multithreading). VMM способен исполнять несколько приложений одновременно, распределяя процессорное время между виртуальными машинами, в которых эти приложения выполняются. Отметим, что VMM нереентерабелен, т.е. виртуальным устройствам приходится синхронизировать свой доступ к сервисным функциям VMM.

Рис. 1 - архитектура Windows 95.

Виртуальные устройства (VxDs) – это 32-разрядные программы, которые обеспечивают аппаратную независимость VMM, принимая на себя все функции по управлению аппаратурой. VxD необходим каждому аппаратному модулю, работа которого может быть нарушена при переключении виртуальных машин или отдельных потоков. Заметим, что некоторые VxD поддерживают программные, а не аппаратные устройства, предоставляя API для некоторого общесистемного сервиса.

В Windows 95 включен IOCTL-интерфейс, позволяющий Win32-приложениям напрямую обращаться к VxD.

Драйвер устройства в Windows – это DLL, используемая ОС для взаимодействия с аппаратным устройством. Каждый драйвер содержит экспортируемый набор функций внешнего API, с помощью которых Windows и выполняющиеся в ее среде приложения получают доступ к соответствующему ресурсу или ресурсам.

Динамически подключаемые библиотеки содержатся в собственных исполняемых файлахи не копируются в исполняемые файлы программ, как при статическом связывании. Когда приложение обращается к какой-нибудь DLL, операционная система загружает ее в память, преобразует ссылки на ее функции в соответствующие адреса (чтобы приложение могло вызывать эти функции) и выгружает DLL из памяти, как только необходимость в ней отпадает. Динамическое связывание может осуществляться явно (приложением) или неявно (операционной системой).

DLL-модули могут использоваться как источники ресурсов для приложений. Код в DLL могут использовать сразу несколько программ без его дублирования, что приводит к существенной экономии памяти и времени выполнения функций. Разработчики программного обеспечения могут расширять среду Windows, создавая DLL-модули с процедурами, позволяющими выполнять какие-либо нестандартные операции и доступными другим Windows-приложениям. Windows поддерживает как 16-, так и 32-разрадные DLL, которые могут храниться в файлах с расширением DLL, или каким-либо другим расширением.

Windows 95 также поддерживает выполнение программ MS-DOS. Любую из них можно запускать в полноэкранном режиме или в консольном окне. Для каждой выполняющейся программы MS-DOS системой создается отдельная виртуальная машина. Кроме того, в Windows для большой совместимости предусмотрен режим монопольного выполнения DOS-программы (MS-DOS mode), в котором выполняется только указанная программа, которой отдаются все ресурсы компьютера, а графический пользовательский интерфейс при этом выгружается из памяти. Отметим, что Windows 95 поддерживает все системные функции и прерывания MS DOS, а также предоставляет расширения, позволяющие программам DOS использовать длинные имена файлов и такие функциональные возможности Windows, как монопольная блокировка дисковых томов, сервисы виртуальных машин и поддержка информационных файлов программ (PIF-файлов).

Windows 95 поддерживает 16-разрядные программы для Windows 3.x и 32-разрядные приложения, использующие API-интерфейсы Win32 и Win32s. Для 16-разрядных приложений Windows 95 реализует режим кооперативной многозадачности, что и в Windows 3.x, т. е. все эти программы выполняются в одном виртуальном адресном пространстве (в одной виртуальной машине), совместно используя одну очередь сообщений (message queue) и один поток исполнения. В то же время у каждого 32-разрядного Windows-приложения свое адресное пространство, своя очередь сообщений и свои один или несколько потоков исполнения. Кроме того, каждый 32-битный поток работает в условиях вытесняющей многозадачности. Отметим, что любые новые приложения должны быть 32-разрядными и использовать Win32 API.

5.2.2. Основные компоненты Windows 95

Рассмотрим подробно основные компоненты Windows 95.

5.2.2.1. Средства и расширения оболочки

Windows 95 включает в себя набор COM-интерфейсов и функций (Component Object Model – модель многокомпонентных объектов), позволяющих расширять возможности стандартной оболочки. Рассмотрим основные понятия, связанные с данной моделью:

  • пространство имен оболочки;

  • ярлыки;

  • расширения оболочки;

  • средства просмотра и анализа файлов;

  • компоненты панели управления – специальные DLL-библиотеки для настройки системы;

  • экранные заставки;

Пространство имен (namespace) – это набор таких символов, как имена файлов и каталогов. В оболочке Windows 95 используется единое пространство имен с иерархической структурой всех объектов, представляемых пользователю для непосредственного управления, в том числе файлов, дисков, принтеров, сетевых устройств и т.д. Оболочка Windows 95 предоставляет COM-интерфейс и несколько функций, позволяющих просматривать пространство имен и находить информацию о его объектах.

Ярлык – это объект данных, который содержит в себе информацию используемую для доступа к другому объекту, расположенному в пространстве имен оболочки.

Ярлык позволяет приложению обращаться к объекту, не имея подробной информации о его текущем имени и расположении. Windows 95 предоставляют COM-интерфейс, через который приложение может создавать ярлыки.

Разработчики приложений могут расширять оболочку Windows 95, при этом необходимо добавить соответствующую информацию в системный реестр или создать внутренний (встраиваемый в процесс – in process) COM-сервер OLE. Пример расширения оболочки – обработчик контекстно-зависимого меню для рабочего стола оболочки. Одним из стандартных расширений оболочки является обработчик значков файлов, определяющий отображение значка для каждого файла. По умолчанию для всех файлов с одинаковым расширением выводится один и тот же значок, однако новый обработчик значков может придерживаться и другой стратегии отображения файлов. Еще одно стандартное расширение оболочки – специальный обработчик для файловых операций (copy hook handler), разрешающий или запрещающий операции, связанные с перемещением, копированием, удалением или переименованием файловых объектов.

Оболочка предоставляет команду Quick View (Быстрый просмотр), позволяющий просматривать содержимое файла, не запуская приложение, в котором он был создан, и даже не требуя присутствия этого приложения в системе. Когда пользователь выбирает команду Quick View для некоторого файла, система запускает соответствующее средство просмотра (file viewer), определяемое по расширению выбранного пользователем файла. Средство просмотра обеспечивает пользовательский интерфейс для просмотра файла и представляет собой многокомпонентный OLE-объект, реализованный во встраиваемом в процесс DLL-сервере. Средство просмотра работает совместно с анализатором файлов (file parser) – специальной DLL, отвечающей за низкоуровневый анализ формата файла. Каждый тип или класс файлов и связан с определенным средством отображения файлов (display engine).

5.2.2.2. Реестр

Реестр (registry) – это централизованная база данных, в которой хранится текущая информация о конфигурации аппаратных средств компьютера, установленных в системе приложениях и программных компонентах, пользовательских настройках и определениях типов файлов. Практически, реестр есть логическое развитие конфигурационных ini-файлов Windows 3.x.

5.2.2.3. Шрифты

В Windows 95 шрифты используются для отображения текста на экране и других устройствах вывода. Шрифт (font) определяется как набор знаков и символов одного дизайна, определяемый тремя основными характеристиками: гарнитурой (typeface), начертанием (style), размером (size). Размер шрифта измеряется в пунктах (points). В Win9x предусматривается поддержка следующих операций со шрифтами:

  • вывод текста стандартным шрифтом;

  • проверка способности устройства выводить текст;

  • выравнивание текста;

  • вывод текста различными шрифтами;

  • вращение текстовых строк;

  • считывание контуров символов в шрифтах TrueType;

  • создание и установка собственных шрифтов.

5.2.2.4. Подсистема печати.

В Windows 95 весь вывод на любые графические устройства является аппаратно-независимым, за исключением некоторых особых случаев. Для работы с любым из устройств вывода используется стандартный набор функций GDI (Graphics Device Interface). За преобразование высокоуровневых команд в аппаратные и передачу заданий принтеру отвечает подсистема печати, реализуя часть GDI по отношению к любым устройствам печати. В нее входят:

  • Драйвер устройства. Это DLL-библиотека, поддерживающая интерфейс драйверов устройств (Device Driver Interface). Обрабатывая поступающие от GDI вызовы DDI-функций, драйвер устройства генерирует низкоуровневые команды печати.

  • Спулер печати (print spooler). Основной компонент подсистемы печати. Является приложением, управляющим процессом печати, в частности, спулер находит и загружает требуемый драйвер устройства, управляет очередью заданий на печать, преобразует вызовы GDI в регистрационные записи (journal records).

  • Процессор печати – DLL-библиотека, преобразующая регистрационные записи в вызовы DDI-функций.

  • Монитор порта. DLL-библиотека, которая передает печатающему устройству поток низкоуровневых команд через параллельный или последовательный порт.

Windows 95 также предоставляет набор функций для получения информации о следующих компонентах подсистемы печати:

  • монитор печати (спулер) на указанном сервере;

  • очередь заданий на печать для конкретного принтера;

  • порты, доступные для печати на указанном сервере;

  • установленные драйвера принтеров;

  • имеющиеся принтеры, серверы печати, домены или компоненты доступа к сетевым принтерам

  • процессоры печати, установленные на указанном сервере и типы данных, поддерживаемые ими.

5.2.2.5. Файловая подсистема

В Windows 95 основой файловой системы является FAT защищенного режима, мало отличающаяся от FAT16 MS-DOS. Одним из существенных изменений является поддержка длинных имен файлов. FAT расширенного режима совместима с FAT16 MS-DOS. Все Win32-приложения автоматически получают доступ ко всем возможностям файловой подсистемы через функции Win32 API.

5.2.3. Классификация API функций

Microsoft Win32 API предлагается как универсальный интерфейс для всех 32-разрядных платформ: Windows 9x, Windows NT, Windows 3.x c установленным расширением интерфейса Win32s. Несмотря на заявляемую универсальность, существует ряд отличий его реализации на разных платформах. Win32 API состоит из следующих основных частей:

  • GDI (Graphics Device Interface – интерфейс графических устройств);

  • подсистема управления окнами;

  • системные сервисы;

  • сервисы поддержки мультимедиа;

  • службы реализации механизмов RPC (Remote Procedure Calls).

Далее рассмотрим более подробно компоненты, входящие в состав Win32 API.

5.2.3.1. GDI

GDI предоставляет функции и соответствующие структуры данных для вывода графической информации на любые устройства вывода, которые позволяют работать с графикой. С помощью GDI-функций программа может рисовать простейшие графические примитивы, выводить текст и растровые изображения. Параметры вывода этих элементов зависят от предварительно создаваемых программой объектов – перьев (pens), кистей (brushes) и шрифтов.

Перья применяются для рисования линий и кривых, кисти – для закраски замкнутых фигур, шрифты – для вывода текста.

Программы направляют вывод на заданное устройство, создавая для него контекст устройства (Device Context, DC). Контекст устройства – это структура данных, управляемая GDI и содержащая информацию об устройстве (его рабочих режимах и т. д.). Программа может опрашивать контекст устройства, определяя возможности устройства по выводу данных. Приложения могут направлять вывод на физическое устройство (дисплей или принтер), или на логическое устройство (память или метафайл).

Логические устройства позволяют сохранять выводимые данные в той форме, в которой в дальнейшем их будет легко передать на физическое устройство. Для управления устройством, программы задают рабочие режимы DC и подключают к нему объекты GDI. Под рабочими режимами подразумеваются цвета текста и фона, режим наложения цветов, режим сопоставления логических и физических координат. Подключенные объекты GDI (кисти, перья и т.д.) определяют параметры создаваемых графических элементов.

5.2.3.2. Подсистема управления окнами

Подсистема управления окнами отвечает за реализацию пользовательского интерфейса любого приложения. При этом приложения определяют общие черты поведения и внешний вид своих окон, создавая оконные классы и оконные процедуры. Оконные классы описывают характеристики окон по умолчанию. Оконная процедура содержит код, задающий поведение окна, выполняющий необходимые операции по запросу пользователя и обрабатывающий пользовательский ввод.

Программы формируют вывод, направляемый в окно, с помощью функций GDI. При этом приложения получают доступ не ко всему экрану, а только к конкретным окнам. Обычно приложения рисуют в окнах при обработке поступающих сообщений. Когда размеры или координаты окна изменяются, система передает программе сообщение, требуя дорисовать ранее невидимые или стертые участки окна. Программы принимают ввод с клавиатуры и от мыши в виде сообщений. Система генерирует соответствующие сообщения и помещает их в очередь сообщений приложения. Такая очередь автоматически создается для каждого приложения. Приложение в цикле обработки сообщений извлекает их из очереди и пересылает их соответствующим оконным процедурам для обработки. Функции оконной подсистемы также обеспечивают ряд других возможностей. В частности, это поддержка операций над буфером обмена и механизма DDE.

5.2.3.3. Системный сервис.

Системный сервис – это набор функций, предоставляющих программам доступ к ресурсам компьютера и операционной системы. Функции системного сервиса обеспечивают доступ к файлам, каталогам, устройствам ввода/вывода.

Сетевые функции управляют соединениями с разделяемыми ресурсами сети.

Функции, отвечающие за поддержку связи, контролируют работу коммуникационных портов.

Системный сервис может быть использован для разделения общих ресурсов между программами. Существует ряд функций системного сервиса для получения информации о компьютере и для управления реестром. Кроме того, системный сервис позволяет разделять данные между приложениями, запущенными на одном компьютере, или, через сеть, на нескольких компьютерах сразу. Приложения могут копировать данные из других процессов, используя такие механизмы, как почтовые слоты (mailslots) и каналы (pipes). При этом существует ряд функций для защиты данных от несанкционированного доступа и от случайных повреждений. Функции системного сервиса дают программам средства обработки исключительных ситуаций. Существуют также средства для отладки и оптимизации программ (например, пошаговаятрассировка исполнения другого процесса).

5.2.3.4. Мультимедиа

Мультимедийные функции предоставляют различные виды сервиса для управления мультимедийными устройствами, аудио- и видеоинформацией, файловым вводом/выводом, джойстиками и таймерами.

Для воспроизведения и записи аудиоданных в различных форматах программы используют функции аудиообработки. В ряде случае возможно программное микширование разных звуковых источников. Для эффективного хранения аудиоданных используются аудиокодеки, доступ к которым программы получают через диспетчер сжатия звука (Audio Compressor Manager, ACM).

Для захвата отдельных видеокадров, их сжатия и управления воспроизведением видеоклипов служат функции обработки видеоинформации. Для эффективного хранения видеоданных предназначены видеокодеки, доступные через соответствующий диспетчер (ICM, Installable Compression Manager). Воспроизводить видеоклипы можно либо на мониторе, либо на других устройствах, неявно используя MCI-интерфейс (Media Control Interface) через функции оконного класса MCIWnd. Тажке возможно непосредственное взаимодействие с функциями MCI.

Сохранение и считывание различных типов мультимедйных данных реализуется за счет функций файлового ввода/вывода, в том числе с буферизацией. Этими функциями поддерживаются форматы RIFF (Resource Interchange File Format) и AVI (Audio-Video Interleaved).

Также поддерживается набор функций для управления джойстиками и несколько функций для работы с высокоточными таймерами с эпизодическим или периодическим срабатыванием.

5.2.3.5. Вызовы удаленных процедур

Механизм RPC (Remote Procedure Calls) позволяет организовывать приложения с распределенной схемой вычислений. Примерами таких приложений являются совместно используемые базы данных, файл-серверы, серверы печати. Распределенное приложение, выполняемое как процесс в одном адресном пространстве, обращается к процедурам, исполняемым в адресном пространстве на другом компьютере. Самой программе такие вызовы представляютя обычными вызовами локальных процедур, но на самом деле они активизируют процедуры, которые, взаимодействуя со стандартной библиотекой RPC, обращаются к удаленному адресному пространству. RPC управляет всеми аспектами сетевой связи, необходимыми для поддержки этих вызовов, в том числе и связанными с сетевыми протоколами. Отметим, что Microsoft RPC – это всего лишь один компонент среды распределенных вычислений, отвечающей стандартам OSF (Open Software Foundation) – консорциума компаний, объединившихся для выработки стандартов на компоненты среды распределенных вычислений.

5.2.3.6. Библиотеки расширений

Библиотеки расширений (Extension Libraries) предоставляют программам сервис, выходящий за рамки базового Win32 API. Существуют стандартные библиотеки расширений, реализующие следующие возможности:

  • стандартные элементы управления;

  • стандартные диалоговые окна;

  • декомпрессия данных;

  • установка файлов;

  • поддержка DDE (DDE management library, DDEML);

  • поддержка DDE в сети (сетевой DDE).

5.3. Задания и методические указания
к выполнению работы

5.3.1. Задание на лабораторную работу

Написать консольное приложение на языке C/C++, функционирующее в ОС Windows 9x. Приложение должно обеспечивать выполнение функций, указанных в конкретном задании. Для вывода информации на экран использовать функцию WriteConsole. Для ввода информации с консоли (если это указано в задании) использовать функцию ReadConsole. Предусмотреть в программе обработку ошибок, возникающих при вызовах функций Win32 API. Для получения кода ошибки использовать функцию GetLastError. Вывести на экран информацию об ошибке в случае ее возникновения.

5.3.2. Методические указания к выполнению
лабораторной работы

Консольное приложение – это такое приложение, которое взаимодействует с пользователем только в текстовом режиме при помощи специального окна (консоли). При этом обеспечивается отображение информации на экране и ввод информации с клавиатуры. В отличие от графических приложений (GUI-приложений), которые работают с оконной системой Windows, консольные приложения работают только с текстовой консолью.

Вывод-вывод для консоли можно организовать двумя способами:

  1. Использование стандартных потоков ввода-вывода для вывода информации в окно консоли и для ввода информации с клавиатуры. В языке C для этого могут использоваться функции printf() (вывод) и scanf() (ввод), а в языке C++ – потоки cout (вывод) и cin (ввод).

  2. Использование функции WriteConsole для вывода информации в окно консоли, и функции ReadConsole для ввода информации с клавиатуры.

Любое приложение может иметь только одну связанную с ним консоль. Графические приложения помимо структуры окон также могут использовать консоль для ввода-вывода. Такой подход, как правило, используется различными серверными приложениями, которые выводят в консоль информацию о состоянии и об ошибках.

При запуске консольного приложения для него автоматически создается окно консоли. При запуске графических приложений консоль автоматически не создается. Для создания консоли может использоваться функция AllocConsole. Для закрытия консоли и освобождения связанных с ней ресурсов используется функция FreeConsole.

На уровне формата исполнительного файла консольное приложение отличается от графического только именем экспортируемой функции, определяющей точку входа в программу. Для консольных приложений это функция main, а для графических – WinMain. Именно по имени этой функции система определяет тип приложения (консольное или графическое).

Для создания консольных приложений используются опции конкретного компилятора. Если используется какая-либо среда разработки (например, Microsoft Visual C++ или Borland C++Builder), то, как правило, опция создания консольного приложения включена в параметры проекта.

При написании лабораторной работы необходимо самостоятельно изучить работу функций, указанных в конкретном задании. Для этого можно использовать несколько источников:

  1. Microsoft Developer Network Library (MSDN Library).

  2. Microsoft Win32 Programmer’s Reference (обычно это файл win32.hlp – входит в состав таких сред разработки как Borland C++ 5.0, Borland C++Builder, Borland Delphi).

В указанных источниках функции Win32 API описаны достаточно подробно. Приведены различные рекомендации и примеры использования.

В качестве примера консольного приложения ниже представлена программа, выводящая на экран содержимое папки с указанием размера файлов. Имя папки вводится с командной строки. При отсутствии ввода используется текущая папка.

#include <windows.h>

#include <tchar.h>

int _tmain(int argc, LPTSTR argv[])

{

TCHAR szPath[MAX_PATH];

TCHAR szInfo[256];

WIN32_FIND_DATA FindFileData;

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

DWORD Written;

if (argc > 1)

lstrcpy(szPath, argv[1]);

else

lstrcpy(szPath, _T(""));

lstrcat(szPath, _T("*.*"));

HANDLE hFind = FindFirstFile(szPath, &FindFileData);

if (hFind != INVALID_HANDLE_VALUE)

{

do

{

if (FindFileData.dwFileAttributes &

FILE_ATTRIBUTE_DIRECTORY)

wsprintf(szInfo, _T("%s <DIR>\n"),

FindFileData.cFileName);

else

wsprintf(szInfo, _T("%s %d\n"),

FindFileData.cFileName,

FindFileData.nFileSizeLow);

WriteConsole(hOut, szInfo, lstrlen(szInfo),

&Written, NULL);

} while (FindNextFile(hFind, &FindFileData));

FindClose(hFind);

}

}

5.4. Контрольные вопросы

  1. Какие основные компоненты входят в архитектуру Windows 95?

  2. Что такое диспетчер виртуальных машин?

  3. Какие основные компоненты входят в состав подсистемы управления печатью?

  4. Что такое реестр?

  5. Что такое вызов удаленных процедур?

  6. Для каких целей могут быть использованы функции системного сервиса?

5.5. Варианты заданий на лабораторную работу

  1. Написать программу, выполняющую поблочное копирование файлов. Имена файлов ввести с командной строки. Использовать функции CreateFile, ReadFile, WriteFile и CloseHandle. Если файл уже существует, выдать предупреждение и запрос на перезапись существующего файла.

  2. Написать программу, выполняющую построчное чтение данных с клавиатуры и запись считанных символов в файл. Для установки режима построчного чтения использовать функцию SetConsoleMode с константами ENABLE_PROCESSED_INPUT и ENABLE_LINE_INPUT. В этом случае Функция ReadConsole будет возвращать управление при нажатии клавиши Enter. Программа завершается при нажатии комбинации клавиш Ctrl+C. Программа должна завершаться при вводе пустой строки. Использовать в программе следующие функции: CreateFile, WriteFile, CloseHandle, GetStdHandle.

  3. Модернизировать пример программы чтения содержимого папки (см. выше) так, чтобы обеспечить возможность рекурсивного обхода дерева каталогов и вывода информации о файлах. Вывести помимо размера файла дату и время его создания, а также атрибуты. Использовать функцию FileTimeToSystemTime для вывода даты и времени создания файла.

  4. Написать программу, записывающую в файл шестнадцатеричный дамп указанного файла. Имена файлов ввести с клавиатуры. Шестнадцатеричный дамп представляет собой изображение значения байт в шестнадцатеричном виде. Например, значению 0x2F соответствует строка “2F”. Последовательность значений байт записывается в виде “XX XX XX …”, где XX – значение байта, записанное в шестнадцатеричном виде. Записывать в файл по 16 значений байт в строке. Использовать в программе следующие функции: CreateFile, ReadFile, WriteFile, CloseHandle.

  5. Написать программу, выводящую на экран содержимое текстового файла. Имя файла ввести с командной строки. Отображать на экране только символы с кодами 32 – 127. Использовать в программе следующие функции: CreateFile, ReadFile, CloseHandle.

  6. Написать программу, выводящую следующую информацию об указанном файле: дата и время создания, дата и время последнего обращения, размер файла, имя MS-DOS. Имя файла ввести с клавиатуры. Использовать в программе функцию: FindFirstFile и структуру WIN32_FIND_DATA.



Скачать документ

Похожие документы:

  1. Том 2 документации об аукционе для проведения открытого аукциона для субъектов малого предпринимательства

    Инструкция
    ... с некоторыми операционными системами) - Вес ... Методическое пособие по ... пособием и предназначена для использования на учебных занятиях по химии, и другим общеобразовательным дисциплинам ... выполнения лабораторных работ по биологии» ... (лота), указанным в томе ...
  2. Ищите тесты не только по названиям

    Тесты
    ... методического) уровня системы ... работой всех устройств ПК и процессом выполнения прикладных программ, называется 3. Операционные системы ... дисциплины ... , лабораторное оборудование ... пособия по ... по достижении: 108. Выполнение налогоплательщиком письменных указаний ...
  3. Постановление исполнительного комитета г казани 30 06 2009 №5258 об утверждении стандарта муниципальной услуги «предоставление общедоступного бесплатного начального общего основного общего среднего (полного) общего образования по основным

    Программа
    ... Д Д - 1.4 Методическое пособие для учителя К К - 1.5 Рабочие тетради по физике Д Д - 1.6 Хрестоматия по физике К** К** По возможности 1.7 Комплекты пособий для выполнения лабораторных ...
  4. III ПРИРОДНЫЙ ЗАКОН ПИТАНИЯ ЧЕЛОВЕКА

    Закон
    ... операционный ... указанный срок подлежат увольнению по профессиональной непригодности. Обязательно выполнение ... системы и системы обмена веществ, нарушается работа всей пищеварительной системы ... наглядные пособия, ... “Дисциплина” ... методически ... У лабораторных мышей ...
  5. Методическое пособие по по дисциплине «теоретические основы автоматизированного управления» и указания к выполнению лабораторных работ

    Методическое пособие
    ... Методическое пособие по по дисциплине «Теоретические основы автоматизированного управления» и указания к выполнению лабораторных работ Номер специальности – 230102 «Автоматизированные системы ... и под различными операционными системами. При этом ...

Другие похожие документы..