RSS
StartseiteKnowledge LibraryTop 10Impressum

Link-Titel

Titelinformationen eines Browser-Link extrahieren

Wenn Sie einen Link im Internet Explorer auf zum Beispiel den Desktop ziehen und dort fallen lassen, wird eine neue Internetverknüpfung erstellt, die als Dateinamen den Titel des Links erhält. Diesen Dateinamen können Sie auch in Ihrer Anwendung nutzen...

Wenn Sie einen Link im Internet Explorer auf zum Beispiel den Desktop ziehen und dort fallen lassen, wird eine neue Internetverknüpfung (.URL) angelegt, die auf den verlinkte URL verweist und als Dateiname den Titel des Links trägt, also die Beschreibung die zwischen den <a ...></a> Tags steht.

Den URL des Links erhalten Sie im OLEDragDrop-Ereignis als einfachen Text über die GetData-Methode des Data-Objekts. Vorausgesetzt die OLEDropMode-Eigenschaft des Ziel-Objekts wurde auf 1 – vbOLEDropManual gesetzt. Nun wäre es ganz praktisch zu erkennen, ob es sich bei den Daten, die sich im OLEDragOver-Ereignis ankündigen, wirklich um einen Browser-Link handelt, um diesen entsprechend behandeln zu können bzw. visuelles Feedback zu geben.

Ob sich ein Format im Data-Objekt befindet, lässt sich über die GetFormat-Methode ermitteln. Das Format für einen Browser-Link ist unter dem Namen "UniformResourceLocator" im System registriert. Die dynamische Format ID lässt sich über die API Funktion RegisterClipboardFormat ermitteln. Dieser übergibt man den Namen des Formats und man erhält eine für das gesamte System gültige ID. Die Funktion CustomClipboardFormat gibt diese ID als einen für die GetFormat- und GetData- Methoden nutzbaren Integer-Wert zurück:

Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
       "RegisterClipboardFormatA" (ByVal lpString As String) As Long

Public Function CustomClipboardFormat(ByVal Name As String) As Integer
  CustomClipboardFormat = -CInt((RegisterClipboardFormat(Name) - 1) Xor &HFFFF&)
End Function

Die Abfrage auf den Browser-Link für ein visuelles Feedback und dem Lesen des URL, gestaltet sich dann wie folgt:

Private Const CFSTR_INETURL As String = "UniformResourceLocator"

Private Sub Form_OLEDragOver(Data As DataObject, Effect As Long, _
              Button As Integer, Shift As Integer, _
              X As Single, Y As Single, State As Integer)
  If Not Data.GetFormat(CustomClipboardFormat(CFSTR_INETURL)) Then
    Effect = vbDropEffectNone
  End If
End Sub

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long,_
              Button As Integer, Shift As Integer, _
              X As Single, Y As Single)
  If Data.GetFormat(CustomClipboardFormat(CFSTR_INETURL)) Then
    Label1.Caption = "URL: " & Data.GetData(vbCFText)
  End If
End Sub

Der Titel des Links, genauer der Dateiname für eine eventuelle Verknüpfung, ist unter dem Format "FileGroupDescriptor" im Data-Objekt abgelegt. Die ID lässt sich wieder mit der Funktion CustomClipboardFormat ermitteln. Das im Data-Objekt abgelegte Format des FileGroupDescriptor besteht eigentlich aus einer FILEGROUPDESCRIPTOR Struktur, die Informationen zu der Anzahl der enthaltenen Einträge und ein Array von FILEDESCRIPTOR Strukturen mit einer näheren Beschreibung einer einzelnen Datei enthält. Da wir aber nur den Titel des Links haben wollen, ignorieren wir die Struktur und extrahieren diesen direkt aus den Daten, die die GetData-Methode liefert. Genau ab dem 77. Zeichen bis zum Vorkommen des abschließenden ".URL". Verpackt in der Funktion GetDroppedURLTitle brauchen Sie dieser nur noch das Data-Objekt übergeben und erhalten den Titel des URLs:

Private Const CFSTR_FILEDESCRIPTOR As String = "FileGroupDescriptor"

Public Function GetDroppedURLTitle(ByRef Data As DataObject) As String
  Dim lTitle    As String
  Dim lFormatID As Integer

  lFormatID = CustomClipboardFormat(CFSTR_FILEDESCRIPTOR)

  If (Data.GetFormat(lFormatID)) Then
    lTitle = StrConv(Data.GetData(lFormatID), vbUnicode)
    lTitle = Mid$(lTitle, 77, _
                  InStr(1, lTitle, ".url", vbTextCompare) - 77)
    GetDroppedURLTitle = lTitle
  End If
End Function

Wie schon oben erwähnt, wird der Titel aus dem Dateinamen für eine Verknüpfung erstellt. Das heißt auch, dass Zeichen, die in einem Dateinamen nicht vorkommen dürfen, durch Bindestriche ersetzt werden. Jedenfalls teilweise, wie zum Beispiel folgende Zeichen ": / \".

Diese Methode funktioniert sowohl mit dem Internet Explorer, als auch mit Netscape/Mozilla. Wobei Netscape 4.7 dem Dateinamen noch einen Zusatz "Direktzugriff auf ..." verpasst. Opera bietet keine Drag & Drop Unterstützung.