2011-10-24 90 views

回答

2

聲明:這肯定可以通過COM,但Outlook將顯示警告,第三方應用程序正在訪問地址簿(以及正確的)。如果要避免這些警告,可以從Outlook加載項中運行代碼,然後使用MAPI,或使用Outlook Redemption,這基本上是一種圍繞MAPI的高級包裝,它與Outlook對象模型類似。

Outlook對象模型提供了SelectNamesDialog對話框來顯示地址簿。它具有高度可配置性,您也可以使用自定義地址集來初始化它。

作爲一個小例子,下面是一些在多選模式下彈出地址簿的代碼。爲簡潔起見,它使用後期綁定(OleVariants)。您可能會希望在生產代碼中使用早期綁定。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    application: OleVariant; 
    dialog: OleVariant; 
    i: Integer; 
    recipients: String; 
    recipient: OleVariant; 

begin 
    application := createOleObject('Outlook.Application'); 

    // Obtain the dialog 
    dialog := application.session.getSelectNamesDialog; 

    // Only show the a single 'add' field, multiselect 
    dialog.setDefaultDisplayMode(6); // 6 = olDefaultDelegates 

    // Display the dialog 
    dialog.display; 

    // Display selection 
    recipients := ''; 
    for i := 1 to dialog.recipients.count do 
    begin 
     recipient := dialog.recipients.item(i); 

     recipients := recipients + recipient.name + #13#10; 
    end; 

    showMessage(recipients); 
end; 
+0

感謝您的詳細信息 - 不清楚MAPI是否與Outlook對象模型不同 - 不適合Office/Exchange集成等。 – Vector

2

爲了做這樣的事情,你需要支持擴展MAPI接口。

這裏是一個組件的鏈接,它在Win7-64 Outlook-2010上支持此功能。

Easy MAPI

支持地址簿對話的執行。

+0

+1 - 我可能會最終使用Easy MAPI,但我指出了其他答案,因爲@ Paul-Jan解釋了不同的選項等。謝謝。 – Vector