- 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を渡せばディレクトリが違っていても正常なメニューを出す事が出来るようです
|
|