トップページ > プログラム > 2016年05月03日 > Fq/Xo6LF

書き込み順位&時間帯一覧

18 位/182 ID中時間01234567891011121314151617181920212223Total
書き込み数0010000000000101000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
317
Win32API質問箱 Build122

書き込みレス一覧

Win32API質問箱 Build122
317 :デフォルトの名無しさん[sage]:2016/05/03(火) 02:05:10.66 ID:Fq/Xo6LF
> 自作のプログラムから、エクスプローラの右クリックで表示されるコンテキストメニューを表示しようとしています。
>
> IShellFolder *pShellFolder;
> IContextMenu *pContextMenu;
> pShellFolder->GetUIObjectOf(NULL, pItemListLen, &pItemList, IID_IContextMenu, NULL, (void **)&pContextMenu);
> HMENU hmenu = CreatePopupMenu();
> pContextMenu->QueryContextMenu(hmenu, 0, 0x001, 0x7fff, CMF_NORMAL);
>
> とコンテキストメニューを作成しています。
> pItemListにはILFindLastID()で取得した対象のファイルのIDが、
> pShellFolderには親ディレクトリを格納しています。
>
> 同一フォルダ内のファイルであれば、複数のファイルのコンテキストメニューを作れるのですが、
> 異なるフォルダにある複数のファイルだと作成できません。
> エクスプローラだと検索結果などから異なるフォルダにあるファイルから
> コンテキストメニューを出してるみたいなのですが、どうやったら出来るのでしょうか?

過去ログから拾ってきたコピペですが、これと同じとこで躓いてます

> pShellFolderにデスクトップを格納し、pItemListには絶対PIDLを入れろ

このようなレスもありましたがこれでは上手く行かないです
Win32API質問箱 Build122
323 :デフォルトの名無しさん[sage]:2016/05/03(火) 13:18:08.22 ID:Fq/Xo6LF
>>319
どうも、レスありがとうございます ノシ

PIDLに関しては、必要に応じて手前で分割や結合が出来る程度には理解できてますので、完全か相対であるかは把握できています
親フォルダのIShellFolderとファイルの相対PIDLでは問題なく正常なメニューを取得できますが
デスクトップのIShellFolderと完全PIDL の組み合わせで正常なメニューが出るようには思えません…

たとえ単独ファイルであっても
デスクトップと完全PIDLでは正常なメニューは出ませんね

間違いが起こらないよう以下のような簡単な方法でメニューを取得してもやはりだめなんです...orz

LPSHELLFOLDER ptrDesktop;
LPITEMIDLIST ptrIDL;
LPCONTEXTMENU ptrContextMenu;
SHGetDesktopFolder(&ptrDesktop);
ptrDesktop->ParseDisplayName(NULL,NULL,L"C:\\CONFIG.SYS",NULL,&ptrIDL,NULL);
ptrDesktop->GetUIObjectOf(NULL,1,(LPCITEMIDLIST *)&ptrIDL,IID_IContextMenu,0,(LPVOID *)&ptrContextMenu);
Win32API質問箱 Build122
328 :317[sage]:2016/05/03(火) 15:34:20.80 ID:Fq/Xo6LF
少し進展
C:ドライブのIShellFolderから、C:より下の階層の相対PIDLを渡せばディレクトリが違っていても正常なメニューを出す事が出来るようです


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。