Hallo zusammen,
Ich hätte gerne für meine Application so etwas wie einen Outlook Addressbook picker. Hab zwar alle möglichen verfahren gefunden wie man Outlook ansprechen kann, aber nie war irgendwas dabei womit ich das Addressbuch öffnen konnte.
Danke für die Hilfe
Hawk
Hallo,
es gibt eine COM-dll, und die Du als Verweis Deinem Projekt hinzufügen musst, bei Office 2003 heißt sie "Microsoft Outlook 11.0 Object Library".
In der dll stecken dann auch Funktionen fürs Adressbuch.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Darüber gibts auch sehr viele Infos @google.de oder MSDN !
//// scarp
Darüber gibts auch sehr viele Infos @google.de oder MSDN !
Dann post mir doch mal nen Link
Naja wenn du mal geschaut hättest, hättest du auch gesehen, dass es vielleicht gar nicht so trivial ist speziell zu dem Address Book in Outlook etwas in der MSDN bzw Google zu finden. Es gibt zwar was wie z.B.: die CDO Library die dir als Profi ja sicher was sagen wird, aber auch hiermit gibts probleme mit der einbindung.
Aber gut...wahrscheinlich haste eh keinen link gefunden und auf Google oder die MSDN zu verweisen (was ja zugegebenermassen oft auch richtig ist) kann ja eh jeder
Es kann doch nicht so schwer sein auf http://msdn2.microsoft.com/en-us/library/ms269108.aspx zu kommen, wenn man die MSDN mal mit ein paar Suchbegriffen wie: Access Outlook Contacts füttert.
🤔
Jörg
Das ist in der Tat sehr leicht...da war ich auch schon 5 mal, aber es ist dennoch nicht was ich suche.
Ich will das Addressbuch (zu finden unter Tools->Address Book)! Was du mir gezeigt hast ist einfach das ContactFolder was sich links in der Navigations Leiste befindet.
Trotzdem danke für den Tipp war ja schliesslich konstruktiv.
Gehen sollte das ganze wie eben schon geschrieben mit der CDO Library.
Problem ist hier nur: Woher krieg ich die, denn der Download von Microsoft wurde eingestellt und alle anderen CDO Librarys die ich gefunden habe sind funktionsuntüchtig
Gruß
Hawk
http://www.outlookcode.com/codedetail.aspx?id=773
http://www.microsoft.com/downloads/details.aspx?FamilyID=2714320d-c997-4de1-986f-24f081725d36&displaylang=en
tut mir jetzt leid, aber ich bin wirklich genauso faul zum suchen. ich weiß nich ob das das richtige ist, aber ich bin mir sicher!!! das man dazu was findet.
womöglich ist die vorraussetzung der englischen sprache mächtig zu sein.
es tut mir ein bisschen leid, das ich solchen leuten wie dir, nicht beim suchen helfen und stattdessen unkonstruktive beiträge erstelle, aber ich kann einfach nicht anders!
//// scarp
Jep der erste link ist super...an dem orientiere ich mich auch die ganze zeit. Allerdings krieg ich diese verfluchte CDO nicht eingebunden.
Merci
So habs nun endlich hingekriegt.
Problem war das ich bereits auf die Office beta umgestiegen bin und die sagenumwogene CDO.DLL wohl nur mit dem Outlook 2003 zusammenarbeitet, was bedeutet, dass ich mich in nem halben Jahr wieder dem problem stellen werde 🙁
Auch bei Outlook 2003 muss man bei der Installation beachten, dass die "Collaboration Data Objects" Komponente mitinstalliert wird. Anschliessend hab ich die unter "C:\Program Files\Common Files\System\MSMAPI\1033" CDO.DLL erscheinende Bibliothoek noch mittels regsvr32 registriert.
Auch die Microsoft.Office.Interop.Outlook benötigt man um den ausgewählten Recipient in einer einfachen Form zu empfangen.
Hier der Code für die prinzipiell so einfache sache:
using System.Reflection;
using Microsoft.Office.Interop.Outlook;
...
Microsoft.Office.Interop.Outlook.Application outlookApplication = new Microsoft.Office.Interop.Outlook.Application();
NameSpace mapiNamespace = outlookApplication.GetNamespace("mapi");
try
{
MAPI.Recipients recipients = null;
MAPI.SessionClass outlookSession = new MAPI.SessionClass();
outlookSession.MAPIOBJECT = outlookApplication.Session.MAPIOBJECT;
Type recipientType = outlookSession.GetType();
object[] arguments = new Object[] { Type.Missing, "Empfänger Auswählen", Type.Missing, Type.Missing, 1, "An" };
recipients = (MAPI.Recipients)recipientType.InvokeMember("AddressBook", BindingFlags.InvokeMethod, null, outlookSession, arguments);
for (int i = 1; i <= (int)recipients.Count; i++)
{
object myItem = recipients.get_Item(i);
System.Type myRecipientType = myItem.GetType();
string myEntryID = (string)myRecipientType.InvokeMember("ID", BindingFlags.GetProperty, null, myItem, null);
Recipient myRecpt = (Recipient)outlookApplication.Session.GetRecipientFromID(myEntryID);
if (myRecpt != null)
{
Console.WriteLine(myRecpt.Name);
}
}
recipients = null;
outlookSession = null;
}
catch
{
}
}
Jetzt muss ich nur noch wissen wie ich dieses so lästig aufpoppende Fenster
"Allow Access for blablabla minutes" wegkriege, aber da wirds wohl hoffentlich was geben.
Gruß
Hawk
//// scarp
CDO sollte man für zukünftige Projekte nicht mehr verwenden. Es gibt in der Library jede Menge ungereimtheiten. Z.B. wird Deine Anwendung einfach unkontrolliert und sporadisch abschmieren, wenn Du Multithreading einsetzt.
Vergiss CDO und nimm das Outlook-Objektmodell. Da gibt es sehr wohl Klassen, um auf Adressbücher (Nicht die Kontakte) zuzugreifen. Das steht sogar in der normalen Outlook-Hilfe: