StartDownloadsServiceSamplesWorkshopsContact DeutschEnglish
 
Samples
General
Outlook®
 
Awarded by
Microsoft since 2005:
mvp logo
VBOffice Info
Visitors1805357
Impressions6762087
Links
Imprint
Privacy Policy
Contact
E-Mail: Set focus to the body
Author: Michael BauerHomepage
Date: 30.01.2006Accessed: 25455
  
Description

Via the Outlook object model you cannot set the focus to a specific control. This sample (Outlook 2000 and 2003) demonstrates how to use the Win32 API to set the focus to the body of an opened e-mail.

RTF formatted e-mails are being ignored (but it would be possible as well).

' <modBodyFocus.bas>
Option Explicit

Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "USER32" Alias "GetClassNameA" _
  (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindow Lib "USER32" (ByVal hwnd _
  As Long, ByVal wCmd As Long) As Long
Private Declare Function SetForegroundWindow Lib "USER32" _
  (ByVal hwnd As Long) As Long

Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2

Public Function SetFocusOnBody(sInspectorCaption As String) As Boolean
  Dim lHwnd As Long

  lHwnd = GetInspectorHandle(sInspectorCaption)
  lHwnd = GetBodyHandle(lHwnd)
  If lHwnd Then
    SetFocusOnBody = CBool(SetForegroundWindow(lHwnd))
  End If
End Function

Private Function FindChildClassName(ByVal lHwnd As Long, _
  sFindName As String _
) As Long
  Dim lRes As Long

  lRes = GetWindow(lHwnd, GW_CHILD)
  If lRes Then
    Do
      If GetClassNameEx(lRes) = sFindName Then
        FindChildClassName = lRes
        Exit Function
      End If
      lRes = GetWindow(lRes, GW_HWNDNEXT)
    Loop While lRes <> 0
  End If
End Function

Private Function GetBodyHandle(ByVal lInspectorHwnd As Long) As Long
  Dim lRes As Long
  Dim lHnd As Long

  DetermineOutlookVersion Application

  Select Case OutlookVersion
  Case olVersion_9
    lRes = FindChildClassName(lInspectorHwnd, "AfxWnd")
    If lRes Then
      lRes = GetWindow(lRes, GW_CHILD)
      If lRes Then
        lRes = FindChildClassName(lRes, "AfxWnd")
        If lRes Then
          lRes = GetWindow(lRes, GW_CHILD)
          If lRes Then
            ' plain/text: ClassName="RichEdit20A", html: ClassName="Internet Explorer_Server"
            GetBodyHandle = GetWindow(lRes, GW_CHILD)
          End If
        End If
      End If
    End If

  Case olVersion_11
    lRes = FindChildClassName(lInspectorHwnd, "AfxWndW")
    If lRes Then
      lRes = GetWindow(lRes, GW_CHILD)
      If lRes Then
        lRes = FindChildClassName(lRes, "AfxWndA")
        If lRes Then
          lRes = FindChildClassName(lRes, "AfxWndW")
          If lRes Then
            ' plain
            lHnd = FindChildClassName(lRes, "RichEdit20W")
            If lHnd = 0 Then
              ' hmtl
              lHnd = FindChildClassName(lRes, "Internet Explorer_Server")
            End If
            GetBodyHandle = lHnd
          End If
        End If
      End If
    End If
  End Select
End Function

Private Function GetClassNameEx(ByVal lHwnd As Long) As String
  Dim lRes As Long
  Dim sBuffer As String * 256
  lRes = GetClassName(lHwnd, sBuffer, 256)
  If lRes <> 0 Then
    GetClassNameEx = left$(sBuffer, lRes)
  End If
End Function

Private Function GetInspectorHandle(ByVal sCaption As String) As Long
  GetInspectorHandle = FindWindow("rctrl_renwnd32", sCaption)
End Function
' </modBodyFocus.bas>

 
 

ReplyAll alerts you before unintentionally replying all, or if you are a confidential BCC recipient of the ... [more]

 

Access the master category list in the blink of an eye, share your categories in a network, get a reminder service, and ... [more]

 

SAM automatically sets the sender, signature, and folder for sent items, for instance based on the recipient ... [more]

 

OLKeeper reliably prevents users from closing their Outlook window and thus possibly missing reminders or ... [more]