Juri Shutenko Personal Homepage. Visual FoxPro.

Описание функций Windows API (WinInet) с примерами их использования в Visual FoxPro

Ниже приведен список функций, рассмотренных в данной статье:

Функция InternetGetConnectedState

Поставляет информацию о состоянии соединения для локальной системы. Декларирование функции в Visual FoxPro осуществляется с помощью команды:

Declare Integer InternetGetConnectedState In WinInet ;
   integer @lpdwFlags, Integer dwReserved

Параметры
Функция принимает два параметра: lpdwFlags и dwReserved, которые описаны ниже
 
lpdwFlags
Указатель на переменную, которая получает описание соединения. Этот параметр может включать одно или несколько значений, которые перечислены в приведенной ниже таблице.

Символьная константа Hex-значение Dec-значение Описание
INTERNET_CONNECTION_CONFIGURED 0x40 64 Локальная система имеет действительное соединение с Internet, но может быть (или обратное) не соединена в данный момент.
INTERNET_CONNECTION_LAN 0x02 2 Локальная система использует локальную сеть, для соединения с Internet.
INTERNET_CONNECTION_MODEM 0x01 1 Локальная система использует модем для соединения с Internet.
INTERNET_CONNECTION_MODEM_BUSY 0x08 8 Не используется (устарело).
INTERNET_CONNECTION_OFFLINE 0x20 32 Локальная система работает в режиме offline.
INTERNET_CONNECTION_PROXY 0x04 4 Локальная система использует прокси-сервер для соединения с Internet.
INTERNET_RAS_INSTALLED 0x10 16 Локальная система имеет установленным сервис RAS.

dwReserved
Зарезервирован. Должен быть равен нулю.

Возвращаемое значение
Возвращает TRUE (1 - в случае использования с VFP) если имеется соединение с Internet, или, в противном случае, FALSE (0 - в случае использования с VFP).

Пример:
Ниже приведен пример программного кода, использующий рассматриваемую функцию в Visual FoxPro:

#Define DEC_1   "Local system uses a modem to connect to the Internet."
#Define DEC_2   "Local system uses a LAN to connect to the Internet."
#Define DEC_4   "Local system uses a proxy server to connect to the Internet."
#Define DEC_16  "Local system has RAS installed."
#Define DEC_32  "Local system is in offline mode."
#Define DEC_64  "Local system has a valid connection to the Internet,"
#Define DEC_64P "but it might or might not be currently connected."

Declare Integer InternetGetConnectedState In WinInet ;
   integer @lpdwFlags, Integer dwReserved

Local lnSuccess, lnFlags, lnReserved, lcConnectDescription
lnFlags=0
lnReserved=0
lcConnectDescription=""
lnSuccess=InternetGetConnectedState(@lnFlags,lnReserved)
If lnSuccess=1
   lcConnectDescription="You have connection to internet"+Chr(13)+;
      "and your connection has following parameters:"+Chr(13)
Else
   lcConnectDescription="You havn't connection to internet."+Chr(13)
Endif
If Bittest(lnFlags,0)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_1
Endif
If Bittest(lnFlags,1)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_2
Endif
If Bittest(lnFlags,2)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_4
Endif
If Bittest(lnFlags,4)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_16
Endif
If Bittest(lnFlags,5)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_32
Endif
If Bittest(lnFlags,6)
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_64
   lcConnectDescription=lcConnectDescription+CHR(13)+DEC_64P
Endif

=Messagebox(;
   lcConnectDescription,;
   64,;
   "Internet Connection State";
   )
#UNDefine DEC_1
#UNDefine DEC_2
#UNDefine DEC_4
#UNDefine DEC_16
#UNDefine DEC_32
#UNDefine DEC_64
#UNDefine DEC_64P
Return

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

InternetGetConnectedState when network cable pluged in

а при отключенном - следующий:

InternetGetConnectedState when network unpluged

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

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.

Функция InternetAttemptConnect

Пытается установить соединение с Internet. Декларирование функции в Visual FoxPro осуществляется с помощью команды:

Declare Integer InternetAttemptConnect In WinInet ;
   Integer dwReserved

Параметры
Функция принимает один параметр: dwReserved, описанный ниже
 

dwReserved
Зарезервирован. Должен быть равен нулю.

Возвращаемое значение
Возвращает ERROR_SUCCESS (равное 0, как описано в заголовочном файле - в случае удачной попытки, или код системной ошибки.

Примечание
Эта функция позволяет приложению сначала попытаться осуществить соединение, а уже потом выполнять любые запросы. Клиентская программа может использовать эту функцию для вызова диалогового блока для осуществления dial-up подключения. Если попытка не удалась, приложение должно войти в режим offline.

Пример:
Ниже приведен пример программного кода, использующий рассматриваемую функцию в Visual FoxPro:

Declare Integer InternetAttemptConnect In WinInet ;
   Integer dwReserved
? InternetAttemptConnect(0)

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

Исполняем приведенный выше код:

Отключаем сетевой кабель:

и исполняем приведенный выше код:

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

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.

Функция InternetOpen

Инициализирует использование функций WinINet приложением.Декларирование функции в Visual FoxPro осуществляется с помощью команды:

Declare Integer InternetOpen In WinInet ;
   String lpcAgent, Integer nAccessType, String lpcProxyName, ;
   String lpcProxyBypass, Integer nFlags

Параметры
Функция принимает пять параметров: lpszAgent, dwAccessType, lpszProxyName, lpszProxyBypass и dwFlags, которые описаны ниже
 
lpszAgent
Указатель на строку с терминатором CHR(0), которая указывает на имя приложения или сущности, вызывающего функции WinINet. Это имя используется как пользовательский агент в протоколе HTTP.
 
dwAccessType Тип требующегося доступа. Этот параметр может принимать одно из перечисленных в таблице значений:

Символьная константа Hex-значение Dec-значение Описание
INTERNET_OPEN_TYPE_DIRECT 1 1 Разрешает имена всех хостов локально.
INTERNET_OPEN_TYPE_PRECONFIG 0 0 Запрашивает прокси или прямую конфигурацию из регистра.
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 4 Запрашивает проки или прямую конфигурацию из регистра и предотвращает использование стартовых Microsoft JScript или Internet Setup (INS) файлов.
INTERNET_OPEN_TYPE_PROXY 3 3 Направляет запрос прокси-серверу, в случае если не предоставлен лист обходов прокси-серверов и имени прокси-сервера нет списке прокси, которые можно обойти. В этом случае функция использует INTERNET_OPEN_TYPE_DIRECT.

lpszProxyName
Указатель на строку с терминатором CHR(0), указывает имя прокси-сервера(серверов) для использования с соединением, когда доступ через прокси-сервер определен установкой параметра dwAccessType в значение INTERNET_OPEN_TYPE_PROXY. Не используйте пустую строку, так как функция InternetOpen в таком случае будет использовать ее как имя прокси-сервера. Фукнции WinINet распознают только зафиксированные CERN типы прокси (только HTTP) и TIS FTP шлюзы (только FTP). Если в системе инсталлирован Microsoft Internet Explorer, эти функции, кроме того, поддерживают SOCKS - прокси. Запросы к FTP и Gopher могут быть выполнены через определенные CERN типы либо путем изменения их в запрос HTTP или путем использования функции InternetOpenUrl. Если параметр dwAccessType не установлен в значение INTERNET_OPEN_TYPE_PROXY, то этот параметр игнорируется и должен быть установлен в NULL. Для получения более подробной информации о списке прокси-серверов, обратитесь к разделу "Listing Proxy Servers" глобального раздела "Enabling Internet Functionality" на сайте MSDN корпорации Микрософт.

lpszProxyBypass
Указатель на строку с терминатором CHR(0), который определяет необязательный списко имен хостов или IP адресов, или тех и других, запросы к которым не должны отправляться через прокси для случая, когда значение параметра dwAccessType установлено в INTERNET_OPEN_TYPE_PROXY. Список может содержать модификаторы в виде звездочки. Не используйте пустую строку в качестве параметра, так как InternetOpen будет использовать ее как список обхода прокси-серверов. Если этот параметр указан как макро "<local>" в виде единственного члена списка, функция будет обходить любые имена хостов, которые не имеют в своем имени точки. Если же значение параметра dwAccessType не установлено в INTERNET_OPEN_TYPE_PROXY, то этот параметр будет игнорирован и и его значение должно быть установлено в NULL.

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

Символьная константа Dec-значение Описание
INTERNET_FLAG_ASYNC 1 Выполняет только асинхронные запросы на дескрипторах по убывающей от дескриптора возвращенного этой функцией.
INTERNET_FLAG_FROM_CACHE 2 Не выполняет сетевых запросов. Все сущности возвращаются из кэша. Если запрашиваемый элемент не находится в кэше, то возвращается соответствующая подходящая ошибка, такая как ERROR_FILE_NOT_FOUND.
INTERNET_FLAG_OFFLINE 2 Идентично INTERNET_FLAG_FROM_CACHE. Не выполняет сетевых запросов. Все сущности возвращаются из кэша. Если запрашиваемый элемент не находится в кэше, то возвращается соответствующая подходящая ошибка, такая как ERROR_FILE_NOT_FOUND. (тогда вопрос - зачем вообще нужен?)

Возвращаемое значение
Возвращает действительный дексриптор, который направляется приложениям ко всем последующим функциям WinINet. Если вызов функции не получился InternetOpen, то возращается NULL. Для получения описания соответствующего сообщения об ошибке используйте функцию WinAPI GetLastError.

Примечания
InternetOpen является первой WinINet, которая должна быть вызвана приложением. Она сообщает Internet DLL об необходимости инициализировать внутренние структуры данных и подготовиться для последующих вызовов из приложения. Когда приложение завершает использование функций Internet, оно должно вызвать функцию WinAPI InternetCloseHandle для освобождения дескриптора и любых связанных ресурсов.
 
Приложение может выполнять любое количество функции InternetOpen, хотя обычно достаточно единичного вызова. Приложению может потребоваться определить раздельное поведение каждой инстанции InternetOpen, такое, как, например, конфигурирование прокси-серверов для каждой из них.
 
После того, как приложение завершнит использование вызовов функций, использующих дескриптор HINTERNET, возвращенный вызовом InternetOpen, он должен быть закрыт с помощью функции InternetCloseHandle.

Пример:
Ниже приведен пример программного кода, использующий рассматриваемую функцию в Visual FoxPro:

Declare Integer InternetOpen In WinInet ;
   String lpcAgent, Integer nAccessType, String lpcProxyName, ;
   String lpcProxyBypass, Integer nFlags
Declare Integer InternetCloseHandle In WinInet ;
   Integer nHandle

ln_Inet_Handle = InternetOpen("VisualFoxPro", 1, .NULL., .NULL., 0)
? ln_Inet_Handle
InternetCloseHandle(ln_Inet_Handle)

В качестве результата на моей локальной системе было возвращено 13369348

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.

Дополнительные требования
Unicode Встроен как InternetOpenW (Unicode) и InternetOpenA (ANSI). Отметьте, что поддержка Unicode на ОС Windows Me/98/95 требует Microsoft Layer для Unicode.
InternetCloseHandle

Закрывает один дескриптор соединения с Internet, полученный с помощью функции WinAPI InternetOpen.Декларирование функции в Visual FoxPro осуществляется с помощью команды:

Declare Integer InternetCloseHandle In WinInet ;
   Integer nHandle

Параметры
Функция принимает один параметр: nHandle, описанный ниже
 

nHandle
Дескриптор соединения, который должен быть закрыт.

Возвращаемое значение
Возвращает TRUE (1 - в случае использования с VFP)если закрытие дескриптора произошло, в противном случае FALSE (0 - в случае использования с VFP). Если закрытие не состоялось, то соответствующее сообщение об ошибке можно получить с помощью функции WinAPI GetLastError.

Примечание
Вызов функции прекращает все незавершенные операции, выполняемые на дескрипторе и сбрасывает любые нереализованные данные. Если нить процесса блокирует вызов к Wininet.dll, то другая нить в приложении может вызвать InternetCloseHandle на Internet дескрипторе, используемом первой нитью для прекращения операцйии и разблокировки первой нити.
Приложение может вызвать функцию WinAPI GetLastError для определения причины задержки запроса. Если GetLastError возвращает ERROR_IO_PENDING, то это означает что имелись нереализованные запросы в момент закрытия дескриптора.

Пример:
Ниже приведен пример немного измененного программного кода, приведенного в рассмотрении предыдущей функции (изменения выделены цветом):

Declare Integer InternetOpen In WinInet ;
   String lpcAgent, Integer nAccessType, String lpcProxyName, ;
   String lpcProxyBypass, Integer nFlags
Declare Integer InternetCloseHandle In WinInet ;
   Integer nHandle

ln_Inet_Handle = InternetOpen("VisualFoxPro", 1, .NULL., .NULL., 0)
? ln_Inet_Handle
llSuccess=InternetCloseHandle(ln_Inet_Handle)
? llSuccess

Требования
смотри требования к клиенту, серверу и обозревателю Internet в таблице требований к системе.

Требования
Клиент Требует использования Windows "Longhorn", Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98 или Windows 95.
Сервер Требует использования Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server или Windows NT Server 4.0
Версия Требуется наличие установленного Internet Explorer 4.0 или более поздних версий.
Заголовки Объявлены в Wininet.h. Упакованный файл заголовков можно взять здесь
DLL Требуется наличие Wininet.dll

Смотрите последующие части, для получения информации о WinAPI функциях, связанных с получением информации из сети Internet.

Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.