Запись алгоритмов

Представление данных в памяти, типов данных, идентификаторов, переменных, массивов. Определение структуры программ на VBA, операторы описания, операторы присваивания. Оценка понятия макроса, создания, отладки, использования среды для отладки программ.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 27.09.2017
Размер файла 142,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Свойство DisplayAlerts. Если требуется отключить вывод встроенных подсказок и предупреждений при выполнении макроса, необходимо присвоить значение False свойству DisplayAlerts. В этом случае Excel производит стандартные действия, выбирая применяемый по умолчанию ответ на сообщения. Исходное значение свойства DisplayAlerts равно True.

Если макрос изменяет значение свойства DisplayAlerts, то перед окончанием его работы требуется присвоить данному свойству значение Тrue. В предыдущих версиях Excel это производилось автоматически, а в нас щей- необходимо делать вручную. Таким образом, чтобы использовать макросы предыдущих версий Excel в Excel 97, требуется во избежание нежелательного поведения приложения добавить в программу следующую строку кода:

Application.DisplayAlerts = True

Свойства DisplayFormulaBar, DisplayScrollBars и DisplayStatus:

Чтобы скрыть строку формулы, полосы прокрутки или строку состояния, требуется присвоить значение False свойству DisplayFormulaBar, DisplayScrollBars или DisplayStatusBar соответственно. И наоборот, для вывода требуемого элемента интерфейса, необходимо присвоить True соответствующему свойству. Значение по умолчанию для данных свойств равно True.

Свойство ЕпаblеСаnсelКеу. Обычно прерывание выполнения макроса осуществляется с помощью комбинации клавиш +. По умолчанию свойство EnableCancelKey равно значению xlInterrupt, которое допускает остановку процедуры пользователем для ее отладки или завершения. Если же требуется запретить прерывание выполнения, присвойте значение xlDisabled или xlErrorHandler свойству EnableCancelKey. Hеобходимо отметить, что константу xlDisabled следует использовать с особой осторожностью. Если свойство EnableCancelKey имеет данное значение, то выход из бесконечного цикла или прерывание макроса невозможно. Таким образом, перед установкой свойства требуется убедиться, что процедура полностью и тщательно отлажена.

Вместо константы xlDisable можно указать константу xlErrorHandler. Если свойство EnableCancelKey равно данному значению, то в выполняемой процедуре осуществляется переход к процедуре обработки ошибки. При использовании константы xlErrorHandler необходимо включить в макрос подпрограмму обработки ошибки, указав инструкцию On Error Goto. Номер ошибки, возникающей в результате нажатия комбинации клавиш <Ctrl>+<Break>, равен 18.

По завершении работы макроса свойству EnableCancelKey автоматически присваивается значение xlInterrupt.

Свойство ScreenUpdating. Одним из способов ускорить выполнение программы заключается в том, чтобы присвоить значение False свойству ScreenUpdating. Обычно этот метод применяется для макросов, которые отображают большое количество текста на рабочий лист. Если свойство ScreenUpdating равно False, то при выполнении макроса отключается на экран. В конце процедуры требуется присвоить значение True свойству ScreenUpdating.

В предыдущих версиях Excel свойству ScreenUpdating автоматически присваивалось значение True, а в настоящей версии это необходимо делать вручную. Таким образом, чтобы использовать макросы предыдущих версий в Excel 97, требуется добавить в конец макроса инструкцию, которая восстанавливает значение свойства ScreenUpdating.

Свойство StatusBar. Свойство statusBar позволяет задать текст строки состояния. Рекомендуется применять данное свойство совместно со свойством Cursor:

'Присвоить значение True свойству DisplayStatusBar, чтобы вывести строку состояния.

Application. DisplayStatusBar = True

'Установка текста строки состояния.

Application.StatusBar = "Обработка, пожалуйста, подождите... "

'Замена обычного указателя мыши на песочные часы.

Application.Cursor = xlWait

'Вызов процедуры

GetSalesData

'Восстановление указателя мыши и строки состояния

Application.Cursor = xlDefault

Application.StatusBar = False

Свойтсво ThisWorkBook. В этом свойстве хранится ссылка на объект Workbook, являющийся рабочей книгой, в которой содержится выполняемый макрос. Значение этого свойства и свойства ActiveWorkBook не обязательно совпадают. Если в Excel открыто несколько рабочих книг, то возможно, что в свойстве ActiveWorkBook содерится ссылка на одну рабочую книгу, а в свойстве ThisWorkBook - на другую, которая и содержит выполняющийся макрос. Использование методов объекта Application

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

Метод Calculate. Если в Excel установлен режим вычислений вручную, можно использовать метод Calculate объекта Application для принудительного выполнения вычислений во всех открытых рабочих книгах. Метод имеет следующий синтаксис:

Application.Calculate

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

Application.Goto Reference, Scroll

Параметр Reference - необязательный аргумент, который используется для указания требуемого диапазона в формате R1C1 или для задания имени процедуры VBA. Если данный параметр опущен, то подставляется последний диапазон, который указывался в методе Goto.

Параметp Scroll также не обязателен. Если он равен True, то после выполнения метода левый верхний угол заданного в методе диапазона выводится в левом верхнем углу окна.

Метод InputBox. Функция inputBox() рассмотрена выше. Метод ох хотя и кажется похожим, на самом деле имеет большие отличия. Функция InputBox() возвращает только строку. Метод InputBox имеет необязательный параметр type, который позволяет задать тип введенных пользователем данных. Метод имеет следующий синтаксис:

Application.InputBox(prompt, title, default, left, top, _ helpFile,helpContextID, type)

Параметр prompt - обязательный аргумент, определяющий сообщение, которое требуется отобразить в окне ввода. Параметр title - дополнительный аргумент, который задает заголовок окна. По умолчанию выводится заголовок "Ввод" (Input). Другим необязательным параметром является аргумент default. Он определяет значение по умолчанию, которое нужно вывести в окне. Параметры left и top - дополнительные параметры, которые определяют положение окна ввода по горизонтали и по вертикали относительно левого верхнего угла экрана. Параметры helpFile и helpContextID - имена файла справки и контекстного идентификатора в этом файле. Аргумент type определяет тип данных, возвращаемый методом. Если аргумент type не задан, то возвращается текст. В качестве значения данного apгумента можно использовать значения, перечисленные в таблице:

Значение

Тип

0

Формула

1

Номер

2

Текст (строка)

4

Логическое значение (True или False)

8

Ссылка на ячейки, например, на объект Range

16

Значение ошибки, например, #Н/А

64

Массив

Значения параметра type не являются последовательными, поскольку в программе можно использовать их комбинацию. Например, если необходимо задать ввод либо текста, либо чисел, следует присвоить данному параметру значение 1 + 2.

При нажатии кнопки ОК метод InputBox возвращает значение, введенное в окно, при нажатии кнопки Отмена (Cancel) - значение False. Приведем пример использования метода InputBox, в котором показано, как данный макрос реагирует на ввод текста или на нажатие кнопки Отмена:

Sub Input_example()

Dim hourly_wage As Currency

Dim num_of_hours As Single

Dim error_text As String

'Параметр Type получает значение 1 (число).

hourly_wage = Application.InputBox("Введите ставку почасовой_

оплаты:", "Почасовая _ оплата", 3.75, 1)

'Обратите внимание на использование значения False.

If hourly_wage = False Then

MsgBox "Операция отменена."

End

End If

num_of_hours = Application.InputBox("Введите количество_

отработанных часов:", _ "Отработанные часы", 40, 1)

If num_of_hours = False Then

MsgBox "Операция отменена."

End sub

Else

MsgBox "К оплате " & Format((num_of_hours *_ hourly_wage), "$##,##0.00")

End If

End Sub

Предупреждение

При проверке нажатия кнопки Отмена следует сравнить возвращаемый методом InputBox результат со значением False, а не со строкой "False".

Методы OnKey, OnRepeat, OnTime и OnUndo. В предыдущих версиях не поддерживались события. Чтобы устранить это ограничение, в объект Application были добавлены методы OnKey, OnRepeat, OnTime и OnUndo. Они обычно используются в процедуре Auto_Open, которая автоматически выполняется при открытии рабочей книги.

Метод OnKey выполняет заданную процедуру при нажатии определенной клавиши или комбинации клавиш. Метод имеет следующий синтаксис:

Application.OnKey Key, Procedure

Параметр Key - обязательный строковый аргумент, который определяет комбинацию клавиш или клавишу, которая назначена процедуре. В параметре Key можно указать также специальные клавиши:

Код клавиш для метода OnKey.

Клавиша

Код

<Backspace>

{BACKSPACE} или {BS}

<Break>

{BREAK}

<Caps Lock>

{CAPSLOCK}

<Clear>

{CLEAR}

<Delete>

{DELETE} или {DEL}

<End>

{END}

<Enter> (цифровая клавиатура)

{ENTER}

<Enter>

~

<Escape>

{ESCAPE} или {ESC}

<F1>-<F15>

{F1}-{F15}

<Home>

{HOME}

<lnsert>

{INSERT}

< <->

{LEFT}

<Num Lock>

{NUMLOCK}

<Page Down>

{PGDN}

<Page Up>

{PGUP}

< -> >

{RIGHT}

<Scroll Lock>

{SCROLLLOCK}

<Tab>

{TAB}

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

Коды специальных клавиш для метода OnKey

Специальная клавиша

Код

Alt или Option

%

Shift

+

Ctrl

^

Параметр Procedure - необязательный строковый аргумент, который определяет имя процедуры, запускаемой при нажатии клавиши или комбинации клавиш. Если требуется отключить исполнение макроса при нажатии комбинации, присвойте данному параметру пустую строку (""). Если требуется восстановить исходную функцию сочетания клавиш, выполните OnKey, не указывая параметр Procedure. Приведем пример использования ОпКеу:

Назначение комбинации клавиш <Ctrl>+< > процедуре GetSalesData.

Application.OnKey "^{RIGHT}", "GetSalesData"

'Отмена назначения комбинации клавиш <Ctrl>+< >.

Application.ОпКеу "^{RIGHT}", ""

'Восстановление функции комбинации клавиш <Ctrl>+< >.

Application.OnKey "^{RIGHT}"

Метод OnRepeat определяет процедуру, которая выполняется при выборе команды Правка\Повторить (Edit\Repeat). Метод имеет следующий синтаксис:

Application.OnRepeat Text, Procedure

Параметр Text - обязательный аргумент, задающий текст команды Правка\Повторить. Параметр Procedure - обязательный аргумент, содержащий имя процедуры, которая выполняется при выборе команды Правка\Повторить.

Приведем пример использования данного метода. Следующая инструкция устанавливает текст команды Правка\Повторить равным "Повторить чтение данных по сбыту" и связывает процедуру GetSalesData с данной командой:

Application.OnRepeat "Повторить чтение данных по сбыту", "SaleData.xls!GetSalesData"

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

Application.OnTime (EarliestTime, Procedure, LatestTime, Schedule)

Обязательный параметр EarliestTime - момент запуска процедуры. Параметр Procedure также обязателен. Он содержит имя выполняемой процедуры. Следует отметить, что для ввода значения параметра EarliestTime можно использовать функцию TimeValue().

Если на момент, заданный параметром EarliestTime, Excel не может запустить указанную процедуру из-за того, что выполняет другую операцию, то дополнительный параметр LatestTime определяет последний момент запуска этой процедуры. Если по прошествии указанного времени Excel так и не освободился, то процедура не исполняется.

Параметр Schedule - необязательный аргумент. Если он равен значению True (по умолчанию), то выполнение процедуры откладывается на сутки. Приведем пример использования метода OnTime:

'Выполнение процедуры GetSalesData по прошествии 1 минуты с текущего момента.

Application.OnTime Now + TimeValue ("00:01:00"), "GetSalesData"

'Выполнение процедуры UpdateSalesData в 14:00.

Application.OnTime TimeValue(" 14:00:00 "), "UpdateSalesData"

Метод OnUndo позволяет установить текст команды Правка\Отменить (Edit\Undo) и связать с этой командой процедуру. Синтаксис метода напоминает синтаксис метода OnRepeat:

Application.OnUndo(Text, Procedure)

Параметр Text устанавливает текст команды Правка\0тменить. Аргумент Procedure определяет процедуру, связанную с этой командой.

Метод Quit. Чтобы выйти из Excel, не запуская макросы Auto_Close, используется метод Quit объекта Application. При выходе выводится запрос на запись не сохраненных открытых рабочих книг. Метод имеет следующий синтаксис:

Application.Quit

Примечание.

Если требуется выйти из Excel, не отображая запрос на сохранение открытых рабочих книг, присвойте значение False свойству Application.DisplayAlerts. Однако при этом следует быть крайне осторожным. Не забудьте, что без сохранения закрываются все открытые рабочие книги, и не только открытые вашим приложением.

Использование событий объекта Application

В предыдущих версиях VBA у каждого объекта поддерживалось только одно событие, в большинстве случаев - событие Click. В VBA 5.0 объекты, включая элемент Application, имеют множество событий. Чтобы обработать событие с помощью объекта Application, необходимо создать новый модуль класса и объявить в нем переменную, используя ключевое слово WithEvents:

Public WithEvents oApp As Application

Ключевое слово WithEvents определяет, что переменная oApp используется для обработки события объекта. Данное ключевое слово допускается только в модулях класса и описывает только переменные уровня модуля. Теперь требуется связать описанный в модуле класса объект с элементом Application. Это можно сделать в любом модуле, указав следующий код:

'Инструкция Dim располагается в разделе описаний модуля.

'Имя EventClassModule - имя модуля класса.

Dim X As New EventClassModule

Sub InitializeAppEvents()

Set X.oApp = Application

End Sub

После выполнения процедуры initializeAppEvents объект оАрр в модуле пасса указывает на объект Excel Application, что позволяет использовать процедуры обработки в модуле класса при возникновении событий. Если необходимо включить или отключить обработку событий, в программе следует изменить значение свойства Application.EnableEvents. Если данное свойство имеет значение True, то процедуры обработки доступны.

Ниже описываются некоторые события объекта Application. Следует отметить, что именем объекта для события object_ИмяСобытия (например, object_NewWorkbook) - является имя переменной, которая описана с помощью ключевого слова WithEvents.

Private Sub object_NewWorkbook(ByVal Wb As Workbook)

Параметр Wb - ссылка на рабочую книгу, создание которой вызвало событие.

Событие WorkbookActivate. Событие WorkbookActivate возникает при активизации любой рабочей книги. Процедура обработки события имеет следующий синтаксис:

Private Sub object_WorkbookActivate (ByVal Wb As Workbook)

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

Private Sub oApp_WorkbookActivate(ByVal Wb As Workbook)

Application. Calculate

End Sub

Событие WorkbookBeforeClose. Событие WorkbookBeforeClose возникает непосредственно перед закрытием открытой рабочей книги. Синтаксис процедуры обработки является следующим:

Private Sub object_WorkbookBeforeClose(ByVal Wb As Workbook, _ ByVal Cancel As Boolean)

Параметр Wb - ссылка на рабочую книгу, которую требуется закрыть. Параметр Cancel имеет значение False при возникновении события. Если процедура обработки события присваивает значение True данному параметру, то рабочая книга не закрывается по завершении выполнения процедуры. Данное событие используется, например, для выполнения метода Calculate или для исполнения подпрограммы проверки условий на значение:

Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, ByVal Cancel As Boolean) Application.Calculate

'Вызов внешней подпрограммы проверки условий на значение

ValidateEntries

End Sub

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

Private Sub object_WorkbookBeforePrint(ByVal Wb As Workbook, _ ByVal Cancel As Boolean)

Параметр Wb - ссылка на рабочую книгу, которую требуется напечатать. Параметр Cancel имеет значение False при возникновении события. Если требуется отменить печать документа, присвойте данному параметру в процедуре обработки значение True.

Событие WorkbookBeforeSave. Событие WorkbookBeforeSave возникает непосредственно перед сохранением открытой рабочей книги. Синтаксис процедуры обработки является следующим:

Private Sub object_WorkbookBeforeSave{ByVal Wb As Workbook, _

ByVal SaveAsUi As Boolean, ByVal Cancel As Boolean)

Параметр Wb - ссылка на сохраняемую рабочую книгу. Если требуется отобразить диалоговое окно Сохранение документа (Save As), присвойте параметру SaveAsUi значение True. Параметр Cancel имеет значение False при возникновении события. Если требуется отменить сохранение документа, присвойте данному параметру значение True.

Событие WorkbookDeactivate. Событие WorkbookDeactivate возникает, когда открытая рабочая книга теряет фокус. Синтаксис процедуры обработки является следующим:

Private Sub object_WorkbookDeactivate (ByVal Wb As Workbook)

Параметр wb - ссылка на рабочую книгу, которая теряет фокус.

Событие WorkbookNewSheet. Событие WorkbookNewSheet возникает при добавлении нового листа в открытую рабочую книгу. Синтаксис процедуры обработки таков:

Private Sub object_WorkbookNewSheet(ByVal Wb As Workbook, _ ByVal Sh As Object)

Параметр wb - ссылка на рабочую книгу, в которую добавлен лист. Аргумент Sh - вновь созданный лист.

Данное событие можно использовать, чтобы удалить вновь созданный рабочий лист, если количество листов в рабочей книге больше заданного:

Private Sub object_WorkbookNewSheet (ByVal Wb As Workbook, _ ByVal Sh As Object)

If Wb.Worksheets.Count > 6 Then

MsgBox "Максимальное число листов в рабочей книге равно 5."

Wb.Sh.Delete

End If

End Sub

Событие WorkbookOpen. Событие WorkbookOpen возникает при открытии рабочей книги. Синтаксис процедуры обработки является следующим:

Private Sub object__WorkbookOpen (ByVal Wb As Workbook)

Параметр Wb - ссылка на открываемую рабочую книгу.

7. Использование WIN32 API

Win32 API (Application Program Interface) используется для расширения возможностей разрабатываемого приложения VBA. Средства Win32 API, применяемые как в приложениях Windows, так и в самом Windows 95/98 или Windows NT, можно использовать в разрабатываемой программе. Эти средства имеют большие различия друг от друга: одни задают поведение операционной системы, а другие просто подают звуковой сигнал. При использовании функций Win32 API требуется особая осторожность: при неправильном применении подпрограммы API. возникает сбой работы приложения VBA или даже Windows.

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

Основные вопросы:

- Что такое Win32 API

- Описание функций Win32 API

- Программирование Win32 API с помощью VBA

- Использование Win32 API

ЧТО ТАКОЕ WIN32 API?

API (Application Programming Interface) - интерфейс программирования приложений и всегда связан с другим приложением. Например, Microsoft Excel, Lotus Organizer и множество других приложений имеют API. Pазработчики программного обеспечения не покупают программный интерфейс, они строят его при создании приложений.

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

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

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

Win32 API идеально подходит под это описание: он обеспечивает доступ практически ко всем функциям Windows 95/98 и Windows NT. Win32 API помогает Windows 95/98 и Windows NT управлять памятью, различными устройствами, например принтером, обрабатывать события, рисовать на экране диалоговые окна и т. д.

Кроме того, Win32 API поддерживает связь одного приложения с другим. Например, большая часть Windows 9х является встроенной поддержкой сетей. Конечно, эта часть должна также выводить диалоговые окна, отображать сообщения и управлять памятью. В ней используются функции API, которые можно применять в разрабатываемом приложении VBA.

Во многих программах, например, Microsoft Excel и Lotus cc:Mail, также используется Win32 API. Если приложению или модулю Windows 9х или Wiindows NT требуется некоторое средство, то обычно вызывается функция Win32 API.

Использование библиотек динамической компоновки

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

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

Одни файлы библиотек динамической компоновки имеют расширение DLL, другие - расширение ЕХЕ. Следующие файлы составляют большую часть Win32 API:

- COMDLG32.DLL

- DLLLZ32.DLL

- GDI32.DLL

- KERNEL32.DLL

- USER32.DLL

- VERSION.DLL

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

Когда нужно использовать Win32 API?

С помощью Win32 API можно использовать в разрабатываемом приложении не только средства VBA или основного приложения, но и те же фунции, что применяет Windows 9х или Windows NT. Эти средства позволяю пример, управлять памятью или создавать диалоговые окна для установки системного времени. Хотя в проекте VBA обычно используется только процент функций Win32 API, однако доступны практически все 100 процентов.

Win32 АPI включает более 1500 функций, поэтому здесь невозможно описать каждое средство. Вместо этого приводится классификация функцией API:

- Управление Windows. Данная группа функций управляет рисованием окон на экране, а также обрабатывает нажатия клавиш и действия мышью при работе с окнами.

- Элементы управления Windows. Данная группа функций управляет инструментами управления, используемыми в приложениях Windows, например, полями, кнопками и списками, а также стандартными диалоговыми окнами, такими как диалоговые окна "Открытие файла" и "Печать".

- Настройка. Данная группа функций наиболее часто используется VBA. Эти функции позволяют воспользоваться средствами, которые содержатся на Панели управления. Например, можно использовать инструменты установки программ, а также работать с командной строкой и средством уплотнения файлов.

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

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

- Языковая поддержка. Данная группа обеспечивает языковую поддержку для Windows 9х, Windows NT и их приложений.

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

Подробную информацию о группах и функциях Win32 API смотрите в руководстве по Win32 SDK, которое поставляется Microsoft.

ПРОГРАММИРОВАНИЕ WIN32 API В VBA

Описание подпрограммы

До использования функции или подпрограммы Win32 API, необходимо объявить ее в разделе описаний любого модуля. При этом можно создать отдельный модуль, в котором хранятся только описания. Если проект VBA держит ряд подпрограмм Win32 API, то полезно сгруппировать все описания, а также объявить используемые типы данных и константы в одном модуле.

При описании функций требуется задать:

- Библиотеку динамической компоновки, в которой хранится требуемая функция

- Передаваемые в функцию параметры и их тип

- Тип возвращаемого значения

Предупреждение

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

Приведем пример описания функций Win32 API:

Declare Function GetWindowsDirectory Lib "kernel32" Alias _ "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As _ Long) As Long - получает путь к каталогу Windows

Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal IpBuffer As String, ByVal nSize As _ Long) As Long - получает путь к системному каталогу Windows

Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ (ByVal nBufferLength As Long, ByVal IpBuffer As String) As Long - получает путь к каталогу, выделенному под временные файлы

Declare Function SetCurrentDirectory Lib "kernel32" Alias _ "SetCurrentDirectoryA"(ByVal lpPathName As String) As Long - задает текущий каталог

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

Использование WIN32API.TXT

Microsoft поставляет вместе со многими приложениями, включая Visual Basic, файл WIN32API.TXT, который содержит описание всех функций Win32 API. В данном файле находятся также описание структур данных" констант, используемых подпрограммами API. Длина файла слишком велика, чтобы включать его в каждый проект VBA, поэтому можно скопировать в модуль описание требуемых функций, а также типов данных или констант.

Синтаксис описания

Приведем синтаксис инструкции описания функции Win32 API:

Declare Function | Sub имя Lib "имя библиотеки" [Alias "псевдоним"] (аргументы) [As возвращаемый_тип]

Ниже приводится описание параметров функции.

Функции и процедуры

В Win32 API имеются функции и процедуры. В первом примере показано описание процедуры, а во втором - описание функции:

Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" _ (lpSystemTime As SYSTEMTIME) - получает текущее системное время

Declare Function VerLanguageName Lib "kerne132" Alias _ "VerLanguageNameA" (ByVal wLang As Long, ByVal szLang As String, _ ByVal nSize As Long) As Long - получает текстовое название языка по идентификатору (&H4E3 - Windows (кириллица)

Обратите внимание на то, что в первом описании используется ключевое слово Sub.

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

Declare Function SomeFunction Lib "SomeLib" (MyArgument) as Long

Dim MyReturn as String

MyReturn = SomeFunction(My Argument)

Задание имени библиотеки

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

Имя библиотеки указывается в кавычках после ключевого слова Lib. При этом обычно не требуется задавать расширение или путь к библиотеке.

Примечание

При обращении к функции Win32 API сначала производится поиск библиотеки в папке, из которой запущено приложение, а затем просматривается каталог SYSTEM папки Windows (SYSTEM32 для Windows NT). Если VBA не находит библиотеку в каталоге SYSTEM/SYSTEM32, то он пытается отыскать библиотеку в основном каталоге Windows. Таким образом, если не перемещать файлы из папки Windows, то разработчику совсем необязательно знать расположение библиотек на диске, т. к. они отыскиваются aавтоматически. Более того, перемещать файлы из папки SYSTEM/SYSTEM32 не рекомендуется при любых обстоятельствах.

Использование псевдонимов в описаниях

Псевдонимы позволяют вызвать функцию API в программе VBA под именем, которое отличается от заданного в библиотеке динамической компоновки названия. Псевдонимы появились в Win16 API, используемом в Windows 3.x и 16-битных приложениях Windows, из-за того, что имена функций API совпадали с некоторыми зарезервированными словами языка Visual Basic. По той же причине при описании функций Win32 API задаются псевдонимы, с помощью которых можно вызвать требуемые подпрограммы, т используя имен, эквивалентных ключевым словам VBA. Если имя функции совпадает с ключевым словом, требуется вызвать функцию, ссылаясь на нее c помощью псевдонима.

Передача аргументов по ссылке или по значению

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

В большинство используемых в VBA подпрограмм API требуется передать параметры. По умолчанию VBA передает параметры в подпрограмму по ссылке. Это означает, что вместо того, чтобы использовать в процедуре копию переменной, VBA передает ее 32-битный адрес в памяти. Располагая адресом переменной, т. е. ссылкой на нее, процедура может обращаться и изменять значение самой переменной, а не ее копии.

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

Приведем пример передачи параметров по ссылке и по значению в функцию чтения из файла:

Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal _ hFile As Long, IpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _ IpNumberOfBytesRead As Long, IpOverlapped As OVERLAPPED) As Long

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

- Тщательно изучите описание процедуры в файле WIN32API.TXT, чтобы узнать тип передаваемых параметров.

- Тщательно изучите документацию по API и по требуемой процедуре. Документация по Win32 API поставляется вместе с Win32SDK, а также с Visual Basic.

Задание строк в качестве параметров описаний

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

Declare Function CreateProcess Lib "kerne132" Alias "CreateProcessA" (ByVal IpApplicationName As String, ByVal IpCommandLine As String, IpProcessAttributes As SECURITY_ATTRIBUTES, IpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal IpCurrentDriectory As String, IpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Проверка описания

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

Public Sub CheckDex ()

X=l

End Sub

Вызов подпрограммы Win32 API

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

- Правильно описать используемые в подпрограмме переменные

- Правильно обработать возвращаемые функцией значения

В программе показан вызов функции, которая определяет тип дисковода, заданного символом "F". Обратите внимание, как передается в функцию строка, как возвращаемое функцией значение записывается в переменную типа Long, и как используется блок Case... Select для обработки всех возвращаемых значений.

' Значения, возвращаемые функцией GetDriveType

Public Const DRIVE_REMOVABLE = 2'

Public Const DRIVE_FIXED = 3

Public Const DRIVE__REMOTE = 4

Public Const DRIVE_CDROM = 5.

Public Const DRIVE_RAMDISK = 6

Declare Function GetDriveType Lib "kerne132" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Public Sub DisplayDriveType ()

Dim sDriveLetter As String

Dim lDriveType As Long

sDriveLetter = "F:"

lDriveType = GetDriveType (sDriveLetter)

Select Case lDriveType

Case DRIVE_REMOVABLE

Debug.Print "Дисковод ", sDriveLetter, " используется для чтения дискет."

Case DRIVE_FIXED

Debug.Print "Диск ", sDriveLetter, " - жесткий диск."

Case DRIVE_REMOTE

Debug.Print "Диск ", sDriveLetter, " - сетевой диск."

Base DRIVE_CDROM

Debug.Print "Дисковод ", sDriveLetter, "используется для чтения компакт-дисков."

Case DRIVE__RAMDISK

Debug.Print "Диск ", sDriveLetter, " - виртуальньй диск."

Case Else

Debug.Print "Ошибка вызова функции."

End Select

End Sub

Использование строк в качестве возвращаемых значений

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

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

return = GetTempPath (PathLength, Path)

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

Return = GetTempPath (len (ThePath) , ThePath)

Debug.Print ThePath

Предупреждение

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

Public Sub PrintTempPathO

Dim sThePath as String

Dim iPathLength as Long

Dim lResult as Long

iPathLength =256

sthePath = String$(iPathLength,0)

lResult = GetTempPath(iPathLength,sThePath)

End Sub

Значения, возвращаемые функциями Win32 API

Большинство подпрограмм Win32 API являются функциями. Возвращаемое значение - это либо данные, например, возвращаемое функцией GetDriveType () значение, либо просто результат выполнения функции: успешно или не успешно. Например, рассмотрим функцию SetCurrentDirectory (), которая устанавливает текущую папку:

Dim lReturn as long

lReturn = SetCurrentDirectory(С:\WORK")

Если функция установила папку "C:\WORK" текущей, то переменная lReturn имеет значение отличное от 0. В противном случае, например, если каталог не существует, переменной lReturn присваивается значение 0.

Примечание

Одни функции Win32 API возвращают значение 0 в случае успешного завершения, а другие - в случае ошибки. Подробную информацию о возвращаемых функциями Win32 API значениях смотрите в документации по Win32 SDK.

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

Dim lSize as long

Dim strSize as long

Dim strValue as string

strSize = 256

StrValue = String$ (strSize, 0)

lSize = GetPrivateProfileString ("CoolApplication", _ "ApplicationPath", "", strValue, strSize, "C:\MYINI.INI")

Функция GetPrivateProfile () извлекает значение параметра ApplicationPath раздела CoolApplication и присваивает его строковой переменной strValue, которая передается в функцию в качестве параметра. Кроме того, в переменную lSize записывается длина строки, присвоенной переменной strValue. Необходимо отметить, что если при выполнении функции GetPrivateProfile () возникает ошибка, то переменной lSize присваивается значение Null.

Работа с дескрипторами

Gри работе с Win32 API используются дескрипторы. Дескриптор - это 32-битное целое число, которое однозначно идентифицирует компоненты, используемые при программировании Win32 API, например, диалоговые окна, элементы управления в них, окна, битовые изображения, кисти, используемые для рисования картинок на экране, аппаратные средства. Необходимо отметить, что компоненту сначала назначается дескриптор, а затем этот дескриптор используется для работы с компонентом. Имена дескрипторов обычно задают имена, начинающиеся с префикса h.

В следующем описании параметр hWnd используется для задания дескриптора окна:

Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg_ As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin В As Long, ByVal _ wMsgFilterMax As Long) As Long

В следующем описании параметр hDevice является дескриптором конфигурации устройства:

Declare Function DeviceIoControl Lib "kerne132" Alias _ "DeviceIoControl" (ByVal hDevice As Long, ByVal dwIoControlCode As _ Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer _ As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, _ lpOverlapped As OVERLAPPED) As Long

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

Другие полезные примеры

Здесь приводятся несколько полезных примеров применения функций Win32 АРI.

Завершение работы Windows:

Модуль 1:

Declare Function ExitWindows Lib "user32" Alias "ExitWindowsEx" _ (ByVal dwReserved As Long, ByVal uReturnCode As Long) As Long

Const EWX_LOGOFF=0

Const EWX_SHUTDOWN=1

Const EWX_REBOOT=2

Const EWX_FORCE=4

Const EWX_POWEROFF=8

UserForm1:

Private Sub CommandButton1_Click()

Dim flag As Long

Dim Result As Long

If Me.OptionButton1.Value = True Then flag = 0

Else If Me.OptionButton2.Value = True Then flag = 8

Else If Me.OptionButton3.Value = True Then flag = 2

End If

Result = ExitWindows(flag, 0)

Unload Me

End Sub

Переключение на русскую кодировку:

Модуль 1:

Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal _ HKL As Long, ByVal flags As Long) As Long

Public Declare Function GetKeyboardLayout Lib "user32" (ByVal _ dwLayout As Long) As Long

UserForm1:

Private Sub UserForm_Initialize()

Dim lang As Long

lang = GetKeyboardLayout(0)

If lang <> 68748313 Then i = ActivateKeyboardLayout(68748313, 0)

End Sub

Закрытие окна:

Модуль 1:

Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long

Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

UserForm1:

Private Sub CommandButton3_Click()

Dim hwnd As Long, retval As Long

Dim temp As String

temp = "Games"

hwnd = FindWindow(CLng(0), temp) ' look for the window

retval = DestroyWindow(hwnd)

End Sub

Работа с реестром

В Windows 9х и Windows NT, a также приложениях, работающих под их управлением, используется специальная база данных, в которой хранится требуемая для выполнения программ информация: данные о компьютере, на котором инсталлировано программное обеспечение, о пользователях, об установленных аппаратных средствах и т. д. Эта база данных называется реестром. Для доступа к реестру из VBA используются функции Win32 АРI. Кроме того, чтобы просмотреть и отредактировать реестр вручную, можно запустить программу REGEDIT (REGEDT32 для Windows NT).

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

Структура реестра

Реестр имеет структуру дерева. В нем имеются шесть основных поддеревьев (пять в Windows NT). Элементы реестра называют ключами. Ключ может иметь подключи, а подключи - включать дополнительные ключи, например HKEY_CURRENT_USER\ControlPanel\ Accessibility.

Данные в реестре используются приложениями и операционной системой способами:

Иногда в приложении требуется просто проверить существование ключа. Например, приложение ищет ключ HKEY_CURRENT_CONFIG\Display\Settings и не проверяет наличие в нем подключей или параметров.

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

Ключи реестра

В верхней части дерева реестра имеются шесть основных ключей. Рассмотрим каждый из них:

HKEY_LOCAL_MACHINE. Под данным ключом хранятся данные, описывающие установленные на компьютере аппаратные средства и программное обеспечение.

HKEY_CURRENT_CONFIG. Под данным ключом хранится информация о конфигурации установленных на компьютере аппаратных средств.

HKEY_DYN_DATA (только Windows 9х). Под данным ключом хранится информация об установленных на компьютере самонастраивающихся устройств Plug и Play.

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

HKEY_USERS. Под данным ключом хранится информация о пользователях.

HKEY_CURRENT_USER. Под данным ключом хранится информация о текущем пользователе.

Использование VBA для доступа к реестру с помощью функций Win32 API

В VBA можно управлять реестром с помощью функций Win32 API, например:

- Прочитать содержимое ключей реестра

- Создать новые ключи в реестре

- Прочитать и изменить значения под ключами

- Экспортировать реестр в файл

- Импортировать данные реестра из внешнего файла

Описания, константы и типы данных реестра

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

Открытие ключа

Чтобы работать с ключами реестра, необходимо предварительно открыть их. При открытии ключа возвращается его дескриптор. Как уже отмечалось ранее, для ссылки на данные можно использовать их дескриптор, в данном случае для доступа к ключу используется дескриптор ключа. Для открытия ключа используется функция RegOpenKey (), которая возвращает значение, указывающее на то, было ли ее выполнение успешным или нет. Кроме того, данная функция присваивает своему аргументу дескриптор ключа. Покажем пример использования функции RegOpenKey (). В программе выводится число 0 в окне отладки, если при выполнении функции не возникло ошибок, а также отображается значение параметра hSubKeyHandle, который является дескриптором ключа

Программа открытия ключа:

Public Sub OpenRegistryKeyDemo()

Dim lReturn As Long

Dim sSubKey As String

Dim hSubKeyHandle As Long

lReturn = RegOpenKey&(HKEY_LOCAL_MACHINE, "Config", hSubKeyHandle)

Debug.Print lReturn

Debug.Print hSubKeyHandle

End Sub

Чтение значения параметра реестра

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

- Функция RegQueryValueO. Извлекает значение параметра по умолчанию

- Функция RegQueryValueEx (). Извлекает значение именованного параметра.

Чтобы получить значение именованного параметра, используйте функцию RegQueryValueEx(). Например, под ключом HKEY_CURRENT_СОNFIG\Display\Settings имеется параметр Resolution, в котором хранится разрешение экрана. В программе показан пример чтения значения именованного параметра. Программа требует некоторых пояснений:

- Функция RegOpenKey () используется для получения дескриптора требуемого ключа. Дескриптор передается в функцию RegQueryValueEx ().

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

- Третий аргумент функции RegQueryValueEx () зарезервирован для использования Windows, ему требуется присвоить значение 0.

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

Public Sub GetRegistryNameValueDemo ()

Dim lReturn As Long

Dim sSubKey As String

Dim hSubKeyHandle As Long

Dim sValue As String

Dim lSize As Long

LSize=10

SValue=String$(lSize, 0)

lReturn = RegOpenKeyEx(HKEY_CURRENT__CONFIG, Display\Settings", 0, _ KEY_ALL_ACCESS, hSubKeyHandle)

If lReturn<> 0 Then Exit Sub

lReturn = RegQueryValueEx(hSubKeyHandle, "Resolution", 0, REG_SZ, _ sValue, lSize)

Debug.Print sValue

End Sub

Создание ключа

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

Функция RegCreateKey () используется для создания ключа реестра. Кроме того, для этого применяется функция CreateRegKeyEx (), которая имеет большее число аргументов, например, параметры, гадающие защиту.

С помощью функции RegCreateKey () можно создать как один, так и структуру из нескольких ключей, например, добавить ключ "NEWKEY" под ключ HKEY_CURRENT_USER, или создать структуру KEYONE\KEYTWO\KEYTHREE под ключом HKEY_CURRENT_USER. В программе показано создание структуры разделов под ключом HKEY_LOCAL_MACHINE.

Программа создания ключей реестра

Public Sub CreateRegistryKeyDemo ()

Dim lReturn As Long

Dim sSubKey As String

Dim hSubKeyHandle As Long

sSubKey = "SOFTWARE\Использование VBA\Win32 API\Обзор"

lReturn = RegCreateKey& (HKEY_LOCAL_MACHINE, sSubKey, _ hSubKeyHandle)

End Sub

Установка значения параметра

Для установки значений параметров реестра по умолчанию используется функция RegSetValue (), а для задания величин именованных параметров- функция RegSetValueEx(). Необходимо отметить, что функцию RegSetValueExО можно применять, например, для установки значений именованных параметров ключа, созданного предыдущей программой. В следующей программе показано использование функции RegSeiValue(). Перед установкой значений требуется открыть ключ, под которым находится требуемый параметр. Единственным исключением из этого правила являются параметры реестра, которые хранятся под одним из шести основных ключей (пяти в Windows NT). В этом случае следует задать имя ключа (например, HKEY_LOCAL_MACHINE), а не дескриптор ключа в качестве первого параметра функции RegSetValue ().

Программа требует некоторых пояснений:

- Имя параметра и устанавливаемое значение непосредственно передаются в функцию RegSetValueEx ().

- Переменная lValueSize задает длину присваиваемого параметру строкового значения.

- В качестве четвертого аргумента функции RegSetValueEx () требуется задать тип устанавливаемого значения (REG_SZ). Список констант, соответствующих допустимым типам, приводится в разделе "Описания, константы и типы данных реестра".

- Третий аргумент функции RegSetValueEx () всегда равен 0.

Public Sub SetRegistryValue ()

Dim lReturn As Long

Dim hSubKeyHandle As Long

Dim sSubKeyName as String

Dim sValueName As String

Dim sValue As String

sSubKeyWame = "SOFTWARE\Использование VBA\Win32 API\Обзop"

'Открытие ключа и получение его дескриптора

lReturn = RegOpenKey(HKEY_LOCAL_MACHINE, sSubKeyNaine, hSubKeyHandle)

If lresult <> 0 Then Exit Sub

'Установка первого значения

sValueMame = "Скучно?"

sValue = "Нет"

lValueSize = Len (sValue)

lReturn = RegSetValueEx (hSubKeyHandle, sValueName, 0, REG_SZ, sValue, lValueSize)

' Установка второго значения

lsValueName = "Весело?"

sValue = "Конечно"

lValueSize = Len (sValue)

lReturn = RegSetValueEx (hSubKeyHandle, sValueName, 0, REG_SZ, sValue, lValueSize)

End Sub

Размещено на Allbest.ru

...

Подобные документы

  • Использование математических функций для алгоритмизации задач и отладки программ. Операторы сравнения и логические функции; реализация циклического процесса. Организация и обработка данных при помощи массивов. Функции преобразования и работы со строками.

    методичка [135,5 K], добавлен 24.10.2012

  • Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.

    методичка [17,8 K], добавлен 25.11.2010

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

    курсовая работа [29,2 K], добавлен 28.11.2010

  • Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.

    дипломная работа [767,2 K], добавлен 14.10.2010

  • Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.

    курсовая работа [44,3 K], добавлен 18.03.2013

  • Синтаксис языка РНР, его переменные и чувствительность их имен к регистру. Гибкость в отношении типов переменных, преобразование типов. Набор основных типов данных при работе с переменными. Методы передача переменных скрипту. Операторы цикла и выбора.

    дипломная работа [27,3 K], добавлен 15.04.2009

  • Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.

    лабораторная работа [814,3 K], добавлен 26.05.2013

  • Роль вычислительной техники в информационных системах. Компьютеризация учебного процесса. Технологичность программного обеспечения. Особенности отладки и испытания пpогpамм. Операторы языка СИ. Указатели и структуры данных. Основы доступа к файлам.

    тезисы [603,6 K], добавлен 10.05.2015

  • Модели параллельного программирования; отладка параллельных программ. Реализация экспериментальной версии системы сравнительной отладки Fortran-OpenMP программ: получение, сбор и запись трассы, инструментарий программ, используемый формат файлов трассы.

    дипломная работа [92,8 K], добавлен 17.10.2013

  • Отладка - процесс обнаружения, устранения синтаксических и семантических ошибок. Точки отслеживания (трассировки). Выполнение отладки в режиме останова. Мониторинг содержимого переменных. Пошаговое выполнение кода. Разработка тестов для отладки программы.

    презентация [743,6 K], добавлен 09.12.2013

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

  • Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.

    курсовая работа [575,8 K], добавлен 06.12.2013

  • Рассмотрение совокупности программ и языковых средств (специальных языков описания и манипулирования данными), предназначенных для создания, ведения и использования баз данных. Определение языков общения. Исследование принципов построения банка данных.

    реферат [56,9 K], добавлен 07.08.2017

  • Понятие массива и правила описания массивов в программах на языке С. Рассмотрение основных алгоритмов обработки одномерных массивов. Примеры программ на языке С для всех рассмотренных алгоритмов. Примеры решения задач по обработке одномерных массивов.

    учебное пособие [1,1 M], добавлен 22.02.2011

  • Изучение и анализ функциональных возможностей СУБД. Структура языка реляционных БД SQL (Structured Query Language). Типы данных SQL. Операторы DDL - операторы определения объектов базы данных. Примеры использования операторов манипулирования данными.

    курсовая работа [39,6 K], добавлен 21.07.2012

  • Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.

    контрольная работа [31,2 K], добавлен 12.12.2009

  • Особенности использования переменных вещественного типа в программе. Основные виды типов данных: простые, структурированные, указатели, процедурные, объекты. Работа и структура оператора while. Характеристика основных отличий while от оператора repeat.

    контрольная работа [31,4 K], добавлен 17.08.2010

  • Решение задач, прямо связанных с применением циклов и массивов. Условия применения различных видов циклической структуры. Операторы цикла с предусловием while, постусловием do-while и for. Особенности работы с одномерными и двумерными массивами.

    курсовая работа [1,1 M], добавлен 31.08.2019

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

    лабораторная работа [242,0 K], добавлен 30.09.2013

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

    контрольная работа [534,7 K], добавлен 11.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.