2

Outlook 2010 では、outlook プロファイルを以下に設定しました:- HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows Messaging Subsystem\\Profiles.

Outlook 2013 の同様の場所は次のとおりHKCU\\Software\\Microsoft\\Office\\15.0\\Outlook\\Profilesです。

私のプログラムでは、最初に 2013 プロファイルを探し、例外を取得して 2010 プロファイルの場所を探します。

ただし、Outlook が 2010 にダウングレードされている場合、これは失敗します。Outlook 2013 のレジストリ キーは同じ場所にあるためです。

これに関する提案。おそらく、最初に正しいバージョンの Outlook をインストールしてから、try....except....ブロックを使用するのではなく、正しいキーを検索できれば?

主に、Outlook に添付されているすべての pst ファイルを一覧表示したいと考えています。

4

2 に答える 2

3

PST ファイルの場所は、レジストリのプロファイル セクションに保存されます。プロファイル データにアクセスして操作するために設計された、公式にサポートされている API はIProfAdminインターフェイスです ( [IProfAdmin] ボタンをクリックすると、OutlookSpy で操作できます) PST パスはPR_PST_PATHプロパティに格納されます。拡張 MAPI には、C++ または Delphi からのみアクセスできます。

ProfManを使用できます(配布可能なバージョンのRedemptionに付属しています)。ProfMan はどの言語からでも使用できます。次のスクリプト (VB) は、すべてのローカル プロファイルから PST ファイル名を取得します。

'Print the path to all the PST files in all profiles
 PR_PST_PATH = &H6700001E

 set Profiles=CreateObject("ProfMan.Profiles")
 for i = 1 to Profiles.Count
   set Profile = Profiles.Item(i)
   set Services = Profile.Services
   Debug.Print "------ Profile: " & Profile.Name & " ------"
   for j = 1 to Services.Count
     set Service = Services.Item(j)
     If (Service.ServiceName = "MSPST MS") or (Service.ServiceName = "MSUPST MS") Then
      MsgBox Service.Providers.Item(1).ProfSect.Item(PR_PST_PATH)
     End If
   next
 next

Outlook オブジェクト モデルを使用して PST ストアから PST ファイル名を取得することもできます (ただし、これには Outlook が実行されている必要があり、現在使用されているプロファイルに対してのみ実行できます)。次のStore.FilePathプロパティを使用します。

set vApp = CreateObject("Outlook.Application")
for each vStore in vApp.Session.Stores
  MsgBox vStore.DisplayName & " - " & vStore.FilePath
next
于 2015-09-05T21:37:15.527 に答える