Windows API
Разработчик(и) | Майкрософт |
---|---|
Первоначальный выпуск | 20 ноября 1985 г |
Операционная система | Microsoft Windows , ОС/2 |
Предшественник | ДВА API |
Тип | API |
Лицензия | Собственный |
Веб-сайт | https://learn.microsoft.com/en-us/windows/apps/ |
Windows API , неофициально WinAPI , является основным интерфейсом прикладного программирования (API) , который позволяет компьютерной программе получать доступ к функциям Microsoft Windows операционной системы , в которой она работает.
Каждая основная версия Windows API имеет другое имя, которое определяет аспект совместимости этой версии. Например, Win32 — это основная версия Windows API, работающая в 32-битных системах. Название Windows API в совокупности относится ко всем версиям этой возможности Windows.
Microsoft предоставляет поддержку разработчикам через комплект разработки программного обеспечения Microsoft Windows SDK , который включает в себя документацию и инструменты для создания программного обеспечения на основе Windows API.
Услуги
[ редактировать ]Этот раздел необходимо обновить . Причина такова: категории устарели, как и ссылки на них; см., например, https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-api-list . ( май 2023 г. ) |
Функции, предоставляемые Windows API, можно сгруппировать в восемь категорий: [1]
- Базовые услуги
- Предоставляет доступ к основным ресурсам, доступным системе Windows. Включены такие вещи, как файловые системы , устройства , процессы , потоки и обработка ошибок . Эти функции находятся в ядро.exe , krnl286.exe или krnl386.exe файлы в 16-битной Windows и kernel32.dll и KernelBase.dll в 32 и 64 битной Windows. Эти файлы находятся в папке \Windows\System32 во всех версиях Windows. [2]
- Расширенные услуги
- Обеспечивает доступ к функциям за пределами ядра. Включены такие вещи, как реестр Windows , выключение/перезапуск системы (или ее прерывание), запуск/остановка/создание службы Windows , управление учетными записями пользователей. Эти функции находятся в advapi32.dll и advapires32.dll в 32-битной Windows.
- Интерфейс графического устройства
- Предоставляет функции для вывода графического содержимого на мониторы , принтеры и другие устройства вывода . Он находится в gdi.exe в 16-битной Windows и gdi32.dll в 32-битной Windows в пользовательском режиме. Поддержка GDI в режиме ядра обеспечивается
win32k.sys
который напрямую взаимодействует с графическим драйвером. [3] [4] - Пользовательский интерфейс
- Предоставляет функции для создания и управления экранными окнами и большинством основных элементов управления, таких как кнопки и полосы прокрутки , получение ввода с помощью мыши и клавиатуры, а также другие функции, связанные с частью графического пользовательского интерфейса (GUI) Windows. Этот функциональный блок находится в пользователь.exe в 16-битной Windows и user32.dll в 32-битной Windows. Начиная с версий Windows XP , основные элементы управления находятся в comctl32.dll , вместе с общими элементами управления (Common Control Library). [5]
- Библиотека общих диалоговых окон
- Предоставляет приложениям стандартные диалоговые окна для открытия и сохранения файлов, выбора цвета и шрифта и т. д. Библиотека находится в файле с именем commdlg.dll в 16-битной Windows и comdlg32.dll в 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [6]
- Общая библиотека управления
- Предоставляет приложениям доступ к некоторым расширенным элементам управления, предоставляемым операционной системой. К ним относятся такие элементы, как строки состояния , индикаторы выполнения , панели инструментов и вкладки . Библиотека находится в файле библиотеки динамической компоновки (DLL) с именем commctrl.dll в 16-битной Windows и comctl32.dll в 32-битной Windows. Он сгруппирован в категории «Пользовательский интерфейс» API. [7]
- Оболочка Windows
- Компонент Windows API позволяет приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы , а также изменять и расширять ее. Компонент находится в оболочка.dll в 16-битной Windows и Shell32.dll в 32-битной Windows. Упрощенные служебные функции Shell находятся в shlwapi.dll . Он сгруппирован в категории «Пользовательский интерфейс» API. [8] [9]
- Сетевые службы
- Предоставьте доступ к различным сетевым возможностям операционной системы. Его подкомпоненты включают NetBIOS , Winsock , NetDDE , удаленный вызов процедур (RPC) и многие другие. Этот компонент находится в netapi32.dll в 32-битной Windows. [10]
- Интернет
- Веб-браузер Internet Explorer (IE) также предоставляет множество API-интерфейсов, которые часто используются приложениями и поэтому могут считаться частью Windows API. IE был включен в операционную систему начиная с Windows 95 OSR2 и предоставлял веб-службы приложениям, начиная с Windows 98 . [11] В частности, он используется для обеспечения:
- Встраиваемый элемент управления веб-браузером, содержащийся в shdocvw.dll и mshtml.dll .
- Служба моникеров URL-адресов, содержащаяся в urlmon.dll , который предоставляет COM- объекты приложениям для разрешения URL-адресов. Приложения также могут предоставлять свои собственные обработчики URL-адресов для использования другими.
- Клиентская библиотека HTTP, которая также учитывает общесистемные настройки прокси-сервера (wininet.dll); однако Microsoft добавила еще одну клиентскую библиотеку HTTP под названием winhttp.dll, которая меньше по размеру и больше подходит для некоторых приложений.
- Библиотека для поддержки многоязычного и международного текста (mlang.dll).
- DirectX Transforms — набор компонентов фильтров изображений.
- Поддержка XML (компоненты MSXML, хранящиеся в msxml*.dll ).
- Доступ к адресным книгам Windows.
Взаимодействие с программой
[ редактировать ]Windows API определен на языке программирования C. [12] Его функции и структуры данных определены в синтаксисе C (см. windows.h ). Однако API можно использовать с помощью любого языка программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов .
Следует отметить, что внутренняя реализация функций API была разработана на нескольких языках, кроме C. [а]
Несмотря на то, что C не является языком объектно-ориентированного программирования (ООП), Windows API в некоторой степени объектно-ориентирован из-за использования дескрипторов. Различные другие технологии Microsoft и других компаний делают этот объектно-ориентированный аспект более очевидным за счет использования языка ООП, такого как C++ — см. Библиотеку классов Microsoft Foundation (MFC), Библиотеку визуальных компонентов (VCL), GDI+ . Следует отметить, что Windows 8 предоставляет Windows API и WinRT API, реализованные на C++. [13] и является объектно-ориентированным по своей конструкции. [13]
Windows.pas — это модуль Pascal / Delphi , который предоставляет функции Windows API. Это эквивалент языка C windows.h в языке Паскаль . [14]
Windows API по большей части предназначен для доступа программы к функциям операционной системы . Для связи между различными приложениями Windows Microsoft разработала ряд технологий наряду с Windows API. Это началось с динамического обмена данными (DDE), который был заменен связыванием и внедрением объектов (OLE), а затем моделью компонентных объектов (COM), объектами автоматизации , элементами управления ActiveX и .NET Framework . Между этими технологиями не всегда существует четкое различие, и они во многом совпадают.
Разнообразие терминов в основном является результатом группировки программных механизмов, которые относятся к данному аспекту разработки программного обеспечения. Автоматизация, в частности, относится к экспорту функции приложения или компонента (в виде интерфейса прикладного программирования (API)), чтобы ею могли управлять другие приложения, а не только пользователи-люди. .NET — это автономная общая методология и технология для разрабатывайте настольные и веб-приложения, написанные на различных языках JIT-компиляции .
Связанные технологии
[ редактировать ]Многие технологии Microsoft используют Windows API, как и большинство программ, работающих в Windows. Будучи промежуточным программным обеспечением между Windows API и приложением, эти технологии обеспечивают некоторый доступ к Windows API. Некоторые технологии описываются как оболочка Windows API, но это спорно, поскольку ни одна другая технология не предоставляет и не раскрывает все возможности Windows API.
- Библиотека классов Microsoft Foundation (MFC) предоставляет некоторые функции Windows API в C++ классах и, таким образом, обеспечивает более объектно-ориентированный способ взаимодействия с API.
- Библиотека активных шаблонов (ATL) — это C++ библиотека шаблонов , которая обеспечивает некоторый доступ к Windows API.
- Библиотека шаблонов Windows (WTL) была разработана как расширение ATL и задумывалась как меньшая альтернатива MFC.
- Большинство платформ приложений для Windows предоставляют некоторый доступ к Windows API; включая среду выполнения .NET , виртуальную машину Java и любые другие языки программирования, предназначенные для Windows.
Хотя почти все программы Windows используют Windows API, в линейке операционных систем Windows NT программы, которые запускаются на ранних этапах процесса запуска Windows, вместо этого используют Native API . [15]
История
[ редактировать ]Windows API всегда открывал программистам большую часть базовой структуры систем Windows. Это имело то преимущество, что давало им большую гибкость и власть над своими приложениями, но также налагало большую ответственность за то, как приложения обрабатывают различные низкоуровневые, иногда утомительные операции, связанные с графическим пользовательским интерфейсом .
Например, начинающий программист на языке C часто пишет простое «привет, мир» в качестве своего первого задания. Рабочая часть программы — это всего лишь одна строка printf внутри основной подпрограммы. Накладные расходы на подключение к стандартной библиотеке ввода-вывода также составляют всего одну строку:
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
}
Чарльз Петцольд , написавший несколько книг о программировании для Windows API, сказал: «Первоначальная программа hello world в Windows 1.0 SDK вызвала небольшой скандал. HELLO.C имел длину около 150 строк, а сценарий ресурса HELLO.RC было еще около 20 строк (...) Программисты-ветераны часто сворачивались калачиком от ужаса или смеха, встречая программу Windows hello-world». [16] Петцольд объясняет, что, хотя это был первый образец программы для Windows, с которым познакомились разработчики, он был довольно «причудливым» и более сложным, чем нужно. Устав от того, что люди высмеивают длину примера, он в конце концов сократил его до простого вызова MessageBox. [17]
За прошедшие годы в системы Windows были внесены различные изменения и дополнения, и API Windows менялся и расширялся, чтобы отразить это. [18] Windows API для Windows 1.0 поддерживал менее 450 вызовов функций , тогда как современные версии Windows API поддерживают тысячи. Однако в целом интерфейс остался достаточно последовательным, и старое приложение Windows 1.0 по-прежнему будет выглядеть знакомым программисту, привыкшему к современному Windows API. [19]
Microsoft приложила усилия для обеспечения обратной совместимости . Чтобы добиться этого, при разработке новых версий Windows Microsoft иногда применяла обходные пути. [20] для обеспечения совместимости со сторонним программным обеспечением, которое использовало предыдущую версию недокументированным или даже нецелесообразным образом. Рэймонд Чен , разработчик Microsoft, работающий над Windows API, сказал: «Я, наверное, мог бы месяцами писать исключительно о плохих вещах, которые делают приложения, и о том, что нам нужно сделать, чтобы они снова заработали (часто вопреки самим себе). Вот почему я особенно злюсь, когда люди обвиняют Microsoft в злонамеренном взломе приложений во время обновлений ОС. Если какое-либо приложение не запускалось в Windows 95, я воспринимал это как личную неудачу». [21]
Одним из крупнейших изменений в Windows API стал переход с Win16 (поставлявшегося в Windows 3.1 и более ранних версиях) на Win32 (Windows NT и Windows 95 и более поздних версий). Хотя Win32 изначально был представлен в Windows NT 3.1 , а Win32 позволяла использовать подмножество Win32 до Windows 95, только в Windows 95 началось широкое перенесение приложений на Win32. Чтобы облегчить переход в Windows 95 для разработчиков вне и внутри Microsoft, использовалась сложная схема API- интерфейсов , которая могла позволить 32-битному коду вызывать 16-битный код (для большинства API Win16) и наоборот. Плоские преобразователи позволяли 32-битному коду вызывать 16-битные библиотеки, и эта схема широко использовалась внутри библиотек Windows 95, чтобы избежать портирования всей ОС на Win32 за один пакет. В Windows NT операционная система была чистой 32-битной, за исключением частей, обеспечивающих совместимость с 16-битными приложениями, и для перехода от Win16 к Win32 были доступны только общие преобразователи, как и в Windows 95. Platform SDK поставлялся с компилятором, который мог создавать код, необходимый для этих переходов. Версии 64-битных Windows также может запускать 32-битные приложения через WoW64 . Папка SysWOW64, расположенная в папке Windows на диске с ОС, содержит несколько инструментов для поддержки 32-битных приложений. [22]
Основные версии
[ редактировать ]Каждая версия Microsoft Windows содержит версию Windows API, и почти каждая новая версия Microsoft Windows содержит дополнения и изменения в Windows API. [23]
Название Windows API относится, по сути, к одной и той же возможности в каждой версии Windows, но у этой возможности есть другое название, основанное на основных архитектурных аспектах версии Windows, в которой она содержится. Когда была только одна версия, она называлась просто Windows API. Затем, когда было сделано первое крупное обновление, Microsoft дала ему имя Win32, а первой версии — Win16. Термин Windows API относится к обеим версиям и ко всем впоследствии разработанным основным версиям. [1]
- Win16 присутствует в 16-битных версиях Windows. Функции находятся в основном в основных файлах ОС: kernel.exe (или krnl286.exe или krnl386.exe ), user.exe и gdi.exe . Несмотря на файла расширение Exe доступ к такому файлу осуществляется как к библиотеке динамической компоновки (DLL) .
- Win32 присутствует в 32-разрядных версиях Windows (NT, 95 и более поздних версиях). Функции реализованы в системных файлах DLL, включая kernel32.dll , user32.dll и gdi32.dll . Win32 был представлен вместе с Windows NT . В Windows 95 он первоначально назывался Win32c, где c означает совместимость . Позднее Microsoft отказалась от этого термина в пользу Win32.
- Win32s — это расширение семейства Microsoft Windows Windows 3.1x , в котором реализовано подмножество Win32 API для этих систем. «S» означает «подмножество».
- Win64 — версия в 64-битных платформах архитектуры Windows (по состоянию на 2021 г.). [update], x86-64 и AArch64 ). [б] [24] [25] Как 32-битные, так и 64-битные версии приложения могут быть скомпилированы из одной кодовой базы , хотя некоторые старые функции API устарели, а некоторые функции API, которые устарели в Win32, были удалены. памяти Все указатели по умолчанию являются 64-битными ( модель LLP64 ), поэтому портирование исходного кода, совместимого с Win32, включает обновление для арифметики 64-битных указателей . [26]
- WinCE — это версия операционной системы Windows CE .
Другие реализации
[ редактировать ]Проект Wine Win32 API обеспечивает уровень совместимости для Unix-подобных платформ между API ядра Linux и программами, написанными для Windows API. ReactOS идет еще дальше и стремится реализовать полную операционную систему Windows, тесно сотрудничая с проектом Wine для содействия повторному использованию кода и совместимости. DosWin32 и HX DOS Extender — это другие проекты, которые эмулируют Windows API, позволяя выполнять простые программы Windows из командной строки DOS . Odin — это проект эмуляции Win32 в OS/2 , заменяющий исходную эмуляцию Win-OS/2, основанную на коде Microsoft. Другие второстепенные реализации включают библиотеки MEWEL и Zinc , которые были предназначены для реализации подмножества API Win16 в DOS (см. Список платформо-независимых библиотек графического интерфейса ).
Windows Interface Source Environment (WISE) — это программа лицензирования Microsoft, которая позволяла разработчикам перекомпилировать и запускать приложения для Windows на платформах Unix и Macintosh . WISE SDK были основаны на эмуляторе Windows API, который мог работать на этих платформах. [27]
(PWI) Sun Усилия по стандартизации включали общедоступный интерфейс Windows для Win16 (см. также: Двоичный интерфейс приложения Sun Windows ( Wabi )), интерфейс программирования приложений Willows Software для Windows (APIW) для Win16 и Win32 (см. также: Willows TWIN ) и ECMA-234 , который пытался стандартизировать Windows API.
Поддержка компилятора
[ редактировать ]Для разработки программного обеспечения, использующего Windows API, компилятор должен иметь возможность использовать перечисленные выше библиотеки DLL, специфичные для Microsoft (COM-объекты находятся за пределами Win32 и предполагают определенный макет виртуальной таблицы). Компилятор должен либо обрабатывать файлы заголовков, которые предоставляют имена внутренних функций API, либо предоставлять такие файлы.
Для языка C++ компании Zortech (позже Symantec , затем Digital Mars ), Watcom и Borland выпустили хорошо известные коммерческие компиляторы, которые часто использовались с Win16, Win32 и Win32. Некоторые из них поставляли расширители памяти , позволяющие программам Win32 запускаться на Win16 с помощью распространяемой Microsoft Win32s DLL. Компилятор Zortech был, вероятно, одним из первых стабильных и удобных в использовании компиляторов C++ для программирования под Windows, до того как у Microsoft появился компилятор C++.
Для определенных классов приложений система компилятора также должна иметь возможность обрабатывать языка описания интерфейса файлы (IDL). В совокупности эти необходимые компоненты (компиляторы, инструменты, библиотеки и заголовки) известны как Microsoft Platform SDK . Какое-то время Microsoft Visual Studio и интегрированная система разработки Borland были единственными интегрированными средами разработки (IDE), которые могли это обеспечить (хотя SDK можно бесплатно загрузить отдельно от всего пакета IDE из Microsoft Windows SDK для Windows). 7 и .NET Framework 4 ).
По состоянию на 2016 год [update], проекты MinGW и Cygwin также предоставляют такую среду на основе коллекции компиляторов GNU (GCC) с использованием автономного набора заголовочных файлов, чтобы упростить связывание с DLL, специфичными для Win32. LCC-Win32 — это компилятор C, поддерживаемый Jacob Navia, бесплатная программа для некоммерческого использования. Pelles C — это бесплатный компилятор C, поддерживаемый Pelle Orinius. Free Pascal — это бесплатный программный компилятор Object Pascal , поддерживающий Windows API. Пакет MASM32 — это зрелый проект, обеспечивающий поддержку Windows API в рамках Microsoft Macro Assembler (MASM) с использованием специально созданных или преобразованных заголовков и библиотек из Platform SDK. Плоский ассемблер FASM позволяет создавать программы для Windows без использования внешнего компоновщика, даже при работе в Linux.
также необходима поддержка компилятора Windows Для структурированной обработки исключений (SEH) . Эта система служит двум целям: она обеспечивает основу, на которой может быть реализована обработка исключений , специфичная для языка , и то, как ядро уведомляет приложения об исключительных ситуациях, таких как разыменование недопустимого указателя или переполнение стека. Компиляторы Microsoft/Borland C++ имели возможность использовать эту систему, как только она была представлена в Windows 95 и NT, однако фактическая реализация была недокументирована, и ее пришлось реконструировать для проекта Wine и свободных компиляторов. SEH основан на помещении кадров обработчика исключений в стек, а затем добавлении их в связанный список, хранящийся в локальном хранилище потока (первое поле блока среды потока). При возникновении исключения ядро и базовые библиотеки разворачивают стек, запуская обработчики и фильтры по мере их возникновения. В конце концов, каждое исключение, не обработанное приложением, будет обработано обработчиком блокировки по умолчанию, который выводит на экран общее диалоговое окно сбоя Windows.
См. также
[ редактировать ]- Библиотеки Windows для OS/2
- Интерикс
- API ядра Linux
- Файлы библиотеки Microsoft Windows
- Устаревшие аудиокомпоненты Windows
- C++/WinRT — библиотека, обеспечивающая доступ к среде выполнения Windows.
Примечания
[ редактировать ]- ^ И Паскаль , и ассемблер x86 широко использовались в более ранних версиях, прежде чем C стал доминирующим. Напоминанием об этом является то, что функции API по-прежнему используют соглашение о вызовах Pascal для восстановления стека из переданных параметров после вызова (хотя они ожидают, что параметры будут перемещены справа налево, как это делает большинство компиляторов C по умолчанию).
- ^ Номенклатура выпущенных 64-разрядных версий включает Windows XP Professional x64 Edition и x64 Editions Windows Server 2003, Windows Vista и Windows Server 2008 на платформе x86-64 (AMD64), а также Windows 2000 Server Limited Edition, 64-разрядную версию Windows XP. Edition , Windows Advanced Server 2003 для Itanium и Windows 2008 Advanced Server для Itanium на платформе IA-64 .
Ссылки
[ редактировать ]- ^ Jump up to: а б Сеть разработчиков Microsoft (июль 2005 г.). Обзор API Windows. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Базовые услуги. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Интерфейс графического устройства. Проверено 28 августа 2005 г.
- ^ «Г» . Сеть разработчиков Microsoft . Проверено 28 января 2009 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Пользовательский интерфейс. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (2005). Библиотека общих диалоговых окон. Проверено 22 сентября 2005 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Общая библиотека управления. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Оболочка Windows. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (2005). Руководство программиста Shell. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (июль 2005 г.). Сетевые службы. Проверено 28 августа 2005 г.
- ^ Сеть разработчиков Microsoft (январь 2006 г.); Программирование и повторное использование браузера . Проверено 22 января 2006 г.
- ^ «Пошаговое руководство: создание традиционного приложения для рабочего стола Windows (C++)» . Документы Майкрософт . 23 февраля 2022 г.
- ^ Jump up to: а б Мэйберри, Майкл (2012). Обнародован WinRT . Нью-Йорк: Апресс. п. 3. ISBN 978-1-4302-4585-8 .
- ^ Тексейра, Стив и Ксавье Пачеко (2002). Руководство разработчика Borland Delphi 6 . Сэмс. п. 253. ИСБН 0672321157 .
- ^ Руссинович, Марк (ноябрь 2006 г.). «Внутри собственных приложений» . Документы Майкрософт . Проверено 12 апреля 2022 г.
- ^ Чарльз Петцольд (декабрь 2001 г.). Программирование Microsoft Windows на C# . Майкрософт Пресс. За консолью, стр. 47.
- ^ Петцольд, Чарльз. «Печально известная программа Windows «Hello World»» . www.charlespetzold.com . Проверено 30 июня 2024 г.
- ^ Подробный анализ изменений в Windows API от XP до 10. Проверено 8 сентября 2016 г.
- ↑ Чарльз Петцольд (11 ноября 1998 г.). Программирование для Windows, пятое издание . Майкрософт Пресс. API и модели памяти, стр. 9.
- ^ Смит, Грэм (8 октября 2022 г.). «В Windows 95 был специальный код, предназначенный только для исправления ошибки в оригинальном SimCity» . Камень, Бумага, Дробовик .
- ↑ Раймонд Чен (15 октября 2003 г.). А как насчет BOZOSLIVEHERE и TABHETEXTOUTFORWIMPS? Проверено 29 июня 2022 г.
- ^ Хоффман, Крис. «В чем разница между папками «System32» и «SysWOW64» в Windows?» . Как компьютерщик . Проверено 11 апреля 2023 г.
- ^ Проект Исеран (1996–2001). История Windows API. Проверено 7 октября 2005 г.
- ^ «Домашняя страница Windows XP Professional x64 Edition» . Майкрософт.
- ^ «Обзор 64-битных вычислений Microsoft» . Майкрософт.
- ^ «MSDN: подготовка к 64-битной версии Windows» . Майкрософт.
- ^ WISE. Архивировано 30 марта 2008 г. в Wayback Machine.