Windows Mail a Internet Explorer 9


2011-03-22

Osoby, które korzystają z Windows Mail (Poczta systemu Windows), zauważyły pewne problemy po instalacji Internet Explorera 9. Generalnie są one trzy:
- podczas edycji i wyświetlania wiadomości HTML często ustawia się nieprawidłowa czcionka, konkretniej w tych wiadomościach, które są w czystym tekście, albo w kodzie HTML nie mają określonej czcionki
- na pasku nagłówka okienka podglądu też jest problem z czcionką, wszystkie napisy są rysowane czcionką System; problem nie występuje jeśli włączymy w opcjach czytanie wszystkich wiadomości w postaci czystego tekstu
- jeśli wiadomość posiada załącznik, nie ma ikonki spinacza na pasku nagłówka okienka podglądu

Przyczyną tych problemów jest to, że nowy silnik IE, z którego korzysta Windows Mail, przestał wywoływać funkcje inicjalizujące powyższe elementy. W przypadku poprzednich wersji Internet Explorera, umieszczony w Windows Mail silnik IE wołał metodę z biblioteki inetcomm.dll (składnika WM). Była to metoda implementująca interfejs IDocHostUIHandler::GetOptionKeyPath. Służyła ona do tego, aby osadzony w WM silnik IE korzystał ze zdefiniowanych w ustawieniach WM czcionek, a nie z czcionek ustawionych dla IE. W tym celu ta metoda zwracała klucz rejestru zawierający ustawienia czcionek Windows Mail. Dzięki temu silnik IE ładował ustawienia czcionek Windows Mail a nie Internet Explorera. Wraz z IE9 silnik IE przestał wywoływać wspomnianą funkcję, przez co wiadomości e-mail wyświetlane są zgodnie z ustawieniami czcionek w Internet Explorerze (Narzędzia -> Opcje internetowe -> Czcionki). Sposobem więc obejścia tego problemu jest ustawienie w IE takich czcionek, jakie były w WM. Nie wpłynie to na strony internetowe, ponieważ mają one praktycznie zawsze określone czcionki i czcionki domyślne nie są używane.

Tak się składa, że funkcja zwracająca klucz rejestru dla silnika IE, odpowiada też przy okazji za inicjalizację pamięci podręcznej czcionek w Windows Mail. Ponieważ funkcja ta nie jest wołana, to cache czcionek jest pusty i nagłówek okienka podglądu jest wyświetlany domyślną czcionką System, która nie wygląda zbyt estetycznie.

Co do przycisku z ikonką załącznika, to wyświetlany jest on, gdy silnik IE wyśle komunikat IDM_PARSECOMPLETE wołając z biblioteki inetcomm.dll metodę implementującą interfejs IOleCommandTarget::Exec. Jednak w przypadku IE9 silnik IE nie wysyła tego komunikatu i w konsekwencji ikonka załącznika nie jest wyświetlana.

Opisane problemy z nagłówkiem okienka podglądu nie występują gdy włączone jest czytanie wszystkich wiadomości w trybie zwykłego tekstu. W tym przypadku wiadomości nie są wyświetlane za pomocą kontrolki Internet Explorera a RichEdit32, która ma własne ustawienia czcionek. Ponadto w tym trybie jest w inny sposób wyświetlany pasek nagłówka, siłą rzeczy niezależny od silnika IE i realizujący swoje funkcje niezależnie. Dlatego też wyświetla się prawidłowo.

Kilka informacji uzupełniających. inetcomm.dll to składnik Outlook Express/Windows Mail, który z jakiegoś powodu nie leży w katalogu program a w Windows\System32. Pewnie dlatego, że oferuje obiekty COM, takie jak IMimeMessage, które mogą być używane także przez inne programy. Silnik Internet Explorera to biblioteka mshtml.dll, która może być używana w innych programach niż sama przeglądarka. Dzięki niej programiści mogą łatwo dodawać w swoim programach funkcję wyświetlania stron internetowych (czy ogólniej treści HTML). Silnik IE udostępniany jest do łatwego wykorzystania w postaci kontrolki WebBrowser. Skorzystali z tego też programiści Outlook Express/Windows Mail. Aplikacja, w której osadzona jest kontrolka IE nazywana jest hostem. Host może sterować kontrolką IE, np. wywołując metodę ładującą podany adres internetowy. Kontrolka może też komunikować się z hostem przez odpowiednie interfejsy. To właśnie problemy z tą komunikacją zwrotną zawiodły na styku silnika IE w wersji 9 oraz Windows Mail. Więcej informacji na ten temat można znaleźć na stronie WebBrowser Customization.

Copyright(C) Grzegorz Niemirowski 2006-2012