Awarded by
Microsoft:E-Mail: Fokus aufs Nachrichten-Textfeld setzen</h1Autor: Michael BauerHomepageDatum: 30.01.2006Zugriffe: 14401 Beschreibung
Sie können nicht über das Outlook Objektmodell den Fokus auf bestimmte Steuerelemente setzen.
Das folgende Beispiel demonstriert für Outlook 2000 und 2003,
Pandora Jewelry Sale, wie mithilfe einiger Funktionen aus dem Win32 API der Fokus auf das Textfeld einer geöffneten E-Mail gesetzt werden kann. RTF formatierte Mails werden nicht berücksichtigt.
' <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,
Tiffany Silver Jewelry, "AfxWnd") If lRes Then lRes = GetWindow(lRes,
Tiffany Jewelry Sale, 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,
Tiffany Blue, 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,
Tiffany Crystal, "AfxWndA") If lRes Then lRes = FindChildClassName(lRes,
Tiffany Armreif,
WHFoods Oranges, "AfxWndW") If lRes Then ' plain lHnd = FindChildClassName(lRes,
Tiffany Crystal, "RichEdit20W") If lHnd = 0 Then ' hmtl lHnd = FindChildClassName(lRes,
Tiffany Diamond Earrings, "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>