2016-11-25 12 views
1

私は1つのOutlookアドインを開発しました。これはOnまたはOffでなければなりません。以下に示すように、私は、それが機能しているVSTOアドインにいくつかのデータを保存する最も良い方法は何ですか?

ThisAddIn.cs

public static bool isAddInOn = false; 

RibbonButton.cs

private void btnRibbon_Click(object sender, RibbonControlEventArgs e) 
    { 
     if (ThisAddIn.isAddInOn) 
     { 

      ThisAddIn.isAddInOn = false; 
      btnRibbon.Label = "Disabled"; 

     } 
     else 
     { 

      ThisAddIn.isAddInOn = true; 
      btnRibbon.Label = "Enabled"; 


     } 
    } 

を1つの静的変数を宣言していることを行うには

。しかし、私はOutlookを閉じて再び開いて静的変数をリセットします。つまり、デフォルトでOutlookを開くと、アドインは無効な状態になります。

私はただその値をいくつかの場所に保存したいだけです。見通しが再開されたら、その価値を確認することができます。

シナリオ:

1)オープンの見通し

2))

3(つまり、リボンである)アドインがそのロゴをクリックして有効になりまし見通しを閉じる

4)見通しをもう一度開いたときに有効にする必要があります

どうすればいいですか?

答えて

0

設定受信トレイやカレンダーフォルダなどのフォルダに隠れた(関連付けられた)アイテムとして格納することができます。たとえば、Outlookは、カレンダーフォルダにカテゴリの一覧を隠しアイテムとして格納します。 POP3メッセージIDは、受信トレイの隠しアイテムに格納されます。隠しアイテムの利点はローミング機能です.Exchangeメールボックスユーザーはどのコンピュータからでもデータを見ることができます。

OutlookSpyに隠しアイテムが表示されます。[IMAPIFolder]ボタンをクリックし、[関連するコンテンツ]タブに移動します。

プログラムでは、OutlookオブジェクトモデルでMAPIFolder.GetStorageを使用してアクセスできます。

2

この結果を得るために使用できるテクニックはいくつかあります。アドインの起動時には、設定をいくつかのストレージに直列化する/デシリアライズする必要があります。可能な解決策の一つは、おそらくHKCU(現在のユーザー(この場合、そのために、レジストリを使用することができ

、それはあなたのアドインを使用して、ユーザーごとにプライベートになります)と特別な許可は必要ありません。

変数を読み取るため

public void StoreInRegistry(string keyName, string value) 
    { 
     RegistryKey rootKey = Registry.CurrentUser; 
     string registryPath = @"Software\YourCompanyName\YourAddInName"; 
     using (RegistryKey rk = rootKey.CreateSubKey(registryPath)) 
     { 
      rk.SetValue(keyName, value, RegistryValueKind.String); 
     } 
    } 

public string ReadFromRegistry(string keyName, string defaultValue) 
    { 
     RegistryKey rootKey = Registry.CurrentUser; 
     string registryPath = @"Software\YourCompanyName\YourAddInName"; 
     using (RegistryKey rk = rootKey.OpenSubKey(registryPath, false)) 
     { 
      if (rk == null) 
      { 
       return defaultValue; 
      } 

      var res = rk.GetValue(keyName, defaultValue); 
      if (res == null) 
      { 
       return defaultValue; 
      } 

      return res.ToString(); 
     } 
    } 

このような保存された/取得変数Yを設定するために、アドインの初期化中に使用されるべき変数を格納するための私たちの特性。だから、変更は次のようになります。

public static bool isAddInOn = ReadFromRegistry("MySetting1", "0") == "1"; 

RibbonButton.cs

ThisAddin.csファイルにシリアライズでき

private void btnRibbon_Click(object sender, RibbonControlEventArgs e) 
{ 
    if (ThisAddIn.isAddInOn) 
    { 

     ThisAddIn.isAddInOn = false; 
     btnRibbon.Label = "Disabled"; 

    } 
    else 
    { 

     ThisAddIn.isAddInOn = true; 
     btnRibbon.Label = "Enabled"; 


    } 
    StoreInRegistry("MySetting1", ThisAddIn.isAddInOn ? "1" : "0"); 
} 

その他のオプション - 分離ストレージ、すなわちする連載の設定でいくつかのクラス、データベース(ローカルまたは中央)など

+0

提案をいただきありがとうございます。ユーザーに管理者権限がない場合はどうなりますか?レジストリを変更することはまだ可能でしょうか? –

+1

特定のキーに対する権限が明示的にリセットされていない限り、ユーザーは常にHKCUのキーに対してr/w権限を持ちます(HKLMとは異なります)。 –

関連する問題