自前のアプリケーションから「ごみ箱」を操作するにはどうしたらいいのでしょうか?

解決


onion  2004-02-13 23:05:38  No: 53174

VC++6.0を使用して仕事で開発している者です.OS はXPです.
開発するアプリから「ごみ箱」を操作したいと考えていますが方法がわかりません.
開発しているアプリケーションは分かりやすく言うと"制限付きExplorer"といったようなものです.
このアプリでファイルやフォルダの削除を「ごみ箱」に対して行う必要がありるのですが,アクセス方法がわかりません.
よろしくお願いします.


YuO  2004-02-13 23:30:50  No: 53175

> 開発するアプリから「ごみ箱」を操作したいと考えていますが方法がわかりません.

Shell関数にいくつかあるようです。
SHFileOperationとかSHEmptyRecycleBinとかSHQueryRecycleBinとか。

> 開発しているアプリケーションは分かりやすく言うと"制限付きExplorer"といったようなものです.
> このアプリでファイルやフォルダの削除を「ごみ箱」に対して行う必要がありるのですが,アクセス方法がわかりません.

削除した物をごみ箱に入れるというのであれば,SHFileOperationでできます。


onion  2004-02-16 20:11:02  No: 53176

YuO さん,早速のアドバイスありがとうございます.

>削除した物をごみ箱に入れるというのであれば,SHFileOperationでできます。

はい,これは FO_DELETE, フラグに UNDO 許可にしてごみ箱に移動できることを確認しました.

>SHFileOperationとかSHEmptyRecycleBinとかSHQueryRecycleBinとか。

そうか,RecycleBin が キーワードなんですね.
SHEmptyRecycleBin は「ごみ箱を空にする」ですね.やってみます.
SHQueryRecycleBin は ごみ箱のサイズと,アイテムの総数を得るのに使用するようですね.

で,こちらの質問が舌足らずで申し訳なかったのですが,知りたかったのは削除の他に,ごみ箱の内容を(表示するために)知るにはどうしたらいいのか分からなかったんです.

WinExplorerのようにアプリケーションでごみ箱の内容を表示できるのでしょうか?

仮想フォルダであるごみ箱は普通のフォルダの内容を調べるようなわけにはいきませんよね.

普通のファイルに対して実行する FindFirstFile のような API ってあるのでしょうか?

たびたびすいませんよろしくお願いします.


YuO  2004-02-17 07:56:17  No: 53177

> で,こちらの質問が舌足らずで申し訳なかったのですが,知りたかったのは削除の他に,ごみ箱の内容を(表示するために)知るにはどうしたらいいのか分からなかったんです.
> 普通のファイルに対して実行する FindFirstFile のような API ってあるのでしょうか?

IShellFolderを利用します。

簡単に書くと,
1. SHGetDesktopFolderを使ってデスクトップへのIShellFolderのインスタンスを取得する
2. SHGetSpecialFolderLocationを使ってごみ箱のCSIDL(CSIDL_BITBUCKET)からLPITEMIDLISTを取得する
3. IShellFolder::BindToObjectを使ってゴミ箱へのIShellFolderのインスタンスを取得する
4. IShellFolder::EnumObjectsを使ってゴミ箱のIEnumIDListのインスタンスを取得する
5. IEnumIDList::Nextを使ってゴミ箱のファイルを列挙していく。
6. IShellFolder::GetDisplayNameOfを使って表示名を取得する。
ということになると思います。


onion  2004-02-17 20:38:28  No: 53178

YuO さん,的確なアドバイスありがとうございます.

あれこれ調べていると,IShellFolder でどうにかするらしいことは
分かったのですが,具体的な手順が分からずもやもやしていました.

しかし,これで迷うことなく最短コースで行けそうです.
後は私次第です.やってみます.

多謝.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加