web-dev-qa-db-ja.com

Windowsレジストリでは、ProgrammaticAccessOnly文字列値とは何ですか?どのように機能しますか?

これは これ からのフォローアップの質問です。その回答で示されているように、ProgrammaticAccessOnlyを使用すると、基になる機能や関連する機能を無効にすることなく、特定のコンテキストメニュー項目を非表示にできます。

このように、LegacyDisableよりも破壊的でない方法でレジストリ関数を無効にするために使用できるという点で、 LegacyDisable 文字列値に類似しているように見えます。

ただし、他の多くのレジストリ値とデータのペアと同様に、Microsoftまたは他の信頼できるソースから、値とその動作の正確さに関する実際のドキュメントを入手するのは困難です。異なるフォーラム投稿の外で私が見つけることができたのは、次のとおりです ここのチュートリアル

ProgrammaticAccessOnlyは、コンテキストメニューエントリを非表示にするが、必要に応じてプログラムがそれにアクセスできるようにする特別な値です。

これは包括的ではなく、値の範囲がコンテキストメニューに限定されているとは思えません。例えば、 ProgrammaticAccessOnly=Apartmentの詳細は ここでは少なくとも1回 であり、その機能や他のデータ型の説明はありません。

レジストリのProgrammaticAccessOnly文字列値はどの程度正確に機能しますか? LegacyDisableで常に使用する際の注意点はありますか?また、それで使用できるすべての可能なデータ型のリストは何ですか?

6
Hashim

LegacyDisable についてのあなたの投稿に回答しましたが、この件についてある程度の知識があります。この投稿には答えがないので、私の答えは満足のいくものではないかもしれませんが、私は試してみます。

これらのレジストリ項目の問題は、文書化されていないことです。 Windowsの新しいバージョンごとに、いくつかが追加されたり、無効になったりする場合があります。それらは文書化されていないため、Microsoftは好きなように自由に変更できるようにしています。そのため、それらがまだ機能するかどうかを確認する負担はユーザーにあります。

これらのアイテムに関する情報は、あらゆる種類の非公式チャネルでMicrosoftから提供されます。 SDKサンプルまたはMSDNにある場合もあれば、Microsoftエンジニアによるフォーラムの回答にある場合もあります。また、Microsoftエンジニアに特権アクセスしたMicrosoftのクライアントからのものもあります。

記事でそのようなすべての既知の項目のリストを編集した1人の人を見つけました ファイルタイプ登録 、それぞれに説明とドキュメントへのリンクがあります。当然のことながら、ほとんどのアイテムにはドキュメントへのリンクがありません。

ProgrammaticAccessOnlyに関しては、この記事には「IContextMenu列挙から動詞を削除しますか?」とだけ書かれていますが、ドキュメントへのリンクはありません。

グーグルで検索して、私は Winaeroの記事 を見つけました:

ProgrammaticAccessOnlyが主なトリックを実行します。これは、Windowsエクスプローラーシェルに、ソフトウェアによってプログラムでのみコンテキストメニュー項目にアクセスできることを通知する特別なパラメーターです。ユーザーインターフェイスがロックダウンされるため、コマンドがコンテキストメニューから消えます。

一緒に、これらの特別なレジストリ項目は IContextMenuインターフェイス によって認識されるようです。

Shellオブジェクトに関連付けられたショートカットメニューを作成またはマージするメソッドを公開します。

IContextMenuインターフェイスは、主にWindowsエクスプローラーで使用されるシェル拡張ハンドラーによってエクスポートされます。

要約すると、ProgrammaticAccessOnlyが存在すると、シェル列挙型はシェルアイテムを無視しますが、プログラムはIContextMenuインターフェイスを介して、またはレジストリを変更することにより、シェルアイテムを直接参照および更新できます。

5
harrymc