右键文件关联

// 获取桌面文件夹 LPSHELLFOLDER lpDeskFolder = NULL; ::SHGetDesktopFolder(&lpDeskFolder); if( lpDeskFolder == NULL ) { ASSERT(FALSE); return; } int nPathLen = m_strFolder.GetLength(); LPITEMIDLIST ParentPidl = NULL; DWORD dwEaten = 0; USES_CONVERSION; DWORD dwResult = lpDeskFolder->ParseDisplayName( GetSafeHwnd() , 0 , A2W(m_strFolder) , &dwEaten , &ParentPidl , 0); if( dwResult != NOERROR ) { ASSERT( FALSE ); return; } // 得到IShellFolder的信息 LPSHELLFOLDER lpParentFolder = NULL; lpDeskFolder->BindToObject( ParentPidl , 0 , IID_IShellFolder , (void **)&lpParentFolder ); if( lpParentFolder == NULL ) { lpDeskFolder->Release(); lpParentFolder->Release(); ASSERT( FALSE ); return; } LPITEMIDLIST lpItemIDList = NULL; //StringToWideChar(strFileName, wszPath, MAX_PATH); lpParentFolder->ParseDisplayName( GetSafeHwnd() , 0 , A2W(GetSelItemText(0)) , &dwEaten , &lpItemIDList , 0 ); // 得到文件得快捷菜单 LPCONTEXTMENU lpContextMenu = NULL; lpParentFolder->GetUIObjectOf( GetSafeHwnd() , 1 , (LPCITEMIDLIST *)&lpItemIDList , IID_IContextMenu , 0 , (void**)&lpContextMenu ); if( lpContextMenu == NULL ) { lpDeskFolder->Release(); lpParentFolder->Release(); ASSERT( FALSE ); return; } // 定义一个CMINVOKECOMMANDINFO结构. CMINVOKECOMMANDINFO ici; ZeroMemory( &ici, sizeof(ici)); ici.cbSize = sizeof(CMINVOKECOMMANDINFO); ici.hwnd = GetSafeHwnd(); // 如果是弹出文件属性的对话框就用这个 /* ici.lpVerb = "Properties"; lpContextMenu->InvokeCommand(&ici); */ // 下面是弹出右键菜单的代码 HMENU hMenu = CreatePopupMenu(); dwResult = CMF_EXPLORE; lpContextMenu->QueryContextMenu( hMenu, 0, 1, 0x7FFF, dwResult); // 显示菜单 POINT pt; GetCursorPos(&pt); int Cmd = TrackPopupMenu( hMenu , TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD , pt.x , pt.y , 0 , GetSafeHwnd() , 0 ); ici.lpVerb = MAKEINTRESOURCE(Cmd - 1); ici.lpParameters = ""; ici.lpDirectory = ""; ici.nShow = SW_SHOWNORMAL; lpContextMenu->InvokeCommand(&ici); // 弹出右键菜单结束 lpContextMenu->Release(); lpParentFolder->Release(); lpDeskFolder->Release();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值