2017-03-21 2 views
0

Using Events with Automation erläutert die Verwendung von Outlook-Ereignissen mit Automatisierung. Ich verstehe jedoch nicht, wie ich diesen Code in mein Projekt implementieren kann.Verwenden von Outlook-Ereignissen mit Automatisierung

Ich möchte die InspectorBeforeMinimizeEvent Methode verwenden, wie in Inspector.BeforeMinimize Event (Outlook)

erklärt Jedes Mal, wenn sich der Benutzer bewegt/die Größe/maximiert/den Inspektor minimiert manuell dann die MessageBox sollte Pop-up.

folgende Code ist für den Test:

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 = "[email protected]" 
     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 

Ereigniscode:

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 
+0

Bitte beschädige nicht Ihre Beiträge. Durch die Veröffentlichung im Stack Exchange-Netzwerk haben Sie der SE ein widerrufliches Recht eingeräumt, diesen Inhalt zu verteilen (unter der [CC BY-SA 3.0-Lizenz] (https://creativecommons.org/licenses/by-sa/3.0) /)). Nach SE-Richtlinien wird jeglicher Vandalismus rückgängig gemacht. Wenn Sie diesen Beitrag von Ihrem Konto trennen möchten, lesen Sie [Was ist der richtige Weg für eine Ablehnungsanfrage?] (Https://meta.stackoverflow.com/q/323395) – Bugs

Antwort

0

Um dies zur Arbeit zu bringen, müssen Sie die hinzufügen Handler für Activate und die jedes Mal MailItem aktiviert Sie die WindowState gesetzt würde:

Private Sub myIns_Activate() Handles myIns.Activate 
    myIns.WindowState = Outlook.OlWindowState.olMinimized 
End Sub 

Ich würde diese Zeilen auch entfernen:

Process.Start("Outlook.exe") 
Threading.Thread.Sleep(3000) 

Dim myIns As Outlook.Inspector 

Threading.Thread.Sleep(10000) 

Sie brauchen nicht die Process.Start wie mit Dim olApp As New Outlook.Application behandelt wird. Sie brauchen auch nicht Dim myIns As Outlook.Inspector, da dies mit Public WithEvents myIns As Outlook.Inspector behandelt wird. Ich schätze die Threading.Thread.Sleep Zeilen können zu Testzwecken sein.

Ihr Code würde etwas Ähnliches wie folgt aussehen:

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 = "[email protected]" 
     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 
0

Deklarieren eine Variable für den Inspektor Objekt auf der Klassenebene und setzen ihn auf die Rückkehr des .GetInspector Verfahren, dann setze deinen Code in das eigentliche Ereignis:

Public WithEvents myIns As Outlook.Inspector 

Private Sub myIns_BeforeMinimize(Cancel As Boolean) 
    'Your code here 
End Sub