2009-05-13 41 views
1

プログラムのPSTファイルを人のOutlookプロファイルに追加したいと思います。私はここにいくつかのコードが見つかりました:Outlookには、どのPSTファイルがマウントされていますか?

http://www.eggheadcafe.com/community/aspnet/65/10030171/try-this-code.aspx

それはトリックを行いますが、それはまだ疑問葉 - 「見通しが取り付けられたPSTファイルのリストを保持しませんの?」それはレジストリにありますか?設定ファイルはどこかにありますか?誰ですか?

答えて

1

これはバージョン間で変更される内部実装の詳細です。

+2

ユニコードの名前です...そしてあなたの代わりに周り掘りの、取り付けられたPSTファイルのリストを取得するためのAPI呼び出しを使用する必要がありますOutlookのメカニズムで –

+0

Touche - 私はそうだと思うし、私はAPIを使用する必要があります。私はPSTファイルをリストし、すべてを切り離し、ファイルを新しい場所に移動して、新しいファイルを添付するツールを書くことで、私の問題を解決すると思います。 本当にありがとうございます。 – SqlRyan

-1

ところで、それはレジストリにあります。

1

このコード(現在のプロジェクトの)は、Unicode &非Unicode PSTファイルの名前とパスを検索してデコードします。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Outlook = Microsoft.Office.Interop.Outlook; 
using Microsoft.Win32; 

namespace PSTRemoval_v2 
{ 
    class PSTRReg 
    { 
     public RegistryKey regOPs, regPR, regCU, regCP, regCC; 

     public Dictionary<string, string> OpenPSTs = new Dictionary<string, string>(); 

     public Dictionary<string, string> ClosedPSTs = new Dictionary<string, string>(); 

     public Dictionary<string, string> PurgedPSTs = new Dictionary<string, string>(); 

     public void ValidRegEntries(Outlook.Application olApp) 
     { 
      string prf = olApp.Session.CurrentProfileName; // retrieve current Outlook profile name. Needed in case user has multiple profiles 

      regCU = Registry.CurrentUser; 

      regOPs = regCU.CreateSubKey(String.Format(@"Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\{0}",prf)); 

      regPR = regCU.CreateSubKey(String.Format(@"Software\WRT\OutlookAddins\PSTRemoval\{0}", prf)); // create a subkey in the registry for this profile 

      regCC = regPR.CreateSubKey(@"ClosedPSTs"); 
      regCP = regPR.CreateSubKey(@"PurgedPSTs"); 
     } 

     public void OpenPSTs_REG_Read() 
     { 
      PSTRNet regnet = new PSTRNet(); 
      regnet.EnumerateNetworkDrives(); 

      string[] sk = regOPs.GetSubKeyNames(); 
      foreach (string subkey in sk) 
      { 
       RegistryKey rk2 = regOPs.OpenSubKey(subkey); 
       if (rk2.ValueCount > 0) 
       { 
        string[] vn = rk2.GetValueNames(); 
        Array.Sort(vn); 

        int bs = Array.BinarySearch(vn, "001f3001"); // search for the PST Name 
        int bs1 = Array.BinarySearch(vn, "001f3006"); // PST Name alternative 
        if ((bs > -1) || (bs1 > -1)) 
        { 
         int bs2 = Array.BinarySearch(vn, "001f6700"); // search for the PST Path 
         if (bs2 > -1) 
         { 
          // decode the Name & Path to text strings 
          string PSTName; 
          try { PSTName = decode(vn[bs], rk2); } 
          catch { PSTName = decode(vn[bs1], rk2); } 
          string PSTPath = decode(vn[bs2], rk2); 

          if (regnet.PSTOnNet(PSTPath)) // add the PST to the list if it is on a network drive 
          { 
           try 
           { 
            OpenPSTs.Add(PSTPath, PSTName); 
           } 
           catch { } 
           regOPs.DeleteSubKey(subkey); // then delete the entry from the main part of the registry 
          } 
         } 
        } 
       } 
      } 
     } 

     public void PSTs_REG_Read(RegistryKey regkey, Dictionary<string, string> entries) 
     { 
      string[] RK = regkey.GetValueNames(); 
      if (RK.Length > 0) 
       foreach (string ValueName in RK) 
        try { entries.Add(ValueName, regkey.GetValue(ValueName).ToString()); } 
        catch { } 
     } 

     public void PSTs_Reg_write(RegistryKey regKey, Dictionary<string, string> entries) 
     { 
      string[] RK_Delete = regKey.GetValueNames(); 
      if (RK_Delete.Length > 0) 
       foreach (string ValueName in RK_Delete) 
        regKey.DeleteValue(ValueName); 

      foreach (KeyValuePair<string, string> kvp in entries) 
       regKey.SetValue(kvp.Key, kvp.Value); 
     } 

     private string decode(string value, RegistryKey rk) // decode registry entries from Unicode to plain text 
     { 
      byte[] b = (byte[])rk.GetValue(value); 


     return Encoding.Unicode.GetString(b); 
      } 
     } 
    } 
} 

レジストリエントリはSoftware\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<ProfileName>

001f301はPST

関連する問題