将 Outlook 事件与自动化结合使用
Using Outlook events with automation
Using Events with Automation 解释了如何将 Outlook 事件与自动化结合使用。但是我不明白如何将该代码实现到我的项目中。
我想使用 InspectorBeforeMinimizeEvent
方法,如 Inspector.BeforeMinimize Event (Outlook)
中所述
每当用户 moves/resizes/maximizes/minimizes 手动检查器时,MessageBox
应该弹出。
以下代码用于测试:
Imports Microsoft.Office.Interop
Public Class Form1
Public WithEvents myIns As Outlook.Inspector
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Process.Start("Outlook.exe")
Threading.Thread.Sleep(3000)
Dim olApp As New Outlook.Application
Dim myMailItem As Outlook.MailItem
myMailItem = CType(olApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
myMailItem.Subject = "Hello"
myMailItem.To = "anybody@example.com"
myMailItem.Body = "Hi there..."
Dim myIns As Outlook.Inspector
myIns = myMailItem.GetInspector
myIns.Display(False)
Dim myWord As Word.Document
myWord = CType(myIns.WordEditor, Word.Document)
Dim mySel As Word.Selection
mySel = myWord.Application.Selection
Threading.Thread.Sleep(10000)
'Following line just for testing. Normally following line doesnt exist in my original code. The real scenario is the user minimizes the inspector manually.
myIns.WindowState = Outlook.OlWindowState.olMinimized
myWord.InlineShapes.AddPicture(FileName:="C:\Example.png", LinkToFile:=False, SaveWithDocument:=True, Range:=mySel.GoTo(What:=Word.WdGoToItem.wdGoToLine, Which:=Word.WdGoToDirection.wdGoToLast, Count:=-4))
'myMailItem.Send()
End Sub
End Class
事件代码:
Private Sub myIns_BeforeMinimize(Cancel As Boolean)
MessageBox.Show("You are minimizing this inspector.", "Title", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
End Sub
在class级别为Inspector对象声明一个变量并将其设置为.GetInspector方法的return,然后将您的代码放在实际事件中:
Public WithEvents myIns As Outlook.Inspector
Private Sub myIns_BeforeMinimize(Cancel As Boolean)
'Your code here
End Sub
要让它工作,您需要为 Activate
添加处理程序,并且每次 MailItem
被激活时,您将设置 WindowState
:
Private Sub myIns_Activate() Handles myIns.Activate
myIns.WindowState = Outlook.OlWindowState.olMinimized
End Sub
我还要删除这些行:
Process.Start("Outlook.exe")
Threading.Thread.Sleep(3000)
Dim myIns As Outlook.Inspector
Threading.Thread.Sleep(10000)
您不需要 Process.Start
,因为它由 Dim olApp As New Outlook.Application
处理。您也不需要 Dim myIns As Outlook.Inspector
,因为它由 Public WithEvents myIns As Outlook.Inspector
处理。我很欣赏 Threading.Thread.Sleep
行可能用于测试目的。
您的代码看起来类似于:
Imports Microsoft.Office.Interop
Public Class Form1
Public WithEvents myIns As Outlook.Inspector
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim olApp As New Outlook.Application
Dim myMailItem As Outlook.MailItem = CType(olApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
myMailItem.Subject = "Hello"
myMailItem.To = "anybody@example.com"
myMailItem.Body = "Hi there..."
myIns = myMailItem.GetInspector
myIns.Display(False)
Dim myWord As Word.Document
myWord = CType(myIns.WordEditor, Word.Document)
Dim mySel As Word.Selection
mySel = myWord.Application.Selection
myWord.InlineShapes.AddPicture(FileName:="C:\Example.png", LinkToFile:=False, SaveWithDocument:=True, Range:=mySel.GoTo(What:=Word.WdGoToItem.wdGoToLine, Which:=Word.WdGoToDirection.wdGoToLast, Count:=-4))
myMailItem.Send()
End Sub
Private Sub myIns_Activate() Handles myIns.Activate
myIns.WindowState = Outlook.OlWindowState.olMinimized
End Sub
End Class
Using Events with Automation 解释了如何将 Outlook 事件与自动化结合使用。但是我不明白如何将该代码实现到我的项目中。
我想使用 InspectorBeforeMinimizeEvent
方法,如 Inspector.BeforeMinimize Event (Outlook)
每当用户 moves/resizes/maximizes/minimizes 手动检查器时,MessageBox
应该弹出。
以下代码用于测试:
Imports Microsoft.Office.Interop
Public Class Form1
Public WithEvents myIns As Outlook.Inspector
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Process.Start("Outlook.exe")
Threading.Thread.Sleep(3000)
Dim olApp As New Outlook.Application
Dim myMailItem As Outlook.MailItem
myMailItem = CType(olApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
myMailItem.Subject = "Hello"
myMailItem.To = "anybody@example.com"
myMailItem.Body = "Hi there..."
Dim myIns As Outlook.Inspector
myIns = myMailItem.GetInspector
myIns.Display(False)
Dim myWord As Word.Document
myWord = CType(myIns.WordEditor, Word.Document)
Dim mySel As Word.Selection
mySel = myWord.Application.Selection
Threading.Thread.Sleep(10000)
'Following line just for testing. Normally following line doesnt exist in my original code. The real scenario is the user minimizes the inspector manually.
myIns.WindowState = Outlook.OlWindowState.olMinimized
myWord.InlineShapes.AddPicture(FileName:="C:\Example.png", LinkToFile:=False, SaveWithDocument:=True, Range:=mySel.GoTo(What:=Word.WdGoToItem.wdGoToLine, Which:=Word.WdGoToDirection.wdGoToLast, Count:=-4))
'myMailItem.Send()
End Sub
End Class
事件代码:
Private Sub myIns_BeforeMinimize(Cancel As Boolean)
MessageBox.Show("You are minimizing this inspector.", "Title", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
End Sub
在class级别为Inspector对象声明一个变量并将其设置为.GetInspector方法的return,然后将您的代码放在实际事件中:
Public WithEvents myIns As Outlook.Inspector
Private Sub myIns_BeforeMinimize(Cancel As Boolean)
'Your code here
End Sub
要让它工作,您需要为 Activate
添加处理程序,并且每次 MailItem
被激活时,您将设置 WindowState
:
Private Sub myIns_Activate() Handles myIns.Activate
myIns.WindowState = Outlook.OlWindowState.olMinimized
End Sub
我还要删除这些行:
Process.Start("Outlook.exe")
Threading.Thread.Sleep(3000)
Dim myIns As Outlook.Inspector
Threading.Thread.Sleep(10000)
您不需要 Process.Start
,因为它由 Dim olApp As New Outlook.Application
处理。您也不需要 Dim myIns As Outlook.Inspector
,因为它由 Public WithEvents myIns As Outlook.Inspector
处理。我很欣赏 Threading.Thread.Sleep
行可能用于测试目的。
您的代码看起来类似于:
Imports Microsoft.Office.Interop
Public Class Form1
Public WithEvents myIns As Outlook.Inspector
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim olApp As New Outlook.Application
Dim myMailItem As Outlook.MailItem = CType(olApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
myMailItem.Subject = "Hello"
myMailItem.To = "anybody@example.com"
myMailItem.Body = "Hi there..."
myIns = myMailItem.GetInspector
myIns.Display(False)
Dim myWord As Word.Document
myWord = CType(myIns.WordEditor, Word.Document)
Dim mySel As Word.Selection
mySel = myWord.Application.Selection
myWord.InlineShapes.AddPicture(FileName:="C:\Example.png", LinkToFile:=False, SaveWithDocument:=True, Range:=mySel.GoTo(What:=Word.WdGoToItem.wdGoToLine, Which:=Word.WdGoToDirection.wdGoToLast, Count:=-4))
myMailItem.Send()
End Sub
Private Sub myIns_Activate() Handles myIns.Activate
myIns.WindowState = Outlook.OlWindowState.olMinimized
End Sub
End Class