内気なもんた君

時々日本語化してます

"ProgrammaticAccessOnly"と"LegacyDisable" の違い

"ProgrammaticAccessOnly"と"LegacyDisable" の違い

 

コンテキストメニュー項目を非表示、または無効化する方法として、

"ProgrammaticAccessOnly","LegacyDisable"を値として追加する方法がありますが、

これらの違いを分かりやすく? 解説。

 

ProgrammaticAccessOnly

主な機能 : コンテキストメニューから項目を「隠す」。
プログラムからのアクセス : 許可する。アプリからはプログラム的にアクセス可能。

影響の強さ : 低い。「非表示」に近い動作。

適した用途 : UIをすっきりさせたいが、アプリからの機能呼び出しは残したい場合。

 

詳細

  • この値が設定されていると、Windowsはその項目をユーザーインターフェース(UI)上の列挙から除外します。つまり、右クリックメニューに表示されなくなります。
  • しかし、WindowsのIContextMenuインターフェースを通じてプログラムが直接その項目を呼び出すことは妨げません。そのため、ソフトウェアから内部的にその機能を使用する必要がある場合に適しています。

 

LegacyDisable

主な機能 : コンテキストメニュー項目を「無効にする」。

プログラムからのアクセス : 許可しない。事実上、完全に機能を停止させる。

影響の強さ : 高い。「無効化」に近い動作。

適した用途 : 特定の機能を完全にオフにし、一切使用させたくない場合。

 

詳細

  • DLL ベースの COM シェル拡張 (IContextMenu 実装) を無効化するための仕組み。
  • Windows Shell が LegacyDisable の存在を検出すると、そのハンドラーをロードしない。

 

- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -

⚠️ どちらにするか迷った場合は、とりあえず "ProgrammaticAccessOnly" にしておくのが無難かと思う。