API установки Windows, что это такое

Обновлено: 03.07.2024

Windows API (интерфейс прикладного программирования) позволяет написанным пользователем программам взаимодействовать с Windows, например отображать объекты на экране и получать ввод с помощью мыши и клавиатуры. Все программы Windows, кроме консольных программ, должны взаимодействовать с Windows API независимо от языка. Самая последняя версия (по состоянию на 2007 год) — Win32 API. Microsoft поддерживает обширную библиотеку справочной информации для разработчиков на сайте msdn, но презентацию часто трудно понять, и я бы сказал, что это не лучшее место для изучения основ.

Это руководство предназначено для людей, достаточно хорошо знакомых с C или C++ в традиционном сценарии консольного ввода/вывода (с использованием таких вещей, как gets и printf), и которые теперь хотят писать приложения для Windows. Рекомендации по стилю и другую информацию о C++ см. здесь.

Впервые я познакомился с WinAPI (не подозревая об этом) через Microsoft Visual C++. Эта среда разработки предоставляет набор кода для начала работы, а также нечто, называемое файлом ресурсов, который является новым для программистов, привыкших к консольному программированию в старом стиле. Эта комбинация создает у пользователя отчетливое впечатление, что вы больше не можете писать свою собственную автономную программу, состоящую исключительно из файлов .h и .cpp и скомпилированную с помощью вашего любимого компилятора. Однако это ложное впечатление. Хотя файл ресурсов полезен, я советую начать работу без него, а затем использовать его, как только вам будет удобно.

Еще одно замечание, которое у меня есть по поводу MSVC++, заключается в том, что очень сложно редактировать ресурсы вручную или вводить их из другого кода. Однако он хорошо поддерживается и превосходен во многих отношениях, поэтому вы можете использовать его, если у вас есть деньги. Я собрал несколько заметок о проблемах, с которыми я столкнулся при использовании Visual C++, в надежде, что они могут кому-то помочь. Я также использовал довольно хорошую бесплатную среду разработки для C++ в Windows под названием Dev-Cpp от программного обеспечения Bloodshed (не беспокойтесь о странном названии: программное обеспечение хорошее). Еще одна хорошо поддерживаемая бесплатная среда разработки — CodeBlocks.

Я нашел руководство TheForger по Win32 API Tutorial (Brook Miles) весьма полезным, особенно полностью работающие примеры кода. Два других отличных сайта — это Reliable Software и Catch22. Чтобы изучить API Win32, я предлагаю вам начать здесь, затем обратиться к Forger за дальнейшими подробностями, а затем, когда у вас будет хорошее общее представление о том, как что-то делать, перейти к учебнику по надежному программному обеспечению и учебникам Catch22. Первый предоставляет, например, классы и методы общего назначения для API, а второй знакомит вас со многими полезными методами, которые непонятны в msdn.

1. WinMain и WndProc

Для начала я предлагаю вам написать самую простую программу и посмотреть, сможете ли вы ее скомпилировать и запустить. Вот программа:

Это все, что вам нужно. Эта программа должна вывести простое сообщение с кнопкой «ОК». Вам решать, какие параметры необходимо предоставить вашему компилятору, чтобы заставить его работать. Например, в среде разработки, которую я использую, мне пришлось сказать, что я хочу создать новое приложение Windows (не «консольное»). Затем я удалил весь исходный код для начала работы, который он мне предложил, и заменил его приведенным выше. Он скомпилировался и заработал нормально. Однако в Microsoft Visual Studio мне пришлось установить параметр проекта: дополнительную информацию см. в примечаниях к Visual C. Чтобы избежать необходимости в настройке этого параметра, вам нужно добавить пару преобразований типов в приведенный выше код следующим образом:

Теперь обратимся к более длинным программам. Типичная программа Windows (на C или C++) начинается со следующего кода:

Сейчас я опишу код функции WinMain. У вас есть две основные функции: функция WinMain (которая заменяет старую "main(.)") и вызываемая ею функция, обычно называемая WndProc или WindowProcedure или что-то в этом роде. Хотя я покажу вам код внутри WinMain, на данный момент вам не нужно его изменять. Ваш основной бизнес связан с WinProc. Вы должны рассматривать WinMain как более или менее системную функцию (позже вы можете внести незначительные изменения), а WndProc — это ваша функция, и вы должны сделать ее своей собственной, написав ее с нуля!

Прежде чем мы перейдем к этому, давайте заполним тело WinMain:

Напоминаю вам, что на данный момент вы не собираетесь изменять этот код, просто включите его в исходный код программы, в файл с именем "myprog_main.cpp" или что-то в этом роде.

Чтобы получить полностью работающую программу, осталось только написать код функции WndProc. Вот пример:

Этот конкретный пример довольно минимален: он почти ничего не делает. Если вы запустите программу, она просто отобразит окно и позволит вам изменить его размер обычным способом и закрыть его, щелкнув крестик.

Обратите внимание, что каждый case в операторе switch заканчивается возвратом. Это практика, которую я призываю вас принять.Вы всегда должны включать регистр по умолчанию для любых сообщений, которые вы не принимаете, и вызывать предоставляемую Windows функцию DefWindowProc. Я не рекомендую иметь дополнительный код после переключателя, потому что этот переключатель будет становиться длиннее по мере того, как мы добавляем что-то, и если вы поместите что-то после переключателя, это начнет затруднять чтение кода. Вместо этого поместите все, что вам нужно, в каждый случай, даже если это означает повторение материала. Затем убедитесь, что каждый case заканчивается оператором return. Очевидно, что когда вы станете экспертом, вы можете проигнорировать этот совет.

2. Привет, мир

Теперь мы будем предоставлять сообщение "hello world" различными способами. Первый и самый простой — изменить строку заголовка главного окна с «Заголовок моего окна» на «hello world». Вернитесь и найдите его в WinMain, выполните модификацию и наблюдайте за результатами. Это работает, но очевидно, что толку от этого мало.

Теперь добавьте в свой код следующую функцию (например, чуть выше WndProc):

Мы добавили две новые функции. Сначала программа отображает «hello world». Во-вторых, если вы щелкнете по окну, появится всплывающее окно с сообщением «привет еще раз». Из приведенного выше кода вы должны догадаться, что щелчок левой кнопкой мыши в окне генерирует сообщение WM_LBUTTONDOWN и заставляет наш код вызывать функцию MessageBox. Функция MessageBox предоставляется окнами с синтаксисом, который вы можете вывести из этого примера. В большой программе вы могли бы, например, инициировать некоторое длительное вычисление в операторе case WM_LBUTTONDOWN:, а затем вызвать MessageBox, когда длительное вычисление завершено.

Наша собственная функция disp вызывается в ответ на сообщение WM_SIZE. Это сообщение генерируется всякий раз, когда изменяется размер окна, в том числе при первом создании окна. Если вы переместите другое окно поверх маленького окна нашей программы, а затем снова отодвинете его, вы увидите, что текст «hello world» исчез. Это связано с тем, что окну не было дано указание перерисовать его. Однако если вы измените размер окна, текст появится снова, потому что отправлено сообщение WM_SIZE.

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

2.1 Контекст устройства

Функция disp(. ) вводит важную базовую концепцию программирования Windows API. Это концепция «контекста устройства». Каждое устройство, такое как экран, принтер и т. д., имеет контекст устройства. Когда вы хотите отобразить на устройстве, вы взаимодействуете с контекстом устройства (dc). Это логическая конструкция, и Windows заботится о ее взаимодействии с аппаратным устройством. В результате вы должны пройти следующую последовательность, чтобы отобразить вещи: получить DC, записать в него что-то, освободить DC. В случае с текстом возникает еще один вопрос, какой шрифт следует использовать на устройстве. Вы должны сказать, и вы делаете это вызовом SelectObject. Это говорит контроллеру домена «использовать этот шрифт», и контроллер домена отвечает, говоря: «хорошо, а вот шрифт, который я использовал раньше». Идея состоит в том, что хороший пользователь запомнит этот шрифт и вернет ему DC, когда он закончит, с помощью другого вызова SelectObject. И последний вопрос: откуда нам взять шрифт? Позже вы научитесь создавать его с помощью CreateFont, а пока мы просто получаем стандартный, предоставляемый системой, с помощью GetStockObject.

Типы HWND, HDC, HFONT являются дескрипторами (то есть указателями) на различные объекты: очевидно, что быстрее передавать указатели, чем сами объекты.

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

На данный момент наша функция disp() всегда отображает текст в одной и той же точке экрана. Дальнейший вызов перезапишет все, что уже есть. Чтобы сделать его более мощным, вы можете предоставить ему такие параметры, как (. int x, int y, . ), чтобы пользователь мог указать любую точку на экране. Однако рано или поздно вы, вероятно, захотите прокрутить экран. К счастью, это довольно легко сделать.

У меня есть ноутбук Acer Aspire, который часто зависает во время работы. Когда я начал проверять настоящую причину этого, я обнаружил несколько процессов, которые потребляют слишком много ресурсов ЦП. Таким образом, большую часть времени загрузка процессора моего ноутбука составляет 100%. Одним из главных виновников является процесс с именем Windows Setup API. В этой статье объясняется процесс Windows Setup API и способы предотвращения чрезмерной загрузки ЦП.


Мой ноутбук Acer Aspire работает под управлением операционной системы Windows 10. Я запустил диспетчер задач, чтобы проверить причины продолжающегося зависания моего ноутбука Acer Aspire. На фото ниже скриншот моего диспетчера задач.

На снимке экрана показано, насколько процесс Windows Setup API требует ресурсов ЦП.


На момент создания снимка экрана Windows Setup API потреблял 57,2 % от общего использования ЦП. Но в большинстве случаев это требует большей загрузки ЦП и позволяет другим процессам страдать.

Еще один момент, который я отметил, — это 100% использование диска.

Как решить проблему с высокой загрузкой ЦП API установки Windows?
Вы можете решить проблему высокой загрузки ЦП процессом Windows Setup API, уничтожив этот процесс из диспетчера задач.

    Введите Диспетчер задач в поиске Windows





Что такое API установки Windows и его использование?
Согласно базе данных Microsoft, API установки предоставляет набор функций, которые приложение установки вызывает для выполнения операций установки.

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

  • WinBase: функции ядра, CreateFile, CreateProcess и т. д.
  • WinUser: функции графического интерфейса, CreateWindow, RegisterClass и т. д.
  • WinGDI: графические функции, Ellipse, SelectObject и т. д.
  • Общие элементы управления: стандартные элементы управления, списки, ползунки и т. д.

Версии

Версии API привязаны к версии операционной системы. В документации MSDN указана минимальная поддерживаемая операционная система для каждой функции API.

Привет, мир

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

При запуске приложения C или C++ точкой входа исполняемого файла, используемой загрузчиком исполняемого файла, является среда выполнения, предоставляемая компилятором. Загрузчик исполняемого файла считывает исполняемый файл, выполняет любую исправление необходимого образа, а затем вызывает точку входа исполняемого файла, которая для программы C или C++ является средой выполнения, предоставляемой компилятором.

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

Консольное приложение Windows может иметь несколько слегка различающихся интерфейсов для основной точки входа, предоставленной программистом. Разница между ними заключается в том, является ли основной точкой входа традиционный тип int main (int argc, char *argv[]) или специфичная для Windows версия int _tmain(int argc, _TCHAR* argv[]), которая обеспечивает широкие символов в параметрах приложения. Если вы создаете проект консольного приложения Windows Win32 с помощью Visual Studio, сгенерированный исходный код будет конкретной версией Windows.

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

В этом примере объясняется интерфейс основной точки входа в окне Windows (GUI). Для изучения этих тем у вас должны быть:

  • IDE с компилятором (желательно Visual Studio)
  • Знания C

Создайте пустой проект Windows Win32 (графический интерфейс, а не консоль) с помощью IDE. Параметры проекта должны быть установлены для оконного приложения (а не консольного приложения), чтобы компоновщик мог связать его с правильной средой выполнения. Создайте файл main.c, добавив его в проект, а затем введите следующий код:

Это наша программа Win32 "Hello, world". Первым шагом является включение заголовочных файлов Windows. Основной заголовок для всех Windows — это windows.h, но есть и другие.

WinMain отличается от стандартного int main(), используемого с консольным приложением. В интерфейсе используется больше параметров, и, что более важно, основная точка входа для оконного приложения использует соглашение о вызовах, отличное от стандартного C/C++.

Спецификатор APIENTRY указывает соглашение о вызовах, то есть порядок, в котором аргументы помещаются в стек † . По умолчанию соглашением о вызовах является стандартное соглашение C, обозначенное __cdecl . Однако Microsoft использует другой тип соглашения о вызовах, соглашение PASCAL, для функций Windows API, на что указывает квалификатор __stdcall. APIENTRY — это определенное имя для __stdcall в одном из файлов заголовков, включенных в windows.h (см. также Что такое __stdcall?).

Следующие аргументы WinMain следующие:

  • hInst: дескриптор экземпляра.
  • hInstPrev: дескриптор предыдущего экземпляра. Больше не используется.
  • cmdline: аргументы командной строки (см. Передача аргументов WinMain (или wWinMain) в обычный main)
  • cmdshow: указывает, должно ли отображаться окно.

Мы пока не используем ни один из этих аргументов.

Внутри WinMain() находится вызов MessageBox(), который отображает простое диалоговое окно с сообщением, окно сообщения. Первый аргумент — это дескриптор окна владельца. Поскольку у нас еще нет собственного окна, передайте NULL. Второй аргумент — основной текст. Третий аргумент — это заголовок, а четвертый аргумент содержит флаги. Когда передается 0, отображается окно сообщения по умолчанию. На приведенной ниже схеме показано диалоговое окно окна сообщения в разрезе.

введите здесь описание изображения

† Только для 32-разрядных систем. Другие архитектуры имеют другие соглашения о вызовах.

Наша база данных содержит 49 различных файлов с именем setupapi.dll.mui . Вы также можете проверить наиболее распространенные варианты файлов с именем setupapi.dll.mui. Чаще всего эти файлы принадлежат продукту Операционная система Microsoft® Windows®. и чаще всего разрабатывались компанией Microsoft Corporation. Эти файлы чаще всего имеют описание Windows Setup API.

Сведения о наиболее часто используемом файле с именем "setupapi.dll.mui"

<Р> Продукт: Операционная система Microsoft® Windows® Компания: Microsoft Corporation Описание: Windows Setup API Версия: 6.1.7600.16385 MD5: bcde0b774050cf3504a5619b225b36eb SHA1: d59d3ee7b2c70b45fabe95c8e4a7595ad8941064 SHA256: cf5300731a7a569b77e4c1d7852ab211e85c264780d687391d04daf96aa18af4 Размер: 51712 Каталог: C: \ Windows \ System32 \ ру-RU Операционная Система: Windows 7 Распространенность: Средняя

Icon

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

Файл "setupapi.dll.mui" безопасен или опасен?

Последний новый вариант файла с именем "setupapi.dll.mui" был обнаружен 3300 дней назад. В нашей базе содержится 6 вариантов файла «setupapi.dll.mui» с итоговой оценкой Безопасный и ноль вариантов с итоговой оценкой Угроза . Окончательные рейтинги основаны на обзорах файлов, дате обнаружения, активности пользователей и результатах антивирусного сканирования.

Файл с именем "setupapi.dll.mui" может быть безопасным или опасным. Вы должны определить дополнительные атрибуты файла, чтобы определить правильный рейтинг. Наш отмеченный наградами бесплатный инструмент обеспечивает самый простой способ проверки ваших файлов через нашу базу данных. Инструмент содержит множество полезных функций для контроля вашей системы и использует минимум системных ресурсов.
Нажмите здесь, чтобы загрузить System Explorer бесплатно.

Отзывы пользователей о файле "setupapi.dll.mui"

Добавить отзыв для "setupapi.dll.mui"

Чтобы добавить отзыв пользователя, требуется дополнительная информация о файле. Если вы знаете md5, размер, sha1, sha256 или другой атрибут файла, который вы хотите просмотреть, вы можете воспользоваться расширенным поиском на нашей главной странице.

Если вы не знаете подробностей о файле, вы можете легко проверить его с помощью нашего бесплатного инструмента. Загрузите системный обозреватель.

Проверьте свой компьютер с помощью нашего бесплатного инструмента

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

Читайте также: