
- •Тема 8. Интерфейсы операционных систем
- •8.1.Интерфейс прикладного программирования
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1.Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1.Основные определения
- •8.1.1.Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1.1. Основные определения
- •8.1. Интерфейс прикладного программирования
- •8.1.2. Классификация системных вызовов
- •Основные функции управления синхронизацией
- •Основные функции управления виртуальной и физической памятью
- •Основные функции управления виртуальной и физической памятью
- •Функции механизма отображения файла в память
- •Основные функции для файлового ввода-вывода
- •Основные функции управления каталогами
- •Некоторые категории вызовов GUI
- •Основные функции управления защитой
- •Основные функции управления реестром
- •Основные функции управления консолью
- •8.1.Интерфейс прикладного программирования
- •8.1.3. Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.3. Программирование системных вызовов
- •8.1.3. Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.3.Программирование системных вызовов
- •8.1.Интерфейс прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •Способы реализации ИПП
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.1.4. Реализация интерфейса прикладного программирования
- •На рис. позицией 1 обозначен вызов обработчика ловушки и диспетчера базовых сервисов. Позиции
- •8.1.4. Реализация интерфейса прикладного программирования
- •8.2. Интерфейс пользователя
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.1.Типы интерфейсов
- •8.2.1. Типы интерфейсов
- •8.2.Интерфейс пользователя
- •8.2.2.Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2. Консоль
- •8.2.2.Консоль
- •8.2.Интерфейс пользователя
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.3. Графическая среда
- •8.2.Интерфейс пользователя
- •8.2.Интерфейс пользователя
- •8.2.Интерфейс пользователя
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями
- •8.2.5. Архитектура, управляемая событиями

8.1.1. Основные определения
Иллюстрация выполнения методов классов стандартных библиотек.
Классы стандартных библиотек, таких как MFC или FCL, реализованы в виде DLL-библиотек. Как и в случае с функциями стандартных
библиотек системы программирования, метод может выполниться либо |
|
без вызова системной функции (1), либо с вызовом (2). |
21 |
|

8.1.1. Основные определения
Программа, решающая рассмотренную выше задачу, но с использованием функций API Win32.
#include <windows.h> #include <string.h> #include <stdio.h>
LRESULT CALLBACK WindowFunc (HWND, UNIT, WPARAM,
LPARAM); // прототип |
|
|
|
|
HINSTANCE hInst; |
// для сохранения дескриптора приложения |
|||
// В. Главная функция |
|
|
|
|
int WINAPI |
WinMain (HINSTANCE hThisInst, |
//дескриптор экземпляра |
||
|
|
HINSTANCE hPrevInst, |
// = 0 |
|
|
|
LPSTR |
lpszArgs, |
// хвост командной строки, 0 |
{ |
|
int |
iWinMode) // вид окна при запуске |
|
|
|
|
|
|
HWND |
hwnd; |
|
// дескриптор окна |
|
MSG |
msg; |
|
// сообщение |
|
WNDCLASSEX wcl; |
|
// структура класса окна |
||
hInst = hThisInst; |
|
// сохранить дескриптор приложения |
22

8.1.1.Основные определения
//определить класс окна
wcl.cbSize = sizeof(wcl); |
|
|
wcl.hlnstance = hThisInst; |
// дескриптор данного приложения |
|
wcl.lpszClassName= "Имя класса"; // имя класса окна |
||
wcl.lpfnWndProc = WndProc; |
// функция окна |
|
wcl.style = 0; |
// стиль по умолчанию |
|
wcl.hlcon = Loadlcon (NULL, IDI_APPLICATION); |
// стд.значок |
|
wcl.hCursor= LoadCursor (NULL, IDC_ARROW); |
// стд. курсор |
|
wcl.lpszMenuName= NULL; |
// без меню |
|
wcl.cbClsExtra = 0; |
// без дополнительной |
|
wcl.cbWndExtra = 0; |
//информации |
|
wcl.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH); wcl.hIconSm= LoadIcon(NULL, IDI_APPLICATION);
if (! RegisterClassEx (&wcl) ) return 0; // зарегистрировать класс окна
23

8.1.1.Основные определения
//создать окно
hwnd = CreateWindow ("Имя класса", // имя класса |
; |
||
"Заголовок окна", |
|
//заголовок |
|
WS_OVERLAPPEDWINDOW, // стиль окна |
|
||
CW_USEDEFAULT, |
|
// Х-координата окна |
|
CW_USEDEFAULT, |
|
//Y-координата окна |
|
CW_USEDEFAULT, |
|
//ширина окна |
|
CW_USEDEFAULT, |
|
//высота окна |
|
HWND_DESKTOP, |
|
// нет родительского окна |
|
NULL, |
// нет меню |
|
|
hThisInst, |
// дескриптор приложения |
|
|
NULL ); |
/* без дополнительных аргументов */ |
|
|
ShowWindow (hwnd, iWinMode); // Показать окно |
|
||
UpdateWindow (hwnd); |
// и вывести в него содержимое |
|
24

8.1.1. Основные определения
while (GetMessage (&msg, NULL, 0,0) ) // Цикл обработки сообщений
{ |
|
|
|
TranslateMessage |
(&msg); |
// Послать символьное сообщ. клавиатуры |
|
DispatchMessage (&msg); |
// Вернуть управление Windows |
||
} |
|
|
|
return msg.wParam; |
|
||
} |
|
|
|
// С. Оконная функция |
|
||
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, |
|||
WPARAM wParam, LPARAM iParam) |
|||
{ |
|
|
|
static HWND |
hwndButton; |
||
char |
szBuffer[50]; |
|
|
HDC |
hdc; |
|
|
25

8.1.1. Основные определения
switch (iMsg)
{
case WM_CREATE:
hwndButton = CreateWindow ("BUTTON", "Ok",
BS_DEFPUSHBUTTON| WS_CHILD |WS_VISIBLE, 100, 100, 60, 30, hwnd, (HMENU)1, hInst, NULL) ;
return 0;
case WM_COMMAND:
MessageBox (hwnd, "", "Нажата кнопка Ok", MBjOK); break;
case WMJJESTROY: PostQuitMessage (0); return 0;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
26

8.1.1. Основные определения
Если сравнить две последние программы, решающие одну и ту же задачу, то можно увидеть, что в основе методов классов, используемых в первой программе, лежат вызовы таких системных функций, как:
RegisterClassEx();
CreateWindow();
ShowWindow();
UpdateWindow (); GetMessage (); Translate Message (); DispatchMessage ().
Существует еще порядка полутора тысяч других функций графического интерфейса GUI.
Главную функцию и функцию окна на языке С# необходимо оформить как методы класса, а в начале программы необходимо будет определить пространство имен System.Runtime.InteropServices. Кроме того, для каждой используемой функции API Win32 потребуется вставить атрибут DllImport, указывающий на принадлежность функции к DLL- библиотеке. Следом за этим атрибутом необходимо поместить прототип функции.
27

8.1.1. Основные определения
Такая техника обусловлена тем, что в языках С и C++ прототипы всех системных функций описываются в заголовочном файле windows.h, а в языке С# этот файл не используется.
Пример консольного приложения на языке С#, в котором используется системный вызов MessageBox().
using System;
using System.Runtime.InteropServices; class Class1
{
[DllImport(“User32.dll")]
public static extern int MessageBox (int hParent, string Message, string Caption, int Type);
static void Main()
{
MessageBox (0, "Функция API Win32", "Системный вызов",0);
}
}
28

8.1.1. Основные определения
Программа с консольным приложением на языке C++, котороя делает то же самое:
#include "windows.h" void main()
{
MessageBox (0, "Функция API Win32", "Системный вызов", МВ_ОК);
}
29

8.1. Интерфейс прикладного программирования
8.1.2. Классификация системных вызовов
Во всех операционных системах, исходя из видов ресурсов, с которыми они связаны, функции ИПП можно разделить на несколько групп. Так, в Windows можно выделить следующие группы функций API:
•управление процессами, потоками и синхронизацией;
•управление виртуальной и физической памятью;
•управление вводом-выводом.
В API Windows также есть еще ряд групп:
•графический интерфейс пользователя;
•управление защитой;
•управление реестром;
•консольные функции
•и другие группы специальных функций.
30