title: IShellFolder::ParseDisplayName to get ITEMIDLIST for Control Panel Item
body: <p>I have Shell Folder which is a Control Panel Item. I'm trying to get the ITEMIDLIST for the same. I have the Shell Folder GUID. </p>
  
  <p>Going by the documentation </p>
  
  <p><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/bb775090%28v=vs.85%29.aspx" rel="nofollow noreferrer">https://msdn.microsoft.com/en-us/library/windows/desktop/bb775090%28v=vs.85%29.aspx</a> 
  and </p>
  
  <p><a href="https://msdn.microsoft.com/en-us/LIBRary/ms909875.aspx" rel="nofollow noreferrer">https://msdn.microsoft.com/en-us/LIBRary/ms909875.aspx</a>, which are not consistent</p>
  
  <p>and state that I can specify display name in ::{GUID} syntax from Desktop Folder, I tried </p>
  
  <pre><code>::{CLSID for Control Panel}\::{CLSID for my Shell folder}.
  </code></pre>
  
  <p>This however doesn't work as I end up with the Control Panel's ITEMIDLIST. How do I get ITEMIDLIST to the Control Panel Item?</p>
  
  <p>With the answer suggested by @Denis Anisimov, I still face issues with ParseDisplayName.</p>
  
  <pre><code>int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  {
  HRESULT hres;
  LPSHELLFOLDER cPanel;
  LPSHELLFOLDER DesktopFolder;
  LPITEMIDLIST cpItemPidl;
  LPITEMIDLIST pidl;
  SHGetDesktopFolder(&amp;DesktopFolder);
  SHGetKnownFolderIDList(FOLDERID_ControlPanelFolder, CSIDL_CONTROLS, NULL, &amp;pidl);
  hres = DesktopFolder-&gt;BindToObject(pidl, NULL, IID_IShellFolder, (void**)&amp;cPanel);
  LPWSTR SFOLDERGUID = L"::{025A5937-A6BE-4686-A844-36FE4BEC8B6D}";
  
  hres = cPanel-&gt;ParseDisplayName(NULL, NULL, SFOLDERGUID, NULL, &amp;cpItemPidl, NULL);
  }
  </code></pre>
  
  <p>I get hres as </p>
  
  <pre><code>E_INVALIDARG One or more arguments are invalid.
  </code></pre>