shell32: Implement SHCreateItemInKnownFolder.

Huw Davies huw at codeweavers.com
Mon Jul 31 02:47:11 CDT 2017


On Sun, Jul 30, 2017 at 05:37:02PM +0800, Jactry Zeng wrote:
> diff --git a/dlls/shell32/shellitem.c b/dlls/shell32/shellitem.c
> index 1e19f7c72e..57fb849f16 100644
> --- a/dlls/shell32/shellitem.c
> +++ b/dlls/shell32/shellitem.c
> @@ -662,6 +662,66 @@ HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void
>      return ret;
>  }
>  
> +HRESULT WINAPI SHCreateItemInKnownFolder(REFKNOWNFOLDERID rfid, DWORD flags,
> +                                         LPWSTR filename, REFIID riid, void **ppv)
> +{
> +    HRESULT hr;
> +    WCHAR *pathW = NULL;
> +    IShellFolder *desktop = NULL, *folder = NULL;
> +    LPITEMIDLIST pidl_folder = NULL, pidl = NULL;
> +
> +    TRACE("%p, %x, %s, %s, %p\n", rfid, flags, wine_dbgstr_w(filename),
> +          debugstr_guid(riid), ppv);
> +
> +    if(!rfid || !ppv)
> +        return E_INVALIDARG;
> +
> +    if(flags)
> +        FIXME("flags 0x%08x not supported\n", flags);
> +
> +    *ppv = NULL;
> +    hr = SHGetDesktopFolder(&desktop);
> +    if(hr != S_OK) return hr;
> +
> +    hr = SHGetKnownFolderPath(rfid, 0, NULL, &pathW);
> +    if(hr != S_OK) return hr;
> +
> +    hr = IShellFolder_ParseDisplayName(desktop, NULL, NULL, pathW, NULL, &pidl_folder, NULL);
> +    if(hr != S_OK)
> +        goto cleanup;

You probably want to use SHGetKnownFolderIDList() instead of these
last two calls.

Huw.



More information about the wine-devel mailing list