[AccessD] Opening Outlook if closed code not working

Mike and Doris Manning mikedorism at ntelos.net
Thu Mar 13 15:32:00 CST 2003


The problem with shelling out to a program is that control doesn't pass back
to the calling program until the shelled out program closes.  That is why I
asked you what you needed to do with Outlook that you couldn't do via VBA.

In my code I pass the bolOutlook variable back to the calling routine via
the function so that when I'm done working with Outlook, I know whether I
need to shut it down or not.  Here is the code that calls the function I
sent you earlier (uses Redemption to bypass Outlook Security):

Public Function SendSafeEmail(SendTo As String, SendSubj As String, _
                     SendBody As String, SendEdit As Boolean, _
                     Optional SendCC As String)
                                         
    On Error GoTo ErrorHandler
    
    Dim oMail As Object
    Dim oSpace As Object
    Dim oFoldr As Object
    Dim oItem As Object
    Dim oSafe As Object
    Dim oDeliver As Object
    Dim bolOpen As Boolean
    
    bolOpen = IsOutlookOpen
    
    Set oMail = CreateObject("Outlook.Application")
    Set oSpace = oMail.GetNamespace("MAPI")
    Set oFoldr = oSpace.GetDefaultFolder(olFolderOutbox)
    Set oItem = oMail.CreateItem(olMailItem)
    Set oSafe = CreateObject("Redemption.SafeMailItem")
    oSafe.Item = oItem

    With oSafe
        .Recipients.Add SendTo
        If IsMissing(SendCC) = False Then .Recipients.Add SendCC
        .Recipients.ResolveAll
        .Subject = SendSubj
        .Body = SendBody
        If SendEdit = True Then
            .Display
        Else
            .Send
        End If
    End With
    
    Set oDeliver = CreateObject("Redemption.MAPIUtils")
    oDeliver.DeliverNow
    oDeliver.Cleanup
    
    If bolOpen = False Then
        oMail.Quit
    End If
    
    Set oDeliver = Nothing
    Set oSafe = Nothing
    Set oItem = Nothing
    Set oFoldr = Nothing
    Set oSpace = Nothing
    Set oMail = Nothing

    Exit Function
    
ErrorHandler:
    Call HandleErrors(Err, strMyName, "SendSafeEmail")
    
End Function

Doris Manning
Database Administrator
Hargrove Inc.
www.hargroveinc.com



-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] On Behalf Of Dan Waters
Sent: Thursday, March 13, 2003 03:53 PM
To: accessd at databaseadvisors.com
Subject: RE: [AccessD] Opening Outlook if closed code not working


Doris,

The problem I had with using CreateObject was that Outlook closed when the
object variable went out of scope, or when Access was closed.

Opening Outlook using Shell will open Outlook so that it will stay open, but
upon opening the Outlook window becomes Active instead of the Access window.

Is there a way out of this dilemma?

Thanks,
Dan Waters


-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] On Behalf Of
paul.hartland at fsmail.net
Sent: Wednesday, March 12, 2003 8:31 AM
To: accessd at databaseadvisors.com
Subject: RE: RE: [AccessD] Opening Outlook if closed code not working


Thanks so much, don't know what I would do without this list at times......


From: "Mike and Doris Manning" <mikedorism at ntelos.net>
Date: Wed 12/Mar/2003 14:31 GMT
To: <accessd at databaseadvisors.com>
Subject: RE: RE: [AccessD] Opening Outlook if closed code not working

What you need to do is create a reference to the Outlook Object Model. Here
are some websites that will give you most of the info you need to know.

www.outlookexchange.com/articles/home/outlookobjectmodel.asp
www.microsoft.com/office/previous/outlook/SuprEasy.asp 
www.microsoft.com/mind/0597/outlook.asp

Doris Manning
Database Administrator
Hargrove Inc.
www.hargroveinc.com


-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] On Behalf Of
paul.hartland at fsmail.net
Sent: Wednesday, March 12, 2003 08:39 AM
To: accessd at databaseadvisors.com
Subject: RE: RE: [AccessD] Opening Outlook if closed code not working


Basically, I just want to open Outlook if it's closed then return the focus
to my application......Unfortunately I don't know how to open Outlook any
other way using Visual Basic 6 apart from shelling out.....

Could you point me in the right direction to opening Outlook using Visual
Basic 6 ?

Thanks in advance.....

Paul


From: "Mike and Doris Manning" <mikedorism at ntelos.net>
Date: Wed 12/Mar/2003 13:30 GMT
To: <accessd at databaseadvisors.com>
Subject: RE: RE: [AccessD] Opening Outlook if closed code not working

Why are you shelling out to it?  What are you trying to do with Outlook that
you can't do via VBA code?

Doris Manning
Database Administrator
Hargrove Inc.
www.hargroveinc.com


-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] On Behalf Of
paul.hartland at fsmail.net
Sent: Wednesday, March 12, 2003 04:57 AM
To: accessd at databaseadvisors.com
Subject: Re: RE: [AccessD] Opening Outlook if closed code not working


Thanks, works like a dream........But do you know a way around my next
problem.....

I use Shell("D:\Program Files\Microsoft
Office\Office\Outlook.exe",vbMinimizedNoFocus)  now although this opens
Outlook, Outlook retains the focus, and my application is hidden behind it.
Is there a way I can tell Outlook to open and then return the focus to my
application ?

Thanks in advance......

Paul Hartland


From: "Mike and Doris Manning" <mikedorism at ntelos.net>
Date: Tue 11/Mar/2003 16:20 GMT
To: <accessd at databaseadvisors.com>
Subject: RE: [AccessD] Opening Outlook if closed code not working

I ran into the same problem.  Here is the code from my IsOutlookOpen
module:

Option Compare Database
Option Explicit

Private bolOutlook As Boolean

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As Long, ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long

Declare Function GetWindowTextLength Lib "user32" _
    Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
    (ByVal hwnd As Long, ByVal lpString As String, _
    ByVal CCh As Long) As Long

Declare Function EnumWindows Lib "user32" _
    (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Function IsOutlookOpen() As Boolean
' This is the entry point that makes it happen
    EnumWindows AddressOf EnumWindowProc, 0
    IsOutlookOpen = bolOutlook
End Function

Public Function EnumWindowProc(ByVal hwnd As Long, _
    ByVal lParam As Long) As Long

    'Do stuff here with hwnd
    Dim sClass As String
    Dim sIDType As String
    Dim sTitle As String
    
    'Get the title to the window
    sTitle = GetWindowIdentification(hwnd, sIDType, sClass)
    
    'Check to see if it is an Outlook window
    If InStr(1, sTitle, "Microsoft Outlook") > 0 Then
        bolOutlook = True
        EnumWindowProc = False
    Else
        bolOutlook = False
        EnumWindowProc = True
    End If
End Function

Private Function GetWindowIdentification(ByVal hwnd As Long, _
  sIDType As String, sClass As String) As String

    Dim nSize As Long
    Dim sTitle As String
    
    'get the size of the string required
    'to hold the window title
    nSize = GetWindowTextLength(hwnd)
    
    'if the return is 0, there is no title
    If nSize > 0 Then
        sTitle = Space$(nSize + 1)
        Call GetWindowText(hwnd, sTitle, nSize + 1)
        sIDType = "title"
        sClass = Space$(64)
        Call GetClassName(hwnd, sClass, 64)
    Else
        'no title, so get the class name instead
        sTitle = Space$(64)
        Call GetClassName(hwnd, sTitle, 64)
        sClass = sTitle
        sIDType = "class"
    End If
    
    GetWindowIdentification = TrimNull(sTitle)
End Function

Private Function TrimNull(StartStr As String) As String
    Dim Pos As Integer
    
    Pos = InStr(StartStr, Chr$(0))
    If Pos Then
        TrimNull = LEFT(StartStr, Pos - 1)
        Exit Function
    End If
    
    'if this far, there was
    'no Chr$(0), so return the string
    TrimNull = StartStr
End Function

Doris Manning
Database Administrator
Hargrove Inc.
www.hargroveinc.com


-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com] On Behalf Of
paul.hartland at fsmail.net
Sent: Tuesday, March 11, 2003 09:22 AM
To: accessd at databaseadvisors.com; dba-vb at databaseadvisors.com
Subject: [AccessD] Opening Outlook if closed code not working


To all,

Can anyone see why the following code (VB6) would open Outlook even if it is
already open, I want a module that when I run my application, it checks to
see if Outlook is open if not open it......

Function OpenOutlook()
    Dim objOut As Object
    On Error Resume Next
    
    Set objOut = GetObject("Outlook.Application")
    
    If (Err <> 0) Then
        Dim strOpenOutlook
        strOpenOutlook = Shell("D:\PROGRAM FILES\MICROSOFT
OFFICE\OFFICE\OUTLOOK.EXE", vbMinimizedNoFocus)
    End If
End Function

Thanks in advance.

Paul

_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


________________________________________________________________________
__
Freeserve AnyTime - Go online whenever you want for just £6.99 a month for
your first 3 months, that's HALF PRICE! And then it's just £13.99 a month
after that.

For more information visit http://www.freeserve.com/time/ or call free on 
0800 970 8890


_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


________________________________________________________________________
__
Freeserve AnyTime - Go online whenever you want for just £6.99 a month for
your first 3 months, that's HALF PRICE! And then it's just £13.99 a month
after that.

For more information visit http://www.freeserve.com/time/ or call free on 
0800 970 8890


_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


________________________________________________________________________
__
Freeserve AnyTime - Go online whenever you want for just £6.99 a month for
your first 3 months, that's HALF PRICE! And then it's just £13.99 a month
after that.

For more information visit http://www.freeserve.com/time/ or call free on 
0800 970 8890


_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list