実現したいこと
- 自作のアプリケーションにファイルが渡されたとき、そのファイルが「ライブラリ」フォルダ内から渡されたかどうか判定したいです。
前提
Windowsの「ライブラリ」を仮想フォルダとして使いたいです。
たとえばWindows標準のフォトアプリでライブラリ内の画像ファイルを開くと、あたかも実際のフォルダであるかのように画像リストを巡回できるようになっています。これが理想の動作です。
一方で、自作の実行ファイルにファイルを渡しても元のパスしか得られず、ライブラリから渡されたと判断できません。どのように実装しているのでしょうか?
環境 OS: Windows 11 Home 22H2 (22621.2134) フォト: 2023.11050.16005.0
発生している問題・エラーメッセージ
たとえば元のフォルダ構造が以下のようになっているとして、ライブラリ Test
を作って aaa\
、bbb\
を追加したとします。
C:\ + aaa\ | + 00.jpg + bbb\ | + 01.jpg
すると、エクスプローラ上で Test
は以下のように見えます。
Test\ + 00.jpg + 01.jpg
ここで 00.jpg
をフォトで開くと、まるで本当に Test\00.jpg
を開いたかのように、C:\aaa\00.jpg
と C:\bbb\01.jpg
を巡回できるようになっています。
※フォト上では、「情報→ファイルのパス」は C:\aaa\00.jpg
になっていました。
一方で、サードパーティ製の画像ビューアで開くと C:\aaa\00.jpg
が開かれてしまい巡回できません。
該当のソースコード
再現の手順は以下の通りです。
- ライブラリフォルダを開く(デフォルトではエクスプローラ上で非表示ですが、アドレスバーに「ライブラリ」と入力すると移動できました)
- 右クリック→新規作成→ライブラリで
Test
という名前のライブラリを作成する - 画像の入ったフォルダを右クリックし「ライブラリに追加→Test」でフォルダの中身を追加する
- 3をいくつかのフォルダで繰り返す
- Test内に移動し画像をフォトもしくは他の画像ビューアで開く
試したこと
自分で引数を表示するだけのツールを作って Test\00.jpg
を渡してみましたが、C:\aaa\00.jpg
が渡されているだけで、Test
ライブラリから渡されたと判断できる情報はありませんでした。
引数の表示は以下で行いました。C# で WinForms を使い、引数を TextBox
コントロールで表示しています。
C#
1// Program.cs 2namespace ArgumentViewer 3{ 4 internal static class Program 5 { 6 [STAThread] 7 static void Main(string[] args) 8 { 9 ApplicationConfiguration.Initialize(); 10 Application.Run(new Form1(args)); 11 } 12 } 13} 14 15// Form1.cs 16namespace ArgumentViewer 17{ 18 public partial class Form1 : Form 19 { 20 public Form1(string[]? args) 21 { 22 InitializeComponent(); 23 if (args is not null) 24 { 25 textBox1.Text = String.Join(Environment.NewLine, args); 26 } 27 } 28 } 29} 30 31// Form1.Designer.cs は省略
補足情報(FW/ツールのバージョンなど)
OS: Windows 11 Home 22H2 (22621.2134)
フォト: 2023.11050.16005.0

回答1件
あなたの回答
tips
プレビュー