Entwickler-Ecke
Windows API - Event wenn fremdes Fenster erscheint
Ares - Fr 26.02.10 11:22
Titel: Event wenn fremdes Fenster erscheint
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 - Fr 26.02.10 12:25
Ares hat folgendes geschrieben : |
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.
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!