質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

Q&A

解決済

1回答

231閲覧

渡されたファイルがWindowsの「ライブラリ」内のファイルか判定したい

pute

総合スコア134

Windows 11

Windows 11は、Windows 10の後継バージョン。それまでのMetroデザインを廃止し、Fluentデザインを導入しています。スタートメニューの構成やウィンドウのデザインの変更の他、Androidアプリをネイティブに実行できます。

1グッド

0クリップ

投稿2023/08/16 13:45

実現したいこと

  • 自作のアプリケーションにファイルが渡されたとき、そのファイルが「ライブラリ」フォルダ内から渡されたかどうか判定したいです。

前提

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.jpgC:\bbb\01.jpg を巡回できるようになっています。

※フォト上では、「情報→ファイルのパス」は C:\aaa\00.jpg になっていました。

一方で、サードパーティ製の画像ビューアで開くと C:\aaa\00.jpg が開かれてしまい巡回できません。

該当のソースコード

再現の手順は以下の通りです。

  1. ライブラリフォルダを開く(デフォルトではエクスプローラ上で非表示ですが、アドレスバーに「ライブラリ」と入力すると移動できました)
  2. 右クリック→新規作成→ライブラリで Test という名前のライブラリを作成する
  3. 画像の入ったフォルダを右クリックし「ライブラリに追加→Test」でフォルダの中身を追加する
  4. 3をいくつかのフォルダで繰り返す
  5. 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

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2023/08/16 15:21

UWP(WinRT)は全然わかりませんが^^; 例えばTest1・Test2ともにC:\aaa\00.jpgがあったような場合ってどうなるんでしょう? それでも判別してるようならこれですかね? [FileActivatedEventArgs.NeighboringFilesQuery プロパティ (Windows.ApplicationModel.Activation) - Windows UWP applications | Microsoft Learn](https://learn.microsoft.com/ja-jp/uwp/api/windows.applicationmodel.activation.fileactivatedeventargs.neighboringfilesquery) [c# - How to get a complete explorer listing related to a file used to launch an associated app in Windows? - Stack Overflow](https://stackoverflow.com/questions/71365499) ライブラリフォルダを列挙するような方法もあるにはあるようです。 [c# - Get directories list from windows media libraries - Stack Overflow](https://stackoverflow.com/questions/27465267)
pute

2023/08/16 16:55

複数のライブラリで一部重複したファイルを参照してもきちんと区別されていました。 > FileActivatedEventArgs.NeighboringFilesQuery これっぽいです! ありがとうございます。WinRTの機能なんですね。 ベストアンサー付けさせていただきたいので、よろしければ回答に転記ください。
TN8001

2023/08/16 17:17

> 複数のライブラリで一部重複したファイルを参照してもきちんと区別されていました。 へーそうなんすねー > ベストアンサー付けさせていただきたいので、よろしければ回答に転記ください。 ggっただけで確認もしてないんで、puteさんのほうで自己解決で結構ですよ。
TN8001

2023/08/17 10:12

[Windows-universal-samples/Samples/AssociationLaunching at main · microsoft/Windows-universal-samples](https://github.com/microsoft/Windows-universal-samples/tree/main/Samples/AssociationLaunching) これをベースにざっと確認してみました。 普通のフォルダなら取れましたが、「ライブラリ」からだとなぜか0件でしたorz Windows10だからかもしれません。11環境がないので確認できません。 puteさんのほうで確認できましたら、自己解決で閉じちゃってください。
guest

回答1

0

自己解決

TN8001さんのコメントで解決しました!
資料へのポインタを以下に再掲させていただきます。

FileActivatedEventArgs.NeighboringFilesQuery プロパティ (Windows.ApplicationModel.Activation) - Windows UWP applications | Microsoft Learn

FileActivatedEventArgs.NeighboringFilesQuery の使用例
cs/Scenario3_ReceiveFile.xaml.cs で使っている)

Windows-universal-samples/Samples/AssociationLaunching at main · microsoft/Windows-universal-samples

TN8001さん、ありがとうございました。

投稿2023/08/18 01:14

pute

総合スコア134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問