Zugriff auf GAL (Globales Adressbuch)

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Regulator.

    Zugriff auf GAL (Globales Adressbuch)

    Hallihallo,
    ich versuche mit VB verzweifelt Zugriff auf das globale Adressbuch zu bekommen. Mit Hilfe folgenden Codes ist mir das inzwischen auch gelungen:


    VB.NET-Quellcode

    1. Private Sub btnOutlook_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOutlook.ClickDim objSession As Object
    2. Dim objRecipients As ObjectDim objRecipient As Object
    3. Dim objAdressEntry As Object
    4. Dim lngCount As LongobjSession = CreateObject("MAPI.Session")
    5. Call objSession.Logon(, , False, False)
    6. objRecipients = objSession.AddressBook(, "Empfänger auswählen", , , 2, "an:", "cc:")
    7. If Err.Number = 0 Then
    8. For lngCount = 1 To objRecipients.Count
    9. objRecipient = objRecipients.Item(lngCount)
    10. objAdressEntry = objRecipient.AddressEntry
    11. MsgBox("Recipient: " & objRecipient.Name & vbCrLf & "AdressEntry: " & objAdressEntry.Name & vbCrLf & _
    12. "Recipient: " & objRecipient.Address & vbCrLf & "AdressEntry: " & objAdressEntry.Address)
    13. Next
    14. End If
    15. objSession = Nothing
    16. objRecipients = Nothing
    17. objRecipient = Nothing
    18. objAdressEntry = Nothing
    19. End Sub


    Leider sind "Address", "Name" und "Type" die einzigen Informationen, die ich aus dem GAL heraus bekomme. Ich bin gestern schon den ganzen Tag mit G00gle auf diversen Seiten unterwegs gewesen, habe aber nirgendwo eine Auflistung oder eine andere Methode für den Zugriff auf die GAL gefunden.

    Hat hier im Forum das Problem vielleicht schon mal jemand gelöst und kann mir auf die Sprünge helfen (Suchfunktion hat mich nicht weiter gehelft).

    Danke für Eure Hilfe

    Regulator
    Sorry, dachte das sei klar... :rolleyes:

    Zugreifen möchte ich auf alle Informationen, die im GAL zu den Datensätzen gespeichert sind (Anrede, Vorname, Nachname, Postleitzahl, Ort, Straße, Telefon-, Telefax-, Mobilnummer, Email etc.); was man halt in den Reitern sehen kann, wenn man z.B. in Outlook auf das Adressbuch-Icon klickt.
    Dim objAdressEntry As Object
    Finde doch erstmal heraus, was fürn Typ objRecipient.AddressEntry wirklich ist, wenn du zuweist:
    objAdressEntry = objRecipient.AddressEntry

    vlt. findeste diesen Typen auch im ObjectBrowser - dann weißt du jede Menge, was der kann, und was nicht.

    OffTopic: VB-Tag richtig benutzen
    Hallo "ErfinderDesRades",

    danke für den Hinweis mit dem Editor... Ich werd's nächstes Mal beachten.

    Hilf mir mal: Wie finde ich bei einem Objekt, über das ich nichts weiß (Object Explorer steht für MAPI (mir) nicht zur Verfügung, herausfinde, was drin ist und wie ich's anspreche.
    Ich weiß, dass ObjRecipients eine Aufzählung von Objekten ist. Eins davon ist objReciepient, das anscheinend sowohl ein Objekt (AddressEntry) also auch Eigenschaften (z.B. Name) enthält.
    Ich weiß aber nicht, welche Objekte in objReciepient enthält (und wie sie heißen) und ich weiß auch nicht welche Eigenschaften enthalten sind (geschweige denn, wie sie heißen). Gar nicht weiß ich z.B. ob objReciepient (gilt auch für AddressEntry) auch Methoden zur Verfügung stellt.
    Um genau das zu erfragen hab' ich mich hierher gewandt, da meine anderen Informationsquellen (google, msdn, vb.archiv u.v.m.) mich leider nicht weiter gebracht haben.
    Letztlich bin ich - weil ich Anfänger bin - ja auch ins Grundlagen-Forum gegangen...

    Bitte hab(t) Geduld mit mir, Danke
    vlt. gehts mittm Lokal-Fenster. Hier habich zB. einen Haltepunkt, und kann im Lokalfenster sehen, was fürn Typ in "dings" drinne ist.


    Ansonsten gibts da doch eine Bibliothek, die man einbinden muß, wenn man auf Outlook herumhühnert - gibts da nix interessantes drinne?

    Regulator schrieb:

    Object Explorer steht für MAPI (mir) nicht zur Verfügung

    Hmm - ich hab in mein OB sowas:
    Microsoft.Office.Interop.Outlook.AddressEntry

    wennich einen Verweis auf Microsoft.Office.Interop.Outlook setze.
    Das mit dem Haltepunkt und dem Lokal-Fenster probier' ich morgen mal aus (bin zur Zeit nicht im Büro). Danke für den Tipp.

    Im Code, den ich gepostet habe, ist gar kein Verweis zur ....Interop.Outlook. Soweit ich das verstanden habe (und der Code läuft ja auch so - ohne den Verweis), ist die GAL dem Exchange-Server zugehörig und ein Zugriff auf sie erfolgt nicht über Outlook. Man kennt sie halt nur aus Outlook. Bei Word 2007 kann man die GAL über das Schnellzugriffsmenü einbinden und der ausgewählte Name wird dann mitsamt weiteren Daten ins Word-Dokument geschrieben. Outlook muss dazu gar nicht auf sein.
    So, dem Rat folgende habe ich einfach mal einen .Interop.Outlook-Verweis hingemacht. Listet mir im ObjBrowser auch wunderschön alle Sachen auf, die der Verweis kann und zur Verfügung stellt... Hat mir aber leider nicht geholfen, weil die zwar identisch heißenden Objekte, aber offensichtlich ganz andere Methoden und Eigenschaften zur Verfügung stellen :(

    Sodann habe ich mir einen Haltepunkt und einen Watch auf "objAdressEntry" gesetzt. Das Ergebnis siehe Grafikanhang.

    Hat noch jemand eine Idee?
    Bilder
    • Screenshot.png

      11,03 kB, 756×152, 333 mal angesehen
    Hmmm, vielleicht drücke ich mich unklar aus (weil ich inzwischen den Wald vor lauter Bäumen nicht mehr sehe).
    Die Methoden und Eigenschaften von ".Interop.Outlook" heißen zwar zum Teil wie die, die ich für den MAPI-Zugriff gefunden habe, haben aber miteinander nix zu tun (und sind leider auch nicht übertragbar :( ).
    Inzwischen hab' ich weiteres herausgefunden:

    VB.NET-Quellcode

    1. Private Sub btnZeigsMir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOutlook.Click
    2. Dim MapiSession As Object
    3. Dim MapiRecipients As Object
    4. Dim MapiRecipient As Object
    5. MapiSession = CreateObject("MAPI.Session")
    6. Call MapiSession.logon(, , False, False)
    7. MapiRecipients = MapiSession.AddressBook(, "Empfänger auswählen", , , 2, "An:", "Cc:")
    8. If Err.Number = 0 Then
    9. MapiRecipient = MapiRecipients.item(1)
    10. MapiRecipient.AddressEntry.Details() ' Anzeigen eines Detail-Dialogs
    11. Else
    12. MsgBox(ErrorToString)
    13. End If
    14. End Sub

    Mit dem Code (ohne Outlook-Einbindung) lässt sich das Detail-Fenster für den ausgewählten (nur den ersten, wenn mehrere ausgwählt wurden) anzeigen.
    Da wird ein wunderschönes Fenster mit vielen Infos aufgebaut... Und ich möchte gerne an diese Detail-Infos dran ;)

    P.S.: Ich hab' den VB-Code im "Quellcode"-Reiter eingefügt, aber so schön eingerückt wie bei Dir wird er trotzdem nicht :(

    Zugriff auf Outlook-Adressbuch und ContactItem

    Hallo Forumler,
    mit dem Zugriff auf die GAL bin ich über's Wochenende ein bisschen weiter gekommen und habe es nun anders gelöst...

    VB.NET-Quellcode

    1. Dim OutlApp As Outlook.Application
    2. OutlApp = New Outlook.Application
    3. Dim OutlNameSpace As Outlook.NameSpace = OutlApp.GetNamespace("MAPI")
    4. OutlNameSpace.Logon(Nothing, Nothing, True, False)
    5. Dim GAL As Outlook.AddressList = OutlNameSpace.GetGlobalAddressList()
    6. Dim OutlRecipient As Outlook.Recipient
    7. Dim OutlContact As Outlook.ContactItem = New Outlook.ContactItem
    8. Dim GALDlg As SelectNamesDialog
    9. GALDlg = OutlNameSpace.GetSelectNamesDialog()
    10. GALDlg.Display()
    11. For Each OutlRecipient In GALDlg.Recipients
    12. OutlContact = OutlRecipient.AddressEntry.GetContact
    13. MsgBox(OutlRecipient.Resolved)
    14. Next
    15. MsgBox("Ende")
    16. OutlApp = Nothing

    ...dachte ich zumindest.
    Jetzt schmiert mir mein Code bei der Deklaration des OutlContact mit dem Fehler: "Die COM-Klassenfactory für die Komponente mit CLSID {00061031-0000-0000-C000-000000000046} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))." ab.
    Nach meiner Meinung habe ich keinen Fehler gemacht ;)
    Kann mir bitte jemand helfen!? Ich verzweifle echt bald an dem Thema :cursing:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Regulator“ ()