用OLE自動化Outlook
發表于:2007-07-14來源:作者:點擊數:
標簽:
作者: 揚眉 OLE Automation能夠讓你輕松的在你的應用程序中引入像Word,Excel等大型應用軟件的功能。通過這些程序暴露在外部的編程接口(包括函數和方法等),你可以很容易的得到那些大型軟件的強的功能,大大的擴展你的程序的實用性。 當然,我不會在這兒教你
作者: 揚眉
OLE Automation能夠讓你輕松的在你的應用程序中引入像Word,Excel等大型應用軟件的功能。通過這些程序暴露在外部的編程接口(包括函數和方法等),你可以很容易的得到那些大型軟件的強的功能,大大的擴展你的程序的實用性。
當然,我不會在這兒教你如何去編寫一個病毒程序,但是我會告訴你,如何利用OLE的強大功能來實現對Outlook的自動化操作,比如自動的發郵件,讀取
新聞組等等。如果你確實對病毒更感興趣,寫好了也不要把它發布出來,否則對大家都沒有什么好處。
什么是OLE Automation?
這兒可以給出一個OLE Automation的一個很簡單的例子:可以操作支持OLE特性的應用程序暴露在外部的可編程對象的能力。大部分的這些可編程對象都被內嵌在某種宏語言中,比如
VBA,它就是一種使用在Microsoft Office應用程序中的宏語言。
VBA(Visual Basic for Application)是VB的一個子集,所有的Office的最近的幾個版本都使用了OLE Automation,所以你可以用VBA來操作幾乎每個Office應用程序的每個部分。
下面的這個Visual Basic 函數可以用來在Outlook中新建一封郵件,要想使這個例子能夠正常的工作,你的電腦上必須安裝有Outlook 97或更高版的Outlook。
Public Function CreateMessage()
注釋:建立對Outlook中對象的引用
Dim objOutlook As New Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
注釋:建立新郵件
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
objOutlookMsg.Display
Set objOutlook = Nothing
End Function
首先,你必須告訴Visual Basic什么是“Outlook.Application”對象。所以你必須為你的應用程序建立一個對Outlook對象庫的引用。你可以通過點擊Visual Basic的“工程”菜單中的“引用”菜單項,然后選者Microsoft Outlook對象庫來實現這一點。這樣就告訴了Visual Basic在哪兒能夠找到OLE
服務器。在這個例子中,OLE服務器就是Outlook,而客戶端就是你的VB應用程序。
上面的例子用到了一個稱為早期綁定(early-binding)的技巧來設置對對象的引用。與之相對的還有晚期綁定(late-binding),它設置對象引用的代碼如下所敘:
Public Function CreateMessage()
Dim objOutlook As Object
Dim objOutlookMsg As Object
Set objOutlook = CreateObject("Outlook.Application")
基于以下的幾個原因,早期綁定在一般來說要筆晚期綁定要好一些:
* 早期綁定能夠讓你是用到VB的IntelliSense特性,它可以自動的為你做對象的一般拼寫檢查,自動列出相關對象的屬性和方法,以及諸方法的參數。這為你的編碼過程提供了很大的方便。
* 早期綁定運行的速度要必晚期綁定快一些,因為,具體的內存非配動作是要到運行時才動態的分配。而且,當把對象申明為一個Object的類型時,VB并不能夠確定具體的對象類型,這樣,如果在其中引用了非法的屬性和方法,VB也不能夠報錯,造成運行時錯誤。
雖然晚期綁定比早期綁定要慢而且不是很
安全,但有時它又是必須的。在某些情況下,非要等到運行時才能夠確定對象的類型,這兒后就非得使用晚期綁定不可了。但總的來說,能夠使用早期綁定的話就應該盡量的使用。
郵件列表
在VB中有專門為郵件處理而編寫的控件,但我們在這兒要拋棄他們。我們談論的是OLE。有了上面的那個例子作為引導,用VB和Outlook來編制郵件列表的程序應該是很簡單的了。
通過一個數據庫的協助,你可以很容易利用OLE實現一個郵件列表。VB支持大部分主流的數據庫格式,這兒你不妨就用A
clearcase/" target="_blank" >ccess吧,在VB中可以用DAO來對數據庫進行操作。DAO為你提供了一個比較友好的數據庫編程對象模型,可以用較少的代碼實現你想要的大部分功能。雖然它有一些局限性,但對于這樣的小應用已是綽綽有余的了。因為它也是以對象庫的形式被VB所引用的,所以在使用它之前也必須在工程加上對其的引用。 在開始之前,我們需要一個Access數據庫,其中包含了郵件列表的客戶信息。數據庫的文件名為Contacts.mdb,內有一個Contacts表。包含了關于客戶的姓名,電子郵件地址,城市等等信息,由于結構比較簡單,這兒就不列出了。
新建一個Visual Basic標準EXE工程,然后為工程添加Microsoft Outlook和Microsoft DAO這兩個對象庫的引用,DAO對象庫能夠讓你操作Microsoft的Jet數據庫引擎。
打開工程菜單,點擊On the Project menu, click on Components and select the Windows Common Controls 1 library.
添加一個命令按鈕和一個進度條道窗體上。
在Command1的click事件處理部分,輸入下面的代碼:
Private Sub Command1_Click()
Dim Dbs As Database
Dim Rst As Recordset
Dim objOutlook As New Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
注釋:打開數據庫
Set Dbs = OpenDatabase(App.Path & "Contacts.mdb")
Set Rst = Dbs.OpenRecordset("Contacts")
Rst.MoveFirst
ProgressBar1.Visible = True
注釋:對數據表中的每個數據進行操作
Do Until Rst.EOF
ProgressBar1.Value = Rst.PercentPosition
注釋:建立新的郵件
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
.To = Rst!email 注釋:給出收信人的郵件地址
.Subject = "Address Check" 注釋:給出郵件的主題
注釋:下面是郵件的正文部分
.body = "Dear " & Rst!Title & " " & Rst!LastName &
vbNewLine & vbNewLine
.body = .body & "This is an email to confirm your address. "
.body = .body & "Please check the address below to make sure "
.body = .body & "that it is correct" & vbNewLine & vbNewLine
.body = .body & Rst!Address & vbNewLine & Rst!City & vbNewLine
.body = .body & Rst!StateOrProvince & vbNewLine & Rst!PostalCode
.body = .body & vbNewLine & Rst!Country & vbNewLine & vbNewLine
.body = .body & "Tel: " & Rst!PhoneNumber
.Importance = olImportanceHigh
.Send
End With
注釋:取消對對象的引用
Set objOutlookMsg = Nothing
Rst.MoveNext
Loop
ProgressBar1.Visible = False
注釋:取消對對象的引用,這一步很重要。
Set objOutlook = Nothing
注釋:關閉數據庫Dbs.Close
MsgBox "Auto Email Complete", vbInformation
Set Dbs = Nothing
Set Rst = Nothing
End Sub
在你按下開始鍵之后,所有再數據庫中的客戶都被發送了一封確認信,你可以通過檢查發件箱來發現這一點。
最后,關于應用程序的發布要做一點說明。如果你決定在你的應用程序中使用諸如Outlook這樣的OLE服務器,你就必須考慮到,應用程序的最終使用者可能并沒有在電腦中安裝Outlook,或者安裝的版本不符,這樣的話程序式不能夠運行的。但是,你還是可以在你自己的電腦上
開發一些Automation的程序,有時這會為你節約大量的時間和精力。
原文轉自:http://www.anti-gravitydesign.com