Использование функций Windows API. Api функции windows


Windows api— набор функций операционной системы

Аббревиатура API, Application Programming Interface (API) — это просто некоторый готовый набор функций, который могут использовать разработчики приложений. В общем случае данное понятие эквивалентно тому, что раньше чаще называли библиотекой подпрограмм. Однако чаще всего под API подразумевается некоторая особая категория таких библиотек.

В ходе разработки практически любого достаточно сложного приложения (MyAppication) для конечного пользователя формируется набор специфических внутренних функций, используемых для реализации данной конкретной программы, который называется MyApplication API. Часто оказывается, что эти функции могут эффективно использоваться также для создания других приложений, в том числе другими программистами. В этом случае авторы исходя из стратегии продвижения своего продукта должны решить вопрос — открывают ли они доступ к этому набору для внешних пользователей или нет? При положительном ответе на него в описании программного пакета, как его достоинство, появляется фраза о том, что «комплект включает открытый набор API-функций».

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

Соответственно, Windows API — это набор функций, являющийся частью самой операционной системы и в то же время — доступной для любого другого приложения. И в этом плане вполне оправдана аналогия с набором системных прерываний BIOS/DOS, который фактически представляет собой DOS API.

Отличие заключается в том, что состав функций Windows API, с одной стороны значительно шире, по сравнению с DOS, с другой — не включает многие средства прямого управления ресурсами компьютера, которые были доступны программистам в предыдущей ОС. Кроме того, обращение к Windows API выполняется с помощью обыкновенных процедурных обращений, а вызов функций DOS — через специальную машинную команду процессора, которая называется Interrupt («прерывание»).

Win16 API и Win32 API

Как известно смена Windows 3.x на Windows 95 ознаменовала собой переход от 16-разрядной архитектуры операционной системы к 32-разрядной. Одновременно произошла замена 16-разрядного Windows API (Win16 API) на новый 32-разрядный вариант (Win32 API) . В данном случае нужно просто иметь в виду, что за небольшим исключением набор Win32 API является единым для семейств Windows 9x и Windows NT.

Далее под термином API будет подразумеваться Win API и более того, по умолчанию — Win32 API.

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

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

Встроенные функции реализуют лишь частный случай соответствующей API-функции. Это довольно обычный вариант.

Огромное число API-функций вообще не имеют аналогов в существующем сегодня варианте компиляторов. Например, удалить каталог нельзя средствами VB — для этого нужно использовать функцию DeleteDirectory.

Следует также подчеркнуть, что некоторые API-функции (их доля в Win API весьма незначительна) не могут вызываться из  программ из-за ряда ограничений языка, например отсутствие возможности работы с адресами памяти. Но в ряде случаев могут помочь нетривиальные приемы программирования (в частности, в случае с теми же адресами).

Win API и Dynamic Link Library (DLL)

Набор Win API реализован в виде динамических DLL-библиотек.

В данном случае под DLL мы подразумеваем традиционный вариант двоичных динамических библиотек, которые обеспечивают прямое обращение приложений к нужным процедурам — подпрограммам или функциям (примерно также как это происходит при вызове процедур внутри проекта). Такие библиотеки могут создаваться с помощью разных инструментов — VC++, Delphi, Fortran, Assembler.

Обычно файлы динамических библиотек имеют расширение .DLL, но это совсем не обязательно. Для Win16 часто применялось расширение .EXE, драйверы внешних устройств обозначаются с помощью .DRV.

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

Библиотеки Win32 API ядра операционной системы Windows 95/98:

KERNEL32.DLL: низкоуровневые функции управления памятью, задачами и другими ресурсами системы;

USER32.DLL: здесь в основном находятся функции управления пользовательским интерфейсом;

GDI32.DLL: библиотека Graphics Device Interface — разнообразные функции вывода на внешние устройства;

COMDLG32.DLL: функции, связанные с использованием диалоговых окон общего назначения.

Основные библиотеки с функциями расширения:

COMCTL32.DLL: набор дополнительных элементов управления Windows, в том числе Tree List и Rich Text;

MAPI32.DLL: функции работы с электронной почтой;

NETAPI32.DLL: элементы управления и функции работы с сетью;

ODBC32.DLL: функции этой библиотеки нужны для работы с различными базами данных через протокол ODBC;

WINMM.DLL: операции доступа к системным средствам мультимедиа.

studfiles.net

Использование функций Windows API

Поиск Лекций

В программах на ассемблере.

Windows предоставляет программисту возможность использовать огромное количество возможностей и ресурсов операционной системы. Для этого предназначен Windows API (Application Programming Interface). Windows API - это большая коллекция функций, располагающихся непосредственно в операционной системе и готовых для использования в пользовательских пpогpаммах. Эти функции находятся в нескольких динамически подгpужаемых библиотеках. Мы будем использовать при написании программ следующие:

Kernel32.dll - содеpжит API функции, взаимодействующие с памятью и упpавляющие пpоцессами.

User32.dll - содеpжит API функции, контpолиpующие пользовательский интеpфейс (то есть позволяющие, например, работать с элементами управления, выводимыми в создаваемых окнах).

Gdi32.dll - содеpжит API функции, ответственные за гpафические опеpации (определение цветовой палитры создаваемых окон, элементов управления и т.д.).

Кpоме этих тpех "основных", существуют также дpугие dll, котоpые можно использовать.

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

includelib. Описание передаваемых в API функции параметров содержится в одноименых файлах с расширением *.inc и называется файлами для включения.

Создание пробной программы

 

.386

 

 

.MODEL flat, stdcall

 

 

include KERNEL32.inc

 

includelib KERNEL32.LIB

 

 

.DATA

summand_1 db 12h

summand_2 db 2fh

 

.CODE

start:

 

mov al, summand_2

add al, summand_1

 

invoke ExitProcess,0

 

end start

 

А теперь садимся за компьютеры и пишем эту программу, проверим ее пошагово (отладка позволит проконтролировать содержимое регистров процессора).

Для компиляции (ассемблирования, то есть получения объектного модуля) – используется кнопка или меню:

Для компоновки – тоже кнопка или меню.

 

В результате получим EXE-файл (исполняемый модуль) – PROBA.EXE.

 

Для отладки программы вызываем пункт меню:

 

Затем выполняем программу по шагам, нажимая на кнопку “Step”:

 

 

После каждого шага контролируем содержимое регистров.

 

Мы рассмотрели основные принципы разработки программ на языке ассемблера в среде WinAsm, изучили общую структуру построения программы на языке ассемблера и попробовали создать действующую программу и выполнить ее отладку средствами WinAsm.

 

Теперь перейдем к детальному рассмотрению синтаксиса языка ассемблера.

Синтаксис Ассемблера

 

Все конструкции языка ассемблера можно разделить на 4 вида:

1) Команды (инструкции) – представляют собой символические аналоги машинных команд. Например, mov, add

2) Макрокоманды – это оформляемые определенным образом предложения текста программы, замещаемые во время компиляции другими предложениями. Это аналог подпрограммы или процедуры с тем отличием, что при вызове подпрограммы или процедуры надо указывать значения параметров, а здесь – это просто набор команд, которые выполняются при вызове.

3) Директивы - указания компилятору на выполнение некоторых действий или служат для задания режима его работы. У директив нет аналогов среди машинных команд.

4) Комментарии – содержат любые символы. Позволяют хранить примечания программиста к тексту исходной программы. Комментарии начинаются с символа точка с запятой “;”.

 

Формат команд и макрокоманд может быть описан следующим образом:

[имя метки] : [операция] [операнд(ы)] ; [комментарий]

Имя метки – символьный идентификатор строки программы (адрес первого байта предложения программы, которому поставлена в соответствие метка)

Операция – символическое обозначение машинной команды или макрокоманды.

Операнд(ы) – части команды, макрокоманды или директивы, обозначающие объекты, над которыми производятся действия (к этим объектам относятся константы, переменные, регистры ЦП).

 

например:

metka_1: adc al, var2 ; складываем с учетом флага CF

содержимое регистра и переменную

 

Формат директивы, которая указывает компилятору на выполнение некоторых действий имеет следующий вид:

[имя] [директива] [операнд(ы)] ; [комментарий]

 

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

Например:

summand_1 db12h - имя summand_1 отличает директиву db от других директив, этому имени присваиваются такие характеристики, как адрес конкретной ячейки в памяти и длина размещенных данных. Эти характеристики присваивает имени программа-компилятор во время анализа исходной программы. Когда в исходной программе происходит обращение к переменной с этим именем, то компилятор проверяет, соответствуют ли ее характеристики правилам использования определенной команды, например, mov ax, summand_1. Например, нельзя поместить переменную с длиной 1 байт в регистр AX (он равен 2 байта), т.к. их длины не соответствуют.

 

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

Запишем основные директивы размещения данных.

Директива Описание Количество байт
DB (BYTE) Объявить байт
DW (WORD) Объявить слово
DD (DWORD) Объявить двойное слово
DF (FWORD) Объявить тройное слово
DQ (QWORD) Объявить учетверенное слово
DT (TBYTE) Объявить десять байтов (упятеренное слово)

Директивы размещения данных могут выделять память для одного или нескольких байтов, слов, двойных слов и т.д. Например

summa db 10h (выделяется байт, в него записывается число 10h)

char1 DB ‘A’ (выделяется байт, в него записывается 8-разрядный код символа А (ASCII-код символа A))

list db 10h, 20h, 30h ,40h ОТЛИЧИЕ list dd 10203040h

После директив размещения данных возможно использование оператора DUP, с помощью которого можно продублировать одно или несколько значений для размещения их в памяти. Например:

List DB 20 DUP(0) ; выделяет 20 байтов, заполненных нулями

poisk-ru.ru

API функции - Введение - Каталог статей

API функции

Ознакомиться онлайн

Аббревиатура API для многих начинающих программистов выглядит весьма таинственно и даже пугающе.

Windows API — это набор функций, являющийся частью самой операционной системыApplication Programming Interface (API) — это просто некоторый готовый набор функций, который могут использовать разработчики приложений.

Встроенные, родные функции PureBasic имеют вид:

Function()

Все они подробно описаны в файле помощи программы PureBasic, либо в файле помощи библиотеки(навели курсор мыши и нажали F1).

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

В PureBasic есть 2 способа вызова API функций.

Первый способ позволяет работать только с теми функциями, которые уже прописаны в библиотеке PureBasic .Эти API функции имеют вид :

Function_()

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

Так как API прописаны в библиотеки Dll, нам надо знать имя библиотеки и параметры вызова.Пример:

Code

OpenLibrary(0,"user32.dll") CallFunction(0,"MessageBoxA",hwnd, @"Привет мир!",@"Сообщение" ,0)

Для упрощения работы есть хорошая программа ApiViewer

http://www.activevb.de/rubriken/apiviewer/index-apiviewereng.html

На страничке есть русификатор. Её можно настроить на Пурик и она знает более 6000 функций и почти 53000 констант.Единственно что, для версии 4.40 надо перед строковыми параметрами ставить знак @

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

Справочник по функциям API на русском языке. Все функции упорядочены по буквенным каталогам. Кроме этого в программе есть описания событий.

Скачать справочник

Скачать WINAPI справочник или на сайте http://cracklab.narod.ru/api/index.htm

Скачать Russian_spravochnik_Win32_API

Более подробною информацию можно получить набрав на сайте:

http://msdn.microsoft.com/en-us/library/

purebasic.ucoz.com

Введение

Введение

Добро пожаловать на страницы справочника по функциям Windows API. Этот справочник описывает функции API для всех 32-разрядных версий Windows

Введение в Windows API

Что такое "API"?

API сокращенно Application Programming Interface(интерфейс прикладного программирования). Проще говоря, API - набор функций, которые операционная система предоставляет программисту. API обеспечивает относительно простой путь для программистов для использования полных функциональных возможностей аппаратных средств или операционной системы.

Понятие о Windows API

Windows API могут вызываться из Visual Basic для выполнения задач, для которых недостаточно стандартного программного кода Visual Basic и позволяют использовать новые функциональные возможности, принципиально не реализуемых на уровне встроенных возможностей языка. Например, стандартные средства Visual Basic не позволяют перезагрузить компьютер. Однако перезагрузку можно выполнить через обращение к соответствующей функции Window API. Кроме того, существует возможность замены встроенных операторов языка на альтернативные варианты, которые на уровне Windows API зачастую выполняются быстрее.

32-разрядные версии Windows, или 95/98/Me или NT, обычно используют один и тот же набор функций API, хотя имеются некоторые различия между платформами. 32-разрядный API содержит многочисленные расширения и поддержки к устаревшему 16-разрядному API, используемому в Windows 3.x. Старые функции поддерживаются по причинам совместимости. Однако, 32-разрядные приложения должны использовать исключительно 32-разрядные функции. Это не проблема, так как 16-разрядные функции обычно заменялись подобными функциями.

Как организованы функции Windows API?

Почти все функции, которые составляют Windows API - внутри DLL (Dynamic Link Library). Эти dll-файлы находятся в системной папке Windows. Существует свыше 1000 функций API, которые условно делятся на на четыре основные категории

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

Введение в справочник по функциям API

Справочник по функциям API в среде VB - это коллекция некоторых функций. Я не претендую на полное описание всех функций(их слишком много), но коллекция будет постоянно пополняться.

Как устроен данный справочник?

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

Реклама

rusproject.narod.ru

Windows API - это... Что такое Windows API?

Windows API (англ. application programming interfaces) — общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Microsoft Windows корпорации «Майкрософт» и совместимой с ними свободной бесплатной операционной системы ReactOS. Является самым прямым способом взаимодействия приложений с Windows и ReactOS. Для создания программ, использующих Windows API, «Майкрософт» выпускает комплект разработчика программного обеспечения, который называется Platform SDK, и содержит документацию, набор библиотек, утилит и других инструментальных средств для разработки.

Общие сведения

Windows API был изначально спроектирован для использования в программах, написанных на языке Си или C++.

Работа через Windows API — это наиболее близкий к системе способ взаимодействия с ней из прикладных программ. Более низкий уровень доступа, необходимый только для драйверов устройств, в текущих версиях Windows предоставляется через Windows Driver Model.

Версии

  • Win16 — первая версия Windows API для 16-разрядных версий Windows. Изначально назывался просто Windows API, затем стал называться Win16 для отличия от Win32.
  • Win32s — подмножество Win32, устанавливаемое на семейство 16-разрядных систем Windows 3.x, и реализующее ограниченный набор функций Win32 API для этих систем.
  • Win32 — 32-разрядный API для современных версий Windows. Самая популярная ныне версия. Базовые функции этого API реализованы в динамически подключаемых библиотеках kernel32.dll и advapi32.dll; базовые модули графического интерфейса пользователя — в user32.dll и gdi32.dll. Win32 появился вместе с Windows NT и затем был перенесён в несколько ограниченном виде в системы серии Windows 9x. В современных версиях Windows, происходящих от Windows NT, работу Win32 GUI обеспечивают два модуля: csrss.exe (процесс исполнения клиент-сервер), работающий в пользовательском режиме, и win32k.sys в режиме ядра. Работу же системных Win32 API обеспечивает ядро — ntoskrnl.exe.
  • Win64 — 64-разрядная версия Win32, содержащая дополнительные функции для использования на 64-разрядных компьютерах. Win64 API можно найти только в 64-разрядных версиях Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2008 R2, Windows 7 и Windows 8.

Технологии, доступные через Windows API

Алфавитный список технологий, доступных через Windows API:

  • Система контроля и управления доступом.
  • Microsoft Active Accessibility.
  • Active Directory.
  • Active Server Pages.
  • ActiveX.
  • Автоматизация.
  • Фоновая интеллектуальная служба передачи (BITS).
  • Bluetooth.
  • CDO.
  • Certificate Enrollment Control.
  • Certificate Services.
  • Collaboration Data Objects.
  • Component Object Model
  • COM Plus.
  • Common Controls.
  • Криптография.
  • Debugging and Error Handling.
  • Device I/O.
  • Распределённая файловая система.
  • DLL, процессы и многопоточность.
  • Domain Name System.
  • Dynamic Host Configuration Protocol (DHCP).
  • Extensible Authentication Protocol (EAP).
  • Extensible Markup Language (XML) и парсер MSXML.
  • Fax Service.
  • Групповая политика.
  • HTTP.
  • ICS и ICF.
  • Image Color Management (ICM)
  • Image Mastering API (IMAPI)
  • Indexing Service
  • Infrared Data Association (IrDa)
  • Internet Authentication Service (IAS)
  • Internet Connection Sharing and Firewall (ICSF)
  • Internet Explorer
  • Internet Information Services (IIS)
  • Internet Protocol Helper (IP Helper)
  • Interprocess Communications
  • Lightweight Directory Access Protocol (LDAP)
  • LSA Authentication
  • LSA Policy
  • Memory Management
  • Message Queuing (MSMQ)
  • Messaging Application Programming Interface (MAPI)
  • Microsoft .NET Passport
  • Microsoft Agent
  • Microsoft Data Access Components (MDAC)
  • Microsoft Interface Definition Language (MIDL)
  • Microsoft Management Console (MMC)
  • Microsoft Transaction Server (MTS)
  • Multicast Address Dynamic Client Allocation Protocol (MADCAP)
  • Multicast Group Manager
  • National Language Support
  • NetMeeting
  • NetShell
  • Network Load Balancing Provider
  • Network Management
  • Network Monitor
  • Network Provider API
  • OLE DB
  • OLE DB Provider for Internet Publishing
  • OnNow
  • Open Database Connectivity (ODBC)
  • OpenGL
  • Password Filters
  • PC Health
  • Performance Monitoring
  • Plug and Play и Universal Plug and Play
  • Power Management
  • Quality of Service (QoS)
  • Real-time Communications (RTC) Client //ссылка ведет не на ту статью
  • Remote Access Service (RAS)
  • Remote Procedure Call (имеется в виду служба RPC Service)
  • Removable Storage Manager (RSM)
  • Routing and Remote Access Service (RRAS)
  • Routing Table Manager Version 1 (RTMV1)
  • Routing Table Manager Version 2 (RTMV2)
  • Security Support Provider Interface (SSPI)
  • Server Cluster API
  • Server Data Objects (SDO)
  • Service Security Attachments
  • Setup API
  • Shell (имеется в виду Explorer Shell)
  • Side-by-side Assemblies
  • Simple Network Management Protocol (SNMP)
  • Smart Card
  • Still Image
  • Storage и Structured Storage
  • Synchronization Manager
  • System.DirectoryServices
  • System Event Notification Service (SENS)
  • System Restore
  • Tablet PC
  • Task Scheduler
  • Telephony Application Programming Interface (TAPI) 2.2
  • Telephony Application Programming Interface (TAPI) 3
  • Telephony Service Provider Interface (TSPI и MSPI)
  • Terminal Services
  • Text Services Framework
  • Unicode (и MSLU)
  • Universal Description, Discovery, and Integration (UDDI)
  • Video for Windows
  • Windows Clustering
  • Windows File Protection
  • Windows GDI
  • Windows GDI+
  • Windows Image Acquisition (WIA)
  • Windows Installer
  • Windows Management Instrumentation (WMI)
  • Windows Multimedia
  • Windows Sockets
  • Windows System Information
  • Windows User Interface
  • Winlogon и Gina
  • WinSNMP

См. также

Ссылки

Литература

  • Гэри Неббет Справочник по базовым функциям API Windows NT/2000 = Windows NT/2000 Native API Reference. — М.: «Вильямс», 2002. — С. 528. — ISBN 1-57870-199-6

dik.academic.ru

windows - Функции Windows API

Оригинальный API Win32 основан на C. Однако в Windows существует множество услуг, основанных на COM. Хорошими примерами являются буфер обмена, перетаскивание + падение, оболочка, инфраструктура драйвера пользовательского режима, DirectX. Хотя технически возможно писать COM-код на C, это очень мучительно, чтобы это сделать.

Реально вы используете С++. И библиотека классов С++, чтобы сделать оригинальный C-интерфейс менее болезненным, особенно для графического интерфейса.

источник поделиться

Они являются стандартным кодом C, если вы программируете против чистого Windows API.

Обертка на основе С++, называемая доступна MFC.

Все это вытесняется в пользу .NET framework.

ответ дан darioo 19 янв. '11 в 16:11 источник поделиться

Стандартный Windows API - это C-библиотека. Обертки существуют для других языков (С++ и т.д.).

Просто прочитайте его на wikipedia.

ответ дан orlp 19 янв. '11 в 16:11 источник поделиться

Windows API является нейтральным. Это не C или С++. Microsoft говорит, что сама Windows написана в основном на С++, но вам не нужны какие-либо классы для подавляющего большинства API, и даже классы в API (например, в Direct X) могут использоваться в чистом C без классов.

Хотя некоторые программисты на C считают, что это библиотека C, компилятор языка программирования должен поддерживать проприетарную модель вызова Windows, это не классическое соглашение о вызове C. (Очевидно, почти каждый настоящий компилятор C в реальном мире поддерживает его в настоящее время.)

ответ дан Al Kepp 19 янв. '11 в 16:15 источник поделиться

qaru.site

Вызов функций Windows API из кода VBA

Одна из интересных возможностей VBA — поддержка функций, которые хранятся в динамически подключаемых библиотеках (Dynamic Link Libraries – DLL). В заметке демонстрируются популярные функции Windows API.[1] Для простоты изложения представленные здесь объявления API-функций могут корректно выполняться только в среде Excel 2010 и более поздних версиях. В то же время, примеры файлов совместимы с предыдущими версиями Excel.

Рис. 1. Выбор файла для поиска приложения$ чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)

Определение связей с файлами

В Windows многие типы файлов ассоциируются с конкретным приложением. Эта связь позволяет загрузить файл в соответствующее приложение (для этого дважды щелкните мышью на файле). Функция GetExecutable вызывает функцию Windows API с целью получить полный путь к приложению, связанному с указанным файлом. Например, в системе находится ряд файлов с расширением .txt; вероятно, один такой файл с названием Readme.txt в данный момент расположен в папке Windows. Функцию GetExecutable можно применять для определения полного пути приложения (которое запускается после двойного щелчка на выбранном файле).

Private Declare Function FindExecutableA Lib "shell32.dll" _ (ByVal lpFile As String, ByVal lpDirectory As String, _ ByVal lpResult As String) As Long Function GetExecutable(strFile As String) As String Dim strPath As String Dim intLen As Integer strPath = Space(255) intLen = FindExecutableA(strFile, "\", strPath) GetExecutable = Trim(strPath) End Function

Private Declare Function FindExecutableA Lib "shell32.dll" _

    (ByVal lpFile As String, ByVal lpDirectory As String, _

    ByVal lpResult As String) As Long

Function GetExecutable(strFile As String) As String

    Dim strPath As String

    Dim intLen As Integer

    strPath = Space(255)

    intLen = FindExecutableA(strFile, "\", strPath)

    GetExecutable = Trim(strPath)

End Function

Откройте файл file association.xlsm, кликните на кнопке «Определение связей между файлами», в открывшемся окне выберите файл (см. рис. 1), кликните Открыть. Функция GetExecutable вернет полный путь к приложению, которое связано с выбранным файлом (рис. 2).

Рис. 2. Определение пути и имени для приложения, связанного с заданным файлом

Определение буквы диска

В VBA нет способа получения информации о дисковых накопителях. Но эта проблема легко решается с помощью трех API-функций, обеспечивающих получение всех необходимых сведений. Откройте файл drive information.xlsm, кликните на копку. Процедуры VBA идентифицирует все подключенные дисковые накопители, определяет их тип, а также указывает размер свободного и занятого пространства на диске (рис. 3). Код используемых в примере функций Windows API можно найти в модуле Excel-файла.

Рис. 3. С помощью функций Windows API можно получить всю информацию о дисках, установленных в системе

Определение параметров принтера по умолчанию

Функция Windows API может быть использована для получения информации об активном принтере. Данная информация содержится в одной текстовой строке. Программа анализирует эту строку и отображает информацию в более удобном для чтения формате. Откройте файл printer info.xlsm, нажмите на кнопку. Свойство ActivePrinter объекта Application возвращает название активного принтера (и позволяет его изменить). Но не существует способа определить используемый драйвер принтера или порт. Поэтому функция DefaultPrinterInfo() столь полезна. После выполнения процедуры на экран выводится окно сообщения (рис. 4).

Рис. 4. Получение информации об активном принтере с помощью функции Windows API

Определение текущего видеорежима

Если в приложении необходимо отобразить определенный объем информации на одном экране, то, зная размер экрана, можно правильно задать масштаб текста. Кроме того, в коде определяется количество мониторов в системе. Если установлено более одного монитора, процедура определяет размер виртуального экрана. Откройте файл video mode.xlsm, кликните на кнопке, и процедура вернет видеорежим (рис. 5).

Рис. 5. Использование функций Windows API для определения видеорежима монитора

Option Explicit #If VBA7 And Win64 Then Declare PtrSafe Function GetSystemMetrics Lib "user32" _ (ByVal nIndex As Long) As Long #Else Declare Function GetSystemMetrics Lib "user32" _ (ByVal nIndex As Long) As Long #End If Public Const SM_CMONITORS = 80 Public Const SM_CXSCREEN = 0 Public Const SM_CYSCREEN = 1 Public Const SM_CXVIRTUALSCREEN = 78 Public Const SM_CYVIRTUALSCREEN = 79 Sub DisplayVideoInfo() Dim numMonitors As Long Dim vidWidth As Long, vidHeight As Long Dim virtWidth As Long, virtHeight As Long Dim Msg As String numMonitors = GetSystemMetrics(SM_CMONITORS) vidWidth = GetSystemMetrics(SM_CXSCREEN) vidHeight = GetSystemMetrics(SM_CYSCREEN) virtWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN) virtHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN) If numMonitors > 1 Then Msg = numMonitors & " мониторов" & vbCrLf Msg = Msg & "Виртуальный экран: " & virtWidth & " X " Msg = Msg & virtHeight & vbCrLf & vbCrLf Msg = Msg & "Видеорежим основного монитора: " Msg = Msg & vidWidth & " X " & vidHeight Else Msg = Msg & "Видеорежим монитора: " Msg = Msg & vidWidth & " X " & vidHeight End If MsgBox Msg End Sub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

Option Explicit

 

#If VBA7 And Win64 Then

    Declare PtrSafe Function GetSystemMetrics Lib "user32" _

      (ByVal nIndex As Long) As Long

#Else

Declare Function GetSystemMetrics Lib "user32" _

  (ByVal nIndex As Long) As Long

#End If

 

Public Const SM_CMONITORS = 80

Public Const SM_CXSCREEN = 0

Public Const SM_CYSCREEN = 1

Public Const SM_CXVIRTUALSCREEN = 78

Public Const SM_CYVIRTUALSCREEN = 79

 

Sub DisplayVideoInfo()

    Dim numMonitors As Long

    Dim vidWidth As Long, vidHeight As Long

    Dim virtWidth As Long, virtHeight As Long

    Dim Msg As String

    

    numMonitors = GetSystemMetrics(SM_CMONITORS)

    vidWidth = GetSystemMetrics(SM_CXSCREEN)

    vidHeight = GetSystemMetrics(SM_CYSCREEN)

    virtWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN)

    virtHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN)

 

    If numMonitors > 1 Then

        Msg = numMonitors & " мониторов" & vbCrLf

        Msg = Msg & "Виртуальный экран: " & virtWidth & " X "

        Msg = Msg & virtHeight & vbCrLf & vbCrLf

        Msg = Msg & "Видеорежим основного монитора: "

        Msg = Msg & vidWidth & " X " & vidHeight

    Else

        Msg = Msg & "Видеорежим монитора: "

        Msg = Msg & vidWidth & " X " & vidHeight

    End If

    MsgBox Msg

End Sub

Добавление звука в приложение

Можно расширить возможности Excel по воспроизведению звука в форматах WAV и MIDI. Откройте файл sound.xlsm, находящийся в папке sound, и измените значение в одной из ячеек диапазона В4:В12. Как только сумма в ячейке В13 достигнет значения 1000, прозвучит сигнал (рис. 6). Функция Alarm предназначена для применения в формуле рабочего листа. Она использует функцию Windows API для проигрывания звука, если ячейка соответствует определенному условию.

Рис. 6. Если сумма в ячейке В13 достигнет 1000, прозвучит сигнал

Function ALARM(Cell, Condition) Dim WAVFile As String Const SND_ASYNC = &h2 Const SND_FILENAME = &h30000 If Evaluate(Cell.Value & Condition) Then WAVFile = ThisWorkbook.Path & "\sound.wav" Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME) ALARM = True Else ALARM = False End If End Function

Function ALARM(Cell, Condition)

    Dim WAVFile As String

    Const SND_ASYNC = &h2

    Const SND_FILENAME = &h30000

    If Evaluate(Cell.Value & Condition) Then

        WAVFile = ThisWorkbook.Path & "\sound.wav"

        Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)

        ALARM = True

    Else

        ALARM = False

    End If

End Function

Функция Alarm имеет два аргумента: ссылку на ячейку и условие (выраженное в виде строки). Формула =ALARM (В13, ">=1000") использует функцию Alarm для проигрывания WAV-файла, если значение в ячейке В13 больше или равно 1000. Функция использует функцию VBA Evaluate для определения, соответствует ли значение ячейки заданному критерию. Если условие выполнено (и звук воспроизведен), функция возвращает ИСТИНА, в противном случае она возвращает значение ЛОЖЬ.

Чтение и запись параметров системного реестра

Многие приложения Windows используют системный реестр для хранения параметров. Процедуры VBA могут считывать значения из реестра и записывать в него новые значения.  Функции VBA GetRegistry и WriteRegistry – две функции-«оболочки», упрощающие управление реестром. Откройте файл windows registry.xlsm и изучите код VBA.

Функция GetRegistry возвращает раздел из указанного места регистра. У нее три аргумента:

  • Root Key. Строка, представляющая ветвь реестра, к которой обращается функция. Данная строка может принимать одно из следующих значений: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA.
  • Path. Полный путь к разделу реестра, к которому обращается функция.
  • RegEntry. Название параметра, который должна получить функция.

Например, если необходимо найти графический файл, используемый в качестве обоев рабочего стола, используйте функцию GetRegistry в следующей процедуре (обратите внимание, что аргументы не чувствительны к регистру).

Sub Wallpaper() Dim RootKey As String Dim Path As String Dim RegEntry As String RootKey = "hkey_current_user" Path = "Control Panel\Desktop" RegEntry = "Wallpaper" MsgBox GetRegistry(RootKey, Path, RegEntry), vbInformation, _ Path & "\RegEntry" End Sub

Sub Wallpaper()

    Dim RootKey As String

    Dim Path As String

    Dim RegEntry As String

    RootKey = "hkey_current_user"

    Path = "Control Panel\Desktop"

    RegEntry = "Wallpaper"

    MsgBox GetRegistry(RootKey, Path, RegEntry), vbInformation, _

      Path & "\RegEntry"

End Sub

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

Функция WriteRegistry записывает значение в указанный раздел реестра. Если операция завершается успешно, функция возвращает ИСТИНА; в противном случае функция возвращает ЛОЖЬ. Первые три аргумента функция WriteRegistry такие же, как и аргументы GetRegistry, но также есть и четвертый аргумент – RegVal – значение, которое записывается в реестр. Например, процедура Workbook_Open() записывает текущую дату и время в разделе настроек Excel.

Sub Workbook_Open() RootKey = "hkey_current_user" Path = "software\microsoft\office\14.0\excel\LastStarted" RegEntry = "DateTime" RegVal = Now() If WriteRegistry(RootKey, Path, RegEntry, RegVal) Then Msg = RegVal & " сохранено в реестре." Else Msg = "произошла ошибка" End If MsgBox Msg End Sub

Sub Workbook_Open()

    RootKey = "hkey_current_user"

    Path = "software\microsoft\office\14.0\excel\LastStarted"

    RegEntry = "DateTime"

    RegVal = Now()

    If WriteRegistry(RootKey, Path, RegEntry, RegVal) Then

        Msg = RegVal & " сохранено в реестре."

    Else

        Msg = "произошла ошибка"

    End If

    MsgBox Msg

End Sub

Если вы решили воспользоваться системным реестром для хранения и выборки настроек приложений Excel, проще обратиться к функциям VBA GetSetting и SaveSetting. Важно понимать, что они работают только со следующим разделом реестра:

HKEY_CURRENT_USER\Software\VB and VBA Program Settings

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

[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 376–383.

baguzin.ru