2004-11-18 [長年日記]

Outlookのアドレス帳にアクセス (4)

MAPIでOutlookのアドレス帳にアクセスしようとすると、MAPIInitializeを呼び出した時点で、「デフォルトのメールクライアントが設定されていないか、現在のメールクライアントがメールを受け取れない状態にあります。Microsoft Outlook を起動して、デフォルトのメールクライアントに指定してください。」という警告のメッセージが表示されます。これは、転記さん:Outlookにまつわるトラブルによると、HKLM/Software/Clients/Mail/PreFirstRunをリネームすると出なくなるようです。

しかし、使用するMAPIプロバイダはデフォルトのメールクライアントと一緒に切り替わるらしく、Outlook以外のメーラをデフォルトにしておくと、そもそもプロファイルの選択でOutlookがでてきません。HKLM/Software/Clients/Mail/(デフォルトのメールクライアント名)/DLLPathExにOutlookのMAPIプロバイダのパス*1を書いておくと使えるようになりますがいまいちです。

残る方法としては、OOMを使ってMAPIFolderからItemのリストを取り出したときに、hiddenプロパティであるRawTableを使ってIMAPIContainerを取り出してを使うとか、ContactItemやDistListItemのhiddenプロパティのMAPIOBJECTを使ってIMailUserやIDistListを取り出して、そこから先はMAPIのインターフェイスを使ってアクセスするという方法がありそうです*2

特殊および一般相対性理論について

以前から読みたいと思っていたものの、前の版は絶版で手に入らなかったのですが、新装版になって復活したようです。

Windows XPのようこそ画面に新着メール数を出す

実はようこそ画面は使った事がないのですが、SHSetUnreadMailCountを使うと設定できるようです。

Microsoft Windows XP Fast User Switching: Design Guide for Building Business Applicationsなんてのも。

Outlookのアドレス帳にアクセス (5)

OOMのオブジェクトからMAPIのIMAPIPropを取り出す方法の場合でも、最初にMAPIInitializeしておかなくてはいけませんでした*3。MAPIをサポートしていないメールクライアントがデフォルトの場合には、MAPIInitializeがエラーになるので結局うまく行きません。

というわけで、デフォルトのメールクライアントの設定に関わらずOutlookのアドレス帳からダイアログを表示させずにメールアドレスを取り出す方法はないのかも。

*1  例えば、C:\Program Files\Common Files\System\Mapi\1041\msmapi32.dll

*2  でも面倒

*3  呼び出していないと最初にMAPIインターフェイスを取り出した時点で勝手に呼び出されます

[]