[ros-diffs] [weiden] 27456: When calling ShellExecuteEx for the selected objects in a shell view, set the current directory to the view's directory.

weiden at svn.reactos.org weiden at svn.reactos.org
Sat Jul 7 21:11:49 CEST 2007


Author: weiden
Date: Sat Jul  7 23:11:49 2007
New Revision: 27456

URL: http://svn.reactos.org/svn/reactos?rev=27456&view=rev
Log:
When calling ShellExecuteEx for the selected objects in a shell view, set the current directory to the view's directory.

Modified:
    trunk/reactos/dll/win32/shell32/shlview.c

Modified: trunk/reactos/dll/win32/shell32/shlview.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shlview.c?rev=27456&r1=27455&r2=27456&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shlview.c (original)
+++ trunk/reactos/dll/win32/shell32/shlview.c Sat Jul  7 23:11:49 2007
@@ -854,6 +854,9 @@
 	STGMEDIUM stgm;
 	LPIDA pIDList;
 	LPCITEMIDLIST parent_pidl;
+	WCHAR parent_path[MAX_PATH];
+	LPCWSTR parent_dir = NULL;
+	SFGAOF attribs;
 	int i;
 
 	if (0 == ShellView_GetSelections(This))
@@ -887,10 +890,16 @@
 	pIDList = GlobalLock(stgm.u.hGlobal);
 
 	parent_pidl = (LPCITEMIDLIST) ((LPBYTE)pIDList+pIDList->aoffset[0]);
+	hr = IShellFolder_GetAttributesOf(This->pSFParent, 1, &parent_pidl, &attribs);
+	if (SUCCEEDED(hr) && (attribs & SFGAO_FILESYSTEM) &&
+	    SHGetPathFromIDListW(parent_pidl, parent_path))
+	{
+	  parent_dir = parent_path;
+	}
+
 	for (i = pIDList->cidl; i > 0; --i)
 	{
 	  LPCITEMIDLIST pidl;
-	  SFGAOF attribs;
 
 	  pidl = (LPCITEMIDLIST)((LPBYTE)pIDList+pIDList->aoffset[i]);
 
@@ -899,19 +908,19 @@
 
 	  if (SUCCEEDED(hr) && ! (attribs & SFGAO_FOLDER))
 	  {
-	    SHELLEXECUTEINFOA shexinfo;
-
-	    shexinfo.cbSize = sizeof(SHELLEXECUTEINFOA);
+	    SHELLEXECUTEINFOW shexinfo;
+
+	    shexinfo.cbSize = sizeof(SHELLEXECUTEINFOW);
 	    shexinfo.fMask = SEE_MASK_INVOKEIDLIST;	/* SEE_MASK_IDLIST is also possible. */
 	    shexinfo.hwnd = NULL;
 	    shexinfo.lpVerb = NULL;
 	    shexinfo.lpFile = NULL;
 	    shexinfo.lpParameters = NULL;
-	    shexinfo.lpDirectory = NULL;
+	    shexinfo.lpDirectory = parent_dir;
 	    shexinfo.nShow = SW_NORMAL;
 	    shexinfo.lpIDList = ILCombine(parent_pidl, pidl);
 
-	    ShellExecuteExA(&shexinfo);    /* Discard error/success info */
+	    ShellExecuteExW(&shexinfo);    /* Discard error/success info */
 
 	    ILFree((LPITEMIDLIST)shexinfo.lpIDList);
 	  }




More information about the Ros-diffs mailing list