Visual Basic Internet Routines
UrlGetPart: Determine the Constituent Parts of a URL
Posted:   Monday July 09, 2001
Updated:   Monday December 26, 2011
Applies to:   VB4-32, VB5, VB6
Developed with:   VB6, Windows 2000
OS restrictions:   See prerequisites below
Author:   VBnet - Randy Birch


UrlUnescape: Encoding and Decoding URL Escape Characters 
UrlCanonicalize: Proper URL Path Encoding and Decoding
UrlCreateFromPath: Proper URL Path Conversion from a DOS Path
Shlwapi.dll version 5.00 or greater, Windows XP, 2000, Windows NT4 with IE 5 or later, Windows 98, or Windows 95 with IE 5 or later. 

UrlGetPart takes a URL string and returns a portion of the string based on the parameter passed as the dwPart member of the call. The illustration shows the result of a series of calls to UrlGetPart. The Source URL contains pretty well the most you'll find in a single URL - a username and password, the host and port, the path too the data, and additional information as parameters - AKA the query portion.

By calling UrlGetPart once for each part of interest, the separate parts making up the whole are returned. When the URL_PARTFLAG_KEEPSCHEME flag is specified, each part is returned prefaced by the scheme name for the URL.

 BAS Module Code

 Form Code
To a form add a command button (Command1) and a textbox (Text1) for the source URL. Add two additional textboxes in a control array (Text2(0) and Text3(0)) for the return strings from the call, creating the six of each shown. Note that the code used control array indices 1 through 6, so add seven in total and delete the first control added (the 1-6 corresponds to the values passed as dwPart, making calling the API and filling textboxes easier. Once set up, add the following code:

Option Explicit
' Copyright 1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
Private Const MAX_PATH       As Long = 260
Private Const ERROR_SUCCESS  As Long = 0

Private Const URL_PART_SCHEME As Long = 1
Private Const URL_PART_HOSTNAME As Long = 2
Private Const URL_PART_USERNAME As Long = 3
Private Const URL_PART_PASSWORD As Long = 4
Private Const URL_PART_PORT As Long = 5
Private Const URL_PART_QUERY As Long = 6


Private Declare Function UrlGetPart Lib "shlwapi" _
   Alias "UrlGetPartA" _
  (ByVal pszIn As String, _
   ByVal pszOut As String, _
   pcchOut As Long, _
   ByVal dwPart As Long, _
   ByVal dwFlags As Long) As Long

Private Sub Form_Load()

   Dim cnt As Long
   Text1.Text = "http://randy:password" & _
                "" & _
                "/vbnet/index.html?" & _
   For cnt = 1 To 6
      Text2(cnt).Text = ""
      Text3(cnt).Text = ""
   Command1.Caption = "Get Parts"

End Sub

Private Sub Command1_Click()

   Dim sPart As String
   Dim sUrl As String
   Dim cnt As Long
  'using the original string in Text1 for
  'all calls, show the results of calling
  'UrlGetPart passing 0& and Keepscheme as
   For cnt = 1 To 6
      sUrl = Text1.Text
      sPart = GetUrlParts(sUrl, cnt, 0&)
      Text2(cnt).Text = sPart
   For cnt = 1 To 6
      sUrl = Text1.Text
      sPart = GetUrlParts(sUrl, cnt, URL_PARTFLAG_KEEPSCHEME)
      Text3(cnt).Text = sPart
End Sub

Private Function GetUrlParts(ByVal sUrl As String, _
                             dwPart As Long, _
                             dwFlags As Long) As String

   Dim sPart As String
   Dim dwSize As Long
   If Len(sUrl) > 0 Then
      sPart = Space$(MAX_PATH)
      dwSize = Len(sPart)
      If UrlGetPart(sUrl, _
                    sPart, _
                    dwSize, _
                    dwPart, _
                    dwFlags) = ERROR_SUCCESS Then
         GetUrlParts = Left$(sPart, dwSize)
      End If  'If UrlGetPart
   End If 'If Len(sUrl) > 0

End Function


PayPal Link
Make payments with PayPal - it's fast, free and secure!


Copyright 1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy


Hit Counter