Autor Beitrag
Ares
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 128



BeitragVerfasst: Fr 26.02.10 11:22 
Hallo!

Ich will mir ein Outlook AddIn basteln mit dem ich verschiedene Aufgaben in Outlook automatisieren kann. Konkrete geht es um die automatische Erstellung von Terminen im Kalender. Ich bin soweit, dass das ganze recht gut funktioniert nur gibt Outlook an verschiedenen Stellen Meldungen aus, die ich dann noch manuell beantworten muss. Dies unterbricht natürlich die automatische Arbeit des AddIns. Vereinfacht gesagt sind dies z.B. Nachfragen bei Terminkollisionen, etc.

Ich habe recht lange versucht das Problem mit Outlook internen Mitteln zu umgehen. Meine Nachforschungen haben aber ergeben, dass es für diese speziellen Fälle wohl keine Lösung gibt. Mein nächster Ansatz wäre daher der Versuch die Anfragen vom AddIn automatisch bedienen zu lasse. Das AddIn soll also quasi merken wenn Outlook eine Meldung anzeigt, ggf. korrigierte Werte eintragen und das Fenster schließen. Das gleiche Vorgehen, dass ich manuell erledigt soll also vom AddIn übernommen werden.

Das ganze sollte theoretisch nicht allzu schwer sein. Da das Programm nur bei mir laufen muss kenne ich die betreffenden Meldungen sehr genau. Das AddIn muss also nicht auf viele verschiedene Meldungen und Informationen reagieren können, sondern nur in wenigen gut bekannten Fällen die immer gleichen Aktionen ausführen.

Soweit zur Theorie der Lösung. In der Praxis fehlt mir leider die Möglichkeit zu erkennen wann eine Meldung angezeigt wird und die Fähigkeit diese zu bedienen. Wie gesagt bietet Outlook keine Events oder andere Funktionen an, um im Konkreten Fall die Meldungen zu erkenne. Gibt es die Möglichkeit über Windows benachrichtigt zu werden, wenn ein neues Fenster angezeigt wird? Dann könnte ich z.B. über den Fenstertitel oder andere Eigenschaften abfragen, ob es sich um meine gesuchte Outlook-Meldung handelt...

Der nächste Schritt wäre dann, dass ich das Fenster bedienen müsste. Also z.B. ein Edit-Feld auswählen, einen Wert eintragen, etc. Gibt es für so etwas Funktionen?

Besten Dank
Ares
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Fr 26.02.10 12:25 
user profile iconAres hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es die Möglichkeit über Windows benachrichtigt zu werden, wenn ein neues Fenster angezeigt wird?


Ja, verwende einen lokalen CBT Hook in deinem Plugin, und reagiere wenn neues Fenster erscheint (Fenstertitel Auswerten etc.)

Anbei Template der wichtigsten Fensterereignisse.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function CBTProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT stdcall;
begin
        if Code = HCBT_ACTIVATE     then Msg := WM_HCBT_ACTIVATE     else
        if Code = HCBT_CLICKSKIPPED then Msg := WM_HCBT_CLICKSKIPPED else
        if Code = HCBT_CREATEWND    then Msg := WM_HCBT_CREATEWND    else
        if Code = HCBT_DESTROYWND   then Msg := WM_HCBT_DESTROYWND   else
        if Code = HCBT_KEYSKIPPED   then Msg := WM_HCBT_KEYSKIPPED   else
        if Code = HCBT_MINMAX       then Msg := WM_HCBT_MINMAX       else
        if Code = HCBT_MOVESIZE     then Msg := WM_HCBT_MOVESIZE     else
        if Code = HCBT_QS           then Msg := WM_HCBT_QS           else
        if Code = HCBT_SETFOCUS     then Msg := WM_HCBT_SETFOCUS     else
        if Code = HCBT_SYSCOMMAND   then Msg := WM_HCBT_SYSCOMMAND;
        if Code = HCBT_CREATEWND  then begin
        Result := CallNextHookEx(hHook, Code, wParam, lParam);
end;


lg. Astat