mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
[SHELL32]
- Hackplement SHOpenFolderAndSelectItems by using the /select parameter of explorer.exe and selecting only the first of the requested items. - Implement the "Find Target" button in the properties dialog of shortcuts to use SHOpenFolderAndSelectItems so as we can test it. Based on the patch of Joachim Henze (reactosfanboy). CORE-9367 svn path=/trunk/; revision=73159
This commit is contained in:
parent
0814bc5358
commit
b183748a87
2 changed files with 47 additions and 3 deletions
|
@ -1975,6 +1975,13 @@ INT_PTR CALLBACK ExtendedShortcutProc(HWND hwndDlg, UINT uMsg,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
EXTERN_C HRESULT
|
||||
WINAPI
|
||||
SHOpenFolderAndSelectItems(LPITEMIDLIST pidlFolder,
|
||||
UINT cidl,
|
||||
PCUITEMID_CHILD_ARRAY apidl,
|
||||
DWORD dwFlags);
|
||||
|
||||
/**************************************************************************
|
||||
* SH_ShellLinkDlgProc
|
||||
*
|
||||
|
@ -2108,6 +2115,7 @@ INT_PTR CALLBACK CShellLink::SH_ShellLinkDlgProc(HWND hwndDlg, UINT uMsg, WPARAM
|
|||
switch(LOWORD(wParam))
|
||||
{
|
||||
case 14020:
|
||||
SHOpenFolderAndSelectItems(pThis->pPidl, 0, NULL, 0);
|
||||
///
|
||||
/// FIXME
|
||||
/// open target directory
|
||||
|
|
|
@ -252,7 +252,7 @@ HRESULT SHELL32_BindToFS (LPCITEMIDLIST pidlRoot,
|
|||
ERR("Binding to file is unimplemented\n");
|
||||
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||
}
|
||||
if (!_ILIsFolder(pidlComplete) && !_ILIsDrive(pidlComplete))
|
||||
if (!_ILIsFolder(pidlComplete))
|
||||
{
|
||||
ERR("Got an unknown type of pidl!\n");
|
||||
return E_FAIL;
|
||||
|
@ -525,6 +525,42 @@ SHOpenFolderAndSelectItems(LPITEMIDLIST pidlFolder,
|
|||
PCUITEMID_CHILD_ARRAY apidl,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
FIXME("SHOpenFolderAndSelectItems() stub\n");
|
||||
return E_NOTIMPL;
|
||||
ERR("SHOpenFolderAndSelectItems() is hackplemented\n");
|
||||
PCIDLIST_ABSOLUTE pidlItem;
|
||||
if (cidl)
|
||||
pidlItem = ILCombine(pidlFolder, apidl[0]);
|
||||
else
|
||||
pidlItem = pidlFolder;
|
||||
|
||||
CComPtr<IShellFolder> psfDesktop;
|
||||
|
||||
HRESULT hr = SHGetDesktopFolder(&psfDesktop);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
STRRET strret;
|
||||
hr = psfDesktop->GetDisplayNameOf(pidlItem, SHGDN_FORPARSING, &strret);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
WCHAR wszBuf[MAX_PATH];
|
||||
hr = StrRetToBufW(&strret, pidlItem, wszBuf, _countof(wszBuf));
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
WCHAR wszParams[MAX_PATH];
|
||||
wcscpy(wszParams, L"/select,");
|
||||
wcscat(wszParams, wszBuf);
|
||||
|
||||
SHELLEXECUTEINFOW sei;
|
||||
memset(&sei, 0, sizeof sei);
|
||||
sei.cbSize = sizeof sei;
|
||||
sei.fMask = SEE_MASK_WAITFORINPUTIDLE;
|
||||
sei.lpFile = L"explorer.exe";
|
||||
sei.lpParameters = wszParams;
|
||||
|
||||
if (ShellExecuteExW(&sei))
|
||||
return S_OK;
|
||||
else
|
||||
return E_FAIL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue