X-Finder プログラミング メモ

X-Finderのプログラム関連のメモです。
エラー処理などは省いていますので、実装する際はSucceeded(等を用いて下さい。

■元に戻す

SHFileOperation等でFOF_ALLOWUNDOを指定したファイルのコピーや削除等を「元に戻す」方法です。

1.SHGetDesktopFolder(...);
デスクトップの IShellFolder を取得します。

2.IShellFolder.CreateViewObject(...);
IShellView を取得します。最近のX-Finderでは SHCreateShellFolderView(...) を使用してIShellViewを取得しています。

3.IShellView.CreateViewWindow(...);
ウインドウを作成します。

4.IShellView.UIActivate(SVUIA_ACTIVATE_NOFOCUS);
ウインドウをアクティブにします。

5.IShellView.GetWindow(hExplorer);
ウインドウのハンドルを取得します。3で作成したときに取得できるウインドウハンドルでも良かったと思います。

6.SendMessage(hExplorer, WM_COMMAND, CommandID_UNDO - 1, 0);
元に戻すを実行します。
CommandID_UNDO の値は 28700 です。

7.IShellView.DestroyViewWindow(...); ウインドウを破棄します。

※3以降はIShellView.GetItemObject(SVGIO_BACKGROUND, IID_IContextMenu,...) で IContextMenu を取得してコンテキストメニューから元に戻すを実行する方法もあります。XP以降のOSの場合はこの場合も必ずCreateViewWindowでウインドウを作成しておく必要があります。

※3のIShellView.CreateViewWindowを実行するためにはIShellBrowserを実装する必要があります。IShellBrowserを実装しない場合は以下の方法があります。

1.IEコンポーネントで「C:\」等のフォルダを開いて 6 のSendMessageを実行
2.XP以降で使える IFolderViewHost を使って 6 のSendMessageを実行
3.Vista以降で使える IExplorerBrowser を使って 6 のSendMessageを実行

■Delphi 6で「元に戻す」を実行するサンプルプログラム