Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 166
от 24.11.2005, 09:51

Администратор:Калашников О.А.
В рассылке:Подписчиков: 117, Экспертов: 15
В номере:Вопросов: 1, Ответов: 4


Вопрос № 29793: Здравствуйте. У меня такой вопрос. Хочу вообщем научиться работать с API функциями в Microsoft Visual Basic 6.0. Насколько я понял, их нужно объявлять или как там это называется. Вообщем посмотрите приложение и поймёте, я взял несколько примеров....

Вопрос № 29.793
Здравствуйте.
У меня такой вопрос. Хочу вообщем научиться работать с API функциями в Microsoft Visual Basic 6.0. Насколько я понял, их нужно объявлять или как там это называется. Вообщем посмотрите приложение и поймёте, я взял несколько примеров. Из всего этого я понял что нужно в самом начале писать Private Declare Function, и еще замечал что иногда пишут "user32" а иногда "kernel32" или ещё что-нибудь придумают. Короче где можно об этом почитать, или может сами дадите краткую справку. Сами API функции у меня есть, скачал файлик с Инета.

Приложение:

Отправлен: 18.11.2005, 23:24
Вопрос задал: Неизвестнов Том (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Чурсанов Евгений Ильич
Здравствуйте, Неизвестнов Том!
В папке куда ты установил VBMicrosoft Visual StudioCommonToolsWinapi есть программа APILOAD. Запусти её и в меню File-Load Text File выбери для загрузки WIN32API. Там есть все описания функций и констант. Это тебе поможет правильно описать функции.(Там перечислены все их параметры) А в остальном это те же самые функции и обращатся к ним нужно также как и к стандартным функциям VB.
Надеюсь чем-нибудь помог. :)
Удачи.
---------
Создайте систему, которой сможет пользоваться дурак, и только дурак захочет ею пользоваться.
Ответ отправил: Чурсанов Евгений Ильич (статус: 6-ой класс)
Отправлен: 19.11.2005, 00:07

Отвечает: Залетин Виталий Викторович
Здравствуйте, Неизвестнов Том!
API - это Application Programming Interface (Программный интерфейс программирования), проще говоря - это, в основном, ядро самой винды. Объявлять (декларировать) апи-функции обязательно. Вот каркас объявления:

{Private/Public} Declare {Function/Sub} <имя> Lib "имя файла-библиотеки с функцией" [Alias "внутреннее имя"] (список параметров) [As <тип>]

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

Бывают Функции, бывают процедуры - хотя в реале они все там функции, просто некоторые можно объявлять как процедуры, тем самым игнорируя возвращаемое значение. Если Вы объявили это функцией, то As <тип> в конце обязателен.

"user32", "kernel32", "advapi32", "shell32" - это файлы с аналогичными именами и расширением ".dll", и в них сидят вот эти функции. Более того - это ядро Windows. Существуют и другие, но уже не "ядерные" файлы. Можно самому написать на Visual C++, Borland C++, Delphi такой файлик и вызывать из него функции аналогичным образом.
В некоторых языках гордо говорят, что, мол, у них все есть, и никакие АПИ им не нужны. На самом деле все не так. Просто создатели языка сели и написали оболочки для всех АПИ (например по работе с потоками), а пользователи языка (програмисты, что ли) используют их, иногда не представляя, что там внутри. Так что програмеры на Visual Basic тут оказываются продвинутей - надо ж своими ручками сесть и соорудить из кучи АПИ-функций что-то работающее.

Попробуйте для примера поработать с таким кодом:
На форме расположите кнопку (Command1), в коде следующее:

Private Declare Function FindWindowA Lib "user32" (ByVal lpClass As String, ByVal lpCaption As String) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal bEnabled As Long) As Long

Private Sub Command1_Click()
Dim hTray As Long

hTray = FindWindowA("Shell_trayWnd", vbNullString)
EnableWindow hTray, False
'EnableWindow hTray, True
End Sub

и попробуйте нажать кнопочку ПУСК.
Фраза "Shell_trayWnd" - это системный идентификатор панели задач.
Чтобы разблокировать панель задач, раскоментируйте "EnableWindow hTray, True" и закоментируйте "EnableWindow hTray, False"
Вот такие пироги...
З. Ы. Еще с бейсиком поставляется API-Viewer (в меню пуск в группе, откуда Вы запускаете среду разработки, есть ярлык на него).
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (статус: 7-ой класс)
Отправлен: 20.11.2005, 14:24

Отвечает: Licvidator
Здравствуйте, Неизвестнов Том!
user32, kernel32 и многие другие - это имена библиотек, в которых находятся данные функции (в вашем случае это LookupPrivilegeValue и GetCurrentProcess). Обычно они находятся в системном каталоге винды, но, естественно, могут хранится где угодно, главное из зарегистрировать с помощью regsvr32.exe
И еще дополню что запись "Private Declare Function" характерна только для внутримодульных (внутриформенных) деклараций. Это значит, что данная АПИшка будет доступна только в то модуле или форме, где она объявлена. Если хотите чтобы АПИ была доступна с любой точки проекта, объявите ее в модуле как Public (Public Declare Function...)
А почитать об этом подробнее можно в любой поисковой системе;)
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 20.11.2005, 22:10

Отвечает: AlexanderZh
Здравствуйте, Неизвестнов Том!
Syntax 1
[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]
Syntax 2
[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

public/private - надеюсь понятно
declare - тоже вопросов возникать не должно
sub/function - процедура/функция
name - имя функции
lib "libname" - имя библиотеки с этой функцией(процедурой), т.е. DLL файла
alias "aliasname" - псевдоним функции (напрмер если название вашей функции совпадает с библиотечной)
далее идут параметры и тип возвращаемого значения
Ответ отправил: AlexanderZh (статус: 2-ой класс)
Отправлен: 21.11.2005, 11:02


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Архив рассылки
Отписаться
Вспомнить пароль

В избранное