C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

Windows11の右クリック時のコンテキストメニューについ /くま (24/03/27(Wed) 11:27) #103031
Re[1]: Windows11の右クリック時のコンテキストメニューについ /とっちゃん (24/03/30(Sat) 14:48) #103032
  └ Re[2]: Windows11の右クリック時のコンテキストメニューについ /くま (24/03/30(Sat) 16:05) #103033 解決済み


親記事 / ▼[ 103032 ]
■103031 / 親階層)  Windows11の右クリック時のコンテキストメニューについ
□投稿者/ くま (26回)-(2024/03/27(Wed) 11:27:51)

分類:[.NET 全般] 

OS:Windows11 64bit版
言語:C# .NET Framework 4.8.1

現在 Windows11の右クリック時のプロパティで「詳細」がすぐ表示されるソフトを作りました
そこで「Windows11」に対して「Custom Context Menu」というソフトを使用してコンテキストメニューに登録したのですが
他のソフトと設定が被ると一つのメニューに統合されてしまい結局階層になってしまいました。
どうも調べてみると
・1ソフトでコンテキストメニュー追加できる項目は1つまで
というOS上の制限があるようなので、
それなら実装してみようかと思ったのですが

Windows 11 でアプリをすぐれたものにするためにできることトップ 11
https://learn.microsoft.com/ja-jp/windows/apps/get-started/make-apps-great-for-windows
・IExplorerCommand インターフェイスを使用して実装する必要があります。
・アプリは "パッケージ化アプリ" である必要があります。
とあるのですがサンプル等情報が見つけられず困っています。

そこで質問なのですが
a.IExplorerCommandインターフェイス実装はC#で実装可能でしょうか?
できればサンプルがあれば助かります。

b."パッケージ化アプリ"について
アプリにパッケージIDを付けるという事はわかったのですが
調べていると
・Windows11を開発モードにしないと動かない
・Windowsストアアプリに登録しないと動かない
などの情報もあり困惑しています。

また検索はしているのですが全然Hitしなく情報の真偽も確認できない状態です。
この辺り「こういう知識が必要」「この様な制限があります」「こんな手順を行えば登録できます」等情報をいただけたら助かります。
よろしくお願いします。

※今後の事も考えてWindows10形式のコンテキストメニューに戻す事は考えていません
[ □ Tree ] 返信 編集キー/

▲[ 103031 ] / ▼[ 103033 ]
■103032 / 1階層)  Re[1]: Windows11の右クリック時のコンテキストメニューについ
□投稿者/ とっちゃん (818回)-(2024/03/30(Sat) 14:48:31)
No103031 (くま さん) に返信

> a.IExplorerCommandインターフェイス実装はC#で実装可能でしょうか?
> できればサンプルがあれば助かります。
>
実装の可否だけで言えば、不可能ではないと思います。
「が」
IExplorerCommand はインプロセスのCOMサーバーなので、
相手先(エクスプローラとは限りません)のプロセス内で利用されます。

そのため、仮に作成可能だったとしても、C#で作るのはお勧めしません。
最低でも、C++ で作成することをお勧めします。

最悪の組み合わせの場合マシンが起動しなくなる(正確にはログイン後シェルがクラッシュして
そのまま何もできない状態になる)可能性があります。
セーフモードで復帰できればいいですが、最悪それもできず、フォーマットしか
回避策がないなんてことにもなりかねませんので。


> b."パッケージ化アプリ"について
> アプリにパッケージIDを付けるという事はわかったのですが
> 調べていると
> ・Windows11を開発モードにしないと動かない
> ・Windowsストアアプリに登録しないと動かない
> などの情報もあり困惑しています。

こちら、「パッケージID」を発行してもらうために
Windows デベロッパー センターに
アプリを登録する必要があります(実際にストアに載せる必要はない)。

ただ、IExplorerCommand は、Native DLL として作ることになるので
開発者モードにしていなくても動かすことはできるかもしれません。
こちらは、パッケージIDをモジュールにどういう形で埋め込まないといけないかで
変わってくるのでちょっとわからないです(このために作ってみたなどはしていないので)。

> この辺り「こういう知識が必要」「この様な制限があります」「こんな手順を行えば登録できます」等情報をいただけたら助かります。

最低限の知識として、COM(Component Object Model)に関する諸情報は必須です。
また、Shell拡張の特にコンテキストメニュー関係の知識も重要です。
先にも書いていますが、エクスプローラ(正確にはこのメニューを表示するアプリケーション)の
プロセス内で動くため、.NET の利用は避けたほうがいいでしょう。


一応リンク(一次リソース)も上げておきます。

・Windows デベロッパー センター
https://developer.microsoft.com/ja-jp/windows/?WT.mc_id=DT-MVP-32182
・コンポーネント オブジェクト モデル (COM)
https://learn.microsoft.com/ja-jp/windows/win32/com/component-object-model--com--portal
・シェル拡張機能の使用
https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-exts?WT.mc_id=DT-MVP-32182

[ 親 103031 / □ Tree ] 返信 編集キー/

▲[ 103032 ] / 返信無し
■103033 / 2階層)  Re[2]: Windows11の右クリック時のコンテキストメニューについ
□投稿者/ くま (27回)-(2024/03/30(Sat) 16:05:28)
No103032 (とっちゃん さん) に返信

情報提供ありがとうございます。

> そのため、仮に作成可能だったとしても、C#で作るのはお勧めしません。
> 最低でも、C++ で作成することをお勧めします。
そうなのですね。この点が分からなかったので非常に助かります。

> こちら、「パッケージID」を発行してもらうために
> Windows デベロッパー センターに
> アプリを登録する必要があります(実際にストアに載せる必要はない)。
なるほどです。ここまでの情報にたどり着けずに困っていました。

> 最低限の知識として、COM(Component Object Model)に関する諸情報は必須です。
> また、Shell拡張の特にコンテキストメニュー関係の知識も重要です。
ご指摘の内容で調査・勉強する方針ができました。

Windows10時代の「レジストリに登録すれば簡単に動く」感覚があったので
なんでWindows11になってから対応するソフトが少ないのかがよく分かりました。

ありがとうございます。

※これ以上はしばらくソフト作成との格闘となると思いますので解決済みとさせていただきます。
解決済み
[ 親 103031 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -