OLKeeper | |
Der OLKeeper verhindert zuverlässig, dass Sie Microsoft Outlook unbeabsichtigt schlieÃen und so etwa wichtige Emails verpassen würden. |
Mithilfe der Win32 API können Sie den Fokus oder den Cursor auf beliebige Steuerelemente setzen, die das unterstützen. Sie müssen nur die Struktur des Fensteraufbaus kennen. Ermitteln können Sie die mit Hilfsprogrammen wie 'Spy++'. In diesem Beispiel für Outlook 2000 und 2003 setzen wir den Cursor in das Textfeld einer geöffneten E-Mail.
Fügen Sie dem Projekt ein neues Modul über Einfügen/Modul hinzu und fügen Sie dort den Code ein. AuÃerdem wird diese Funktion benötigt: Outlookversion ermitteln
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 Select Case GetOutlookVersion Case 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 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
ReplyAll | |
Mit diesem Addin für Outlook erhalten Sie in verschiedenen Situationen eine Warnung, bevor Sie auf eine Email versehentlich allen anderen Empfängern antworten. |