vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 2260: Eigene Online IP-Adresse ermitteln 
Autor: Preisser
 Tipp anzeigenDatum: 02.04.11 00:35

Hallo,

der Tipp ist nicht schlecht, aber warum sollte man die Seite in eine Datei downloaden und anschließend wieder auslesen, wenn man den Inhalt der Seite doch auch direkt im RAM auslesen kann?

Dies geht z.B. mit folgendem Code in einem Modul:
Option Explicit
 
Private Enum dwAccessType
    INTERNET_OPEN_TYPE_PRECONFIG = 0
    INTERNET_OPEN_TYPE_DIRECT = 1
    INTERNET_OPEN_TYPE_PROXY = 3
    INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
End Enum
Private Declare Function InternetOpen Lib "wininet" _
  Alias "InternetOpenW" ( _
  ByVal lpszAgent As Long, _
  ByVal dwAccessType As dwAccessType, _
  ByVal lpszProxyName As Long, _
  ByVal lpszProxyBypass As Long, _
  ByVal dwFlags As Long) As Long
 
Private Declare Function InternetOpenUrl Lib "wininet" _
  Alias "InternetOpenUrlW" ( _
  ByVal hInternet As Long, _
  ByVal lpszUrl As Long, _
  ByVal lpszHeaders As Long, _
  ByVal dwHeadersLength As Long, _
  ByVal dwFlags As Long, _
  ByVal dwContext As Long) As Long
 
Private Declare Function InternetReadFile Lib "wininet" ( _
  ByVal hFile As Long, _
  ByVal lpBuffer As Long, _
  ByVal dwNumberOfBytesToRead As Long, _
  lpdwNumberOfBytesRead As Long) As Long 
Private Declare Function InternetCloseHandle Lib "wininet" ( _
  ByVal hInternet As Long) As Long
 
Public Function GetURLContents(ByVal URL As String) As String
    Dim hInternet As Long, hURL As Long, TempLesePuffer() As Byte, URLInhalt As _
      String, tempBytesRead As Long
    hInternet = InternetOpen(StrPtr("Useragent" & ChrW(0)), _
    INTERNET_OPEN_TYPE_DIRECT, StrPtr(ChrW(0)), StrPtr(ChrW(0)), 0)
    If hInternet = 0 Then
        Err.Raise -1, "InternetOpen", "Fehler beim Erstellen des" & _
          "Internet-Handles.", "", ""
    Else
        hURL = InternetOpenUrl(hInternet, StrPtr(URL & ChrW(0)), StrPtr(ChrW( _
          0)), -1, &H80000000, 0)
        If hURL = 0 Then
            InternetCloseHandle hInternet
            Err.Raise -1, "InternetOpenUrl", "Fehler beim Erstellen des" & _
              "URL-Handles."
        Else
            ReDim TempLesePuffer(100000) ' ~100 KB Puffer
            Do
                InternetReadFile hURL, VarPtr(TempLesePuffer(0)), 100000, _
                  tempBytesRead
                If Not tempBytesRead = 0 Then URLInhalt = URLInhalt & MidB( _
                TempLesePuffer, 1, tempBytesRead)
            Loop While Not tempBytesRead = 0
            GetURLContents = URLInhalt
 
            InternetCloseHandle hURL
        End If
        InternetCloseHandle hInternet
    End If
End Function
Ein Aufruf
Dim sContents as String
sContents = StrConv(GetURLContents("http://checkip.dyndns.org"), vbUnicode)
lädt dann direkt den Inhalt in einen String, wobei die Bytes hier unter Verwendung der lokalen ANSI-Kodierung (z.B. Cp1252) nach Unicode konvertiert werden.

Die Funktion InternetReadFile liest dabei in einen Puffer, der dann dem String hinzugefügt wird.
Diese Methode ist aber auch nur für kleinere Dateien, da der komplette Inhalt ja in den RAM geschrieben wird. Wenn man in blockweise wo anders hinschreiben will (echte Streams gibts ja in VB6 noch nicht), müsste man den Code entsprechend ändern.

Beitrag wurde zuletzt am 02.04.11 um 00:55:25 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp 2260: Eigene Online IP-Adresse ermitteln3.737Preisser02.04.11 00:35

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel