/* adapted from http://blogs.msdn.com/oldnewthing/archive/2004/09/20/231739.aspx */ IDataObject* GetDataObjectForFile(WCHAR* filePath, HWND hwnd) { ScopedComPtr<IShellFolder> pDesktopFolder; HRESULT hr = SHGetDesktopFolder(&pDesktopFolder); if (FAILED(hr)) return NULL; IDataObject* pDataObject = NULL; ScopedMem<WCHAR> lpWPath(str::Dup(filePath)); LPITEMIDLIST pidl; hr = pDesktopFolder->ParseDisplayName(NULL, NULL, lpWPath, NULL, &pidl, NULL); if (SUCCEEDED(hr)) { ScopedComPtr<IShellFolder> pShellFolder; LPCITEMIDLIST pidlChild; hr = SHBindToParent(pidl, IID_IShellFolder, (void**)&pShellFolder, &pidlChild); if (SUCCEEDED(hr)) pShellFolder->GetUIObjectOf(hwnd, 1, &pidlChild, IID_IDataObject, NULL, (void **)&pDataObject); CoTaskMemFree(pidl); } return pDataObject; }