実際にUNDOするにはどうすればよいでしょうか?

解決


onion  2004-02-20 07:44:35  No: 53206

お世話になります.VC6 WinXP で開発しているものです.

SHFileOperation(FOF_ALLOWUNDO) で行ったUNDO可能なファイル操作(copy,deleteなど)を、
実際にUNDOするにはどうすればよいでしょうか? そもそも可能なんでしょうか?

また、出来るとして,このときの UNDO で何が起こるか
(エクスプローラのメニューで「元に戻す」を選択したときに、ステータスバーに表示される文字列)
を取得するにはどうしたらよいでしょうか?

よろしくお願いします.


Toshi  2004-03-04 00:52:37  No: 53207

これちょっと興味有ったので、暇を見つけてはちょくちょく検索して調べてたのですが、どうやらごみ箱のインターフェース関数は無いっぽいですね。
(単にシェルAPIが非公開になってるだけかも知れませんが)
MSDN見るとUNDOをサポート出来るって書いてある癖に、その実装方法へのリンクも無ければ情報も書いてないし。
推測するに、ごみ箱処理は管理テーブルファイルにオリジナルのファイル情報を保存した上で、ユニークな一意の名前にリネームして(フォルダの場合はフォルダのみ)保持し、後は属性を隠しにしてるだけっぽいので、もし自分でUNDOを実装しようと思ったら、スタブ的なMyごみ箱を作ってUNDOを実装、アプリ終了後はUNDO不可とし、アプリ終了時なりアプライボタン等で最終的な状態をごみ箱へ反映させるしか無いのかなぁ・・・って気が・・。


0  2004-03-04 07:42:05  No: 53208

>MSDN見るとUNDOをサポート出来るって書いてある癖に、その実装方法へのリンクも無ければ情報も書いてないし。
御意.

あの FOF_ALLOWUNDO フラグに振り回されさんざんあっちこっち調べましたが,
コピーの undo → 削除,移動の undo → 逆方向移動 をサクッと仕切ってくれる 
API 等を見つけることは出来ませんでした.

ただ,ごみ箱へ削除した(FOF_ALLOWUNDO フラグで削除)アイテムは,ごみ箱自体を操作
すれば『元に戻す』を実行することは可能のようです.
#これはとても大変で.. 私には説明できません.IShellFolder インタフェース から,ContextMenu
  にアクセスしてundoコマンドを検索,実行.. というのが手順のようですが.. ごめんなさい.

ごみ箱の操作については過日私が投稿した,
件名:「自前のアプリケーションから「ごみ箱」を操作するにはどうしたらいいのでしょうか?」
で,YuO さんがその大まかな手順を教えてくれています.

Toshiさん,どうもありがとうございました.ひとまず,解決にいたします.


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

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






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