Outlook EMail schliessen verhindern

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Steamy2010.

    Outlook EMail schliessen verhindern

    Guten Morgen @ all :) ,

    ich hoffe ihr könnt mir weiterhelfen ?(

    Es wird per Code eine Outlook EMail generiert. Allerdings möchte ich das das EMail Fenster nicht geschlossen werden kann (durch Klick auf CloseBox) bevor die EMail nicht versand wurde. Wie sollte ich hierbei vorgehen? Könnt ihr mir hier vielleicht ´nen Wink mit dem Zaunpfahl geben? :rolleyes:
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    @Steamy2010
    Mach doch eine Form mit dem Inhalt "Wird gesendet" und verweise auf diese mit

    VB.NET-Quellcode

    1. Form.ShowDialog
    .
    Dann kann man das nicht währenddessen vom Programm aus schließen. Andererseits kannst du den Status abfragen mit einer "If"-Schleife und beim Wert "true" beim "FormClosing"-Event

    VB.NET-Quellcode

    1. e.Cancel
    reinschreiben.

    Also dazu kannst du einfach beim Klicken auf den "Senden"-Button eine Variable auf True setzen:
    Ganz oben nach der Klassendeklarierung:

    VB.NET-Quellcode

    1. Dim amsenden As Boolean = False


    Und beim Button zum Senden "Click"-Event:

    VB.NET-Quellcode

    1. amsenden = True


    Und dann im Event Form.FormClosing:

    VB.NET-Quellcode

    1. If amsenden = True Then
    2. e.Cancel
    3. Else
    4. End If



    Und wenn es gesendet wurde:

    VB.NET-Quellcode

    1. amsenden = False

    VB.NET-Quellcode

    1. ' P/Invoke signatures
    2. <DllImport("user32.dll")> _
    3. Private Shared Function GetSystemMenu(hWnd As IntPtr, bRevert As Boolean) As IntPtr
    4. End Function
    5. <DllImport("user32.dll")> _
    6. Private Shared Function EnableMenuItem(hMenu As IntPtr, uIDEnableItem As UInteger, uEnable As UInteger) As Boolean
    7. End Function
    8. ' SysCommand (WM_SYSCOMMAND) constant
    9. Friend Const SC_CLOSE As UInt32 = &Hf060
    10. ' Constants used with Add/Check/EnableMenuItem
    11. Friend Const MF_BYCOMMAND As UInt32 = &H0
    12. Friend Const MF_ENABLED As UInt32 = &H0
    13. Friend Const MF_GRAYED As UInt32 = &H1
    14. Friend Const MF_DISABLED As UInt32 = &H2
    15. ''' <summary>
    16. ''' Sets the state of the Close (X) button and the System Menu close functionality.
    17. ''' </summary>
    18. ''' <param name="window">Window or Form</param>
    19. ''' <param name="bEnabled">Enabled state</param>
    20. Public Shared Sub EnableCloseButton(hWnd as IntPtr, bEnabled As Boolean)
    21. Dim hSystemMenu As IntPtr = GetSystemMenu(hWnd, False)
    22. EnableMenuItem(hSystemMenu, SC_CLOSE, MF_BYCOMMAND Or (If(bEnabled, MF_ENABLED, MF_GRAYED)))
    23. End Sub


    Jetzt musst du nur noch das gewünschte Fenster finden:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    2. Private Shared Function FindWindow( _
    3. ByVal lpClassName As String, _
    4. ByVal lpWindowName As String) As IntPtr
    5. End Function
    6. Dim hWnd = FindWindow(..)
    7. EnableCloseButton(hWnd,false)
    /nicht getestet