「直前のファイル操作を元に戻すには?」について – プログラミング – Home

「直前のファイル操作を元に戻すには?」...
 
通知
すべてクリア

[解決済] 「直前のファイル操作を元に戻すには?」について


佐野
 佐野
(@佐野)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

この掲示板の

直前のファイル操作を元に戻すには?
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt

を読み、自分のアプリケーションに実装してみましたが、どうもうまくいきません。

環境はXP SP2です。下はメニューを表示できるようにしたサンプルです。

同一プロセスからファイルを削除した後にメニューを見てみると、
確かに「元に戻す」の項目は存在します。しかし、選択しても反応がありません。
また、同一プロセスからコモンダイアログを呼び出し、
そこで「Ctrl+Z」を行うと元に戻すが作動します。
あと一歩という感じなのですが・・・。

void TestFunc(HWND hWnd)
{
LPSHELLFOLDER lpShellFolder;
LPSHELLVIEW lpShellView;
LPCONTEXTMENU lpContextMenu;
CMINVOKECOMMANDINFO cmi;
POINT po;
HMENU M;
int idCmd;

//IShellFolder取得
SHGetDesktopFolder(&lpShellFolder);

//IShellView取得
lpShellFolder->CreateViewObject(hWnd, IID_IShellView, (LPVOID *)
&lpShellView);

//IContextMenu取得(ビュー背景のコンテキストメニュー)
lpShellView->GetItemObject(SVGIO_BACKGROUND, IID_IContextMenu,
(LPVOID *)&lpContextMenu);

//メニューのリスト取得
M = CreatePopupMenu();
GetCursorPos(&po);
lpContextMenu->QueryContextMenu(M, 0, 1, 0x7FFF, CMF_NORMAL);
idCmd = TrackPopupMenu(M, TPM_LEFTALIGN | TPM_RETURNCMD |
TPM_RIGHTBUTTON,
po.x, po.y, 0, hWnd, NULL);
DestroyMenu(M);

if ( idCmd != 0 )
{
ZeroMemory(&cmi, sizeof(CMINVOKECOMMANDINFO));
cmi.cbSize = sizeof(CMINVOKECOMMANDINFO);
cmi.fMask = 0;
cmi.lpVerb = MAKEINTRESOURCEA(idCmd - 1);
cmi.hwnd = hWnd;
cmi.lpParameters = NULL;
cmi.lpDirectory = NULL;
cmi.nShow = SW_SHOWNORMAL;
cmi.dwHotKey = 0;
cmi.hIcon = NULL;
lpContextMenu->InvokeCommand(&cmi);
}

//解放
lpContextMenu->Release();
lpShellFolder->Release();

return;
}


引用未解決
トピックタグ
試してないけど
 試してないけど
(@試してないけど)
ゲスト
結合: 19年前
投稿: 1
 

idCmdには何が入ってきてるの?


返信引用
佐野
 佐野
(@佐野)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

2です。

本当はDelphiでの開発ですが、VC,Delphiともに2でした。


返信引用
佐野
 佐野
(@佐野)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

解決とはいきませんが、

IShellViewのCreateViewWindow

を呼び出すと、動作することがわかりました。
というよりも、最終手段ですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました