파일 확장명을 확장하는 일반적인 방법이 내 필요에 맞지 않기 때문에 현재 셸 확장을 작성하고 있지만 여기에도 같은 문제가 있습니다.Windows 셸 확장이 정확한 파일 경로를 제공하지 않습니다.
단일 바로 가기 (* .lnk 파일)를 마우스 오른쪽 단추로 클릭하면 대상 경로가 표시됩니다. 많은 파일을 선택하고 바로 가기를 마우스 오른쪽 단추로 클릭하면 단 하나의 파일 만 가져옵니다. 바로 가기 대상 파일.
내 셸 확장은 아직 완료되지 않습니다,하지만 파일을 열거 코드의 부분은 이것이다 :
HRESULT CFileContextMenuExt::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
{
HRESULT hr = E_INVALIDARG;
if (NULL == pdtobj)
{
return hr;
}
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stm = {};
// pDataObj contains the objects being acted upon. In this example,
// we get an HDROP handle for enumerating the selected files.
if (SUCCEEDED(pdtobj->GetData(&fe, &stm)))
{
// Get an HDROP handle.
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
if (hDrop != NULL)
{
// Determine how many files are involved in this operation.
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
if (nFiles != 0)
{
m_selectedFiles.clear();
//Enumerates the selected files and directories.
for (UINT i = 0; i < nFiles; i++)
{
// Get the next filename.
int size = DragQueryFile(hDrop, i, NULL, 0) + 1;
string_t str;
str.resize(size);
if (DragQueryFile(hDrop, i, &str[0], size) == 0)
continue;
m_selectedFiles.push_back(str);
}
hr = S_OK;
}
GlobalUnlock(stm.hGlobal);
}
ReleaseStgMedium(&stm);
}
// If any value other than S_OK is returned from the method, the context
// menu is not displayed.
return hr;
}
누군가의 조언이 얼마나 정확한 경로 대신 목표의를 얻을 수 있습니까?
이미 보셨나요? http://www.codeproject.com/Articles/445/The-Complete-Idiot-s-Guide-to-Writing-Shell-Extens –
링크를 제공해 주셔서 감사합니다. 내 문제를 해결하십시오. – ST3
IShellLink 인터페이스를 구현해야합니다. – user2120666