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... ============================================================================== --- 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); }