mirror of
https://github.com/reactos/reactos.git
synced 2024-06-22 22:11:39 +00:00
[SHELL32]
- Formatting. No code changes - Remove not used shfldr_unixfs.cpp svn path=/trunk/; revision=54674
This commit is contained in:
parent
7a0ad93bff
commit
60239d4e4c
|
@ -34,11 +34,11 @@ WINE_DEFAULT_DEBUG_CHANNEL (fprop);
|
|||
|
||||
typedef struct
|
||||
{
|
||||
DWORD cFiles;
|
||||
DWORD cFolder;
|
||||
ULARGE_INTEGER bSize;
|
||||
HWND hwndDlg;
|
||||
WCHAR szFolderPath[MAX_PATH];
|
||||
DWORD cFiles;
|
||||
DWORD cFolder;
|
||||
ULARGE_INTEGER bSize;
|
||||
HWND hwndDlg;
|
||||
WCHAR szFolderPath[MAX_PATH];
|
||||
} FOLDER_PROPERTIES_CONTEXT, *PFOLDER_PROPERTIES_CONTEXT;
|
||||
|
||||
typedef struct
|
||||
|
@ -57,8 +57,8 @@ typedef struct
|
|||
static FOLDER_VIEW_ENTRY s_Options[] =
|
||||
{
|
||||
{ L"AlwaysShowMenus", IDS_ALWAYSSHOWMENUS },
|
||||
{ L"AutoCheckSelect", -1 },
|
||||
{ L"ClassicViewState", -1 },
|
||||
{ L"AutoCheckSelect", -1 },
|
||||
{ L"ClassicViewState", -1 },
|
||||
{ L"DontPrettyPath", -1 },
|
||||
{ L"Filter", -1 },
|
||||
{ L"FolderContentsInfoTip", IDS_FOLDERCONTENTSTIP },
|
||||
|
@ -105,7 +105,7 @@ FolderOptionsGeneralDlg(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static
|
||||
static
|
||||
VOID
|
||||
InitializeFolderOptionsListCtrl(HWND hwndDlg)
|
||||
{
|
||||
|
@ -191,16 +191,16 @@ InitializeFileTypesListCtrlColumns(HWND hDlgCtrl)
|
|||
wcscpy(szName, L"FileTypes");
|
||||
}
|
||||
|
||||
col.iSubItem = 1;
|
||||
col.cx = clientRect.right - clientRect.left - columnSize;
|
||||
col.cchTextMax = wcslen(szName);
|
||||
col.pszText = szName;
|
||||
(void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 1, (LPARAM)&col);
|
||||
col.iSubItem = 1;
|
||||
col.cx = clientRect.right - clientRect.left - columnSize;
|
||||
col.cchTextMax = wcslen(szName);
|
||||
col.pszText = szName;
|
||||
(void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 1, (LPARAM)&col);
|
||||
|
||||
/* set full select style */
|
||||
dwStyle = (DWORD) SendMessage(hDlgCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
|
||||
dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
|
||||
SendMessage(hDlgCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
|
||||
/* set full select style */
|
||||
dwStyle = (DWORD) SendMessage(hDlgCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
|
||||
dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
|
||||
SendMessage(hDlgCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
|
||||
}
|
||||
|
||||
INT
|
||||
|
@ -228,7 +228,7 @@ InsertFileType(HWND hDlgCtrl, WCHAR * szName, PINT iItem, WCHAR * szFile)
|
|||
/* FIXME handle URL protocol handlers */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* allocate file type entry */
|
||||
Entry = (PFOLDER_FILE_TYPE_ENTRY)HeapAlloc(GetProcessHeap(), 0, sizeof(FOLDER_FILE_TYPE_ENTRY));
|
||||
|
||||
|
@ -248,8 +248,8 @@ InsertFileType(HWND hDlgCtrl, WCHAR * szName, PINT iItem, WCHAR * szFile)
|
|||
dwSize = sizeof(Entry->ClassKey);
|
||||
if (RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)Entry->ClassKey, &dwSize) != ERROR_SUCCESS)
|
||||
{
|
||||
/* no link available */
|
||||
Entry->ClassKey[0] = 0;
|
||||
/* no link available */
|
||||
Entry->ClassKey[0] = 0;
|
||||
}
|
||||
|
||||
if (Entry->ClassKey[0])
|
||||
|
@ -358,8 +358,8 @@ InitializeFileTypesListCtrl(HWND hwndDlg)
|
|||
/* select first item */
|
||||
ZeroMemory(&lvItem, sizeof(LVITEMW));
|
||||
lvItem.mask = LVIF_STATE;
|
||||
lvItem.stateMask = (UINT)-1;
|
||||
lvItem.state = LVIS_FOCUSED|LVIS_SELECTED;
|
||||
lvItem.stateMask = (UINT) - 1;
|
||||
lvItem.state = LVIS_FOCUSED | LVIS_SELECTED;
|
||||
lvItem.iItem = 0;
|
||||
(void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&lvItem);
|
||||
|
||||
|
@ -381,12 +381,12 @@ FindSelectedItem(
|
|||
ZeroMemory(&lvItem, sizeof(LVITEM));
|
||||
lvItem.mask = LVIF_PARAM | LVIF_STATE;
|
||||
lvItem.iItem = Index;
|
||||
lvItem.stateMask = (UINT)-1;
|
||||
lvItem.stateMask = (UINT) - 1;
|
||||
|
||||
if (ListView_GetItem(hDlgCtrl, &lvItem))
|
||||
{
|
||||
if (lvItem.state & LVIS_SELECTED)
|
||||
return (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam;
|
||||
return (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -429,47 +429,47 @@ FolderOptionsFileTypesDlg(
|
|||
}
|
||||
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
case WM_NOTIFY:
|
||||
lppl = (LPNMLISTVIEW) lParam;
|
||||
|
||||
if (lppl->hdr.code == LVN_ITEMCHANGING)
|
||||
{
|
||||
ZeroMemory(&lvItem, sizeof(LVITEM));
|
||||
lvItem.mask = LVIF_PARAM;
|
||||
lvItem.iItem = lppl->iItem;
|
||||
if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0, (LPARAM)&lvItem))
|
||||
return TRUE;
|
||||
ZeroMemory(&lvItem, sizeof(LVITEM));
|
||||
lvItem.mask = LVIF_PARAM;
|
||||
lvItem.iItem = lppl->iItem;
|
||||
if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0, (LPARAM)&lvItem))
|
||||
return TRUE;
|
||||
|
||||
pItem = (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam;
|
||||
if (!pItem)
|
||||
return TRUE;
|
||||
pItem = (PFOLDER_FILE_TYPE_ENTRY)lvItem.lParam;
|
||||
if (!pItem)
|
||||
return TRUE;
|
||||
|
||||
if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED))
|
||||
if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED))
|
||||
{
|
||||
/* new focused item */
|
||||
if (!LoadStringW(shell32_hInstance, IDS_FILE_DETAILS, FormatBuffer, sizeof(FormatBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
/* new focused item */
|
||||
if (!LoadStringW(shell32_hInstance, IDS_FILE_DETAILS, FormatBuffer, sizeof(FormatBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
/* use default english format string */
|
||||
wcscpy(FormatBuffer, L"Details for '%s' extension");
|
||||
}
|
||||
|
||||
/* format buffer */
|
||||
swprintf(Buffer, FormatBuffer, &pItem->FileExtension[1]);
|
||||
/* update dialog */
|
||||
SetDlgItemTextW(hwndDlg, 14003, Buffer);
|
||||
|
||||
if (!LoadStringW(shell32_hInstance, IDS_FILE_DETAILSADV, FormatBuffer, sizeof(FormatBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
/* use default english format string */
|
||||
wcscpy(FormatBuffer, L"Files with extension '%s' are of type '%s'. To change settings that affect all '%s' files, click Advanced.");
|
||||
}
|
||||
/* format buffer */
|
||||
swprintf(Buffer, FormatBuffer, &pItem->FileExtension[1], &pItem->FileDescription[0], &pItem->FileDescription[0]);
|
||||
/* update dialog */
|
||||
SetDlgItemTextW(hwndDlg, 14007, Buffer);
|
||||
/* use default english format string */
|
||||
wcscpy(FormatBuffer, L"Details for '%s' extension");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* format buffer */
|
||||
swprintf(Buffer, FormatBuffer, &pItem->FileExtension[1]);
|
||||
/* update dialog */
|
||||
SetDlgItemTextW(hwndDlg, 14003, Buffer);
|
||||
|
||||
if (!LoadStringW(shell32_hInstance, IDS_FILE_DETAILSADV, FormatBuffer, sizeof(FormatBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
/* use default english format string */
|
||||
wcscpy(FormatBuffer, L"Files with extension '%s' are of type '%s'. To change settings that affect all '%s' files, click Advanced.");
|
||||
}
|
||||
/* format buffer */
|
||||
swprintf(Buffer, FormatBuffer, &pItem->FileExtension[1], &pItem->FileDescription[0], &pItem->FileDescription[0]);
|
||||
/* update dialog */
|
||||
SetDlgItemTextW(hwndDlg, 14007, Buffer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
@ -517,16 +517,16 @@ Options_RunDLLCommon(HWND hWnd, HINSTANCE hInst, int fOptions, DWORD nCmdShow)
|
|||
{
|
||||
switch(fOptions)
|
||||
{
|
||||
case 0:
|
||||
ShowFolderOptionsDialog(hWnd, hInst);
|
||||
break;
|
||||
case 1:
|
||||
// show taskbar options dialog
|
||||
FIXME("notify explorer to show taskbar options dialog");
|
||||
//PostMessage(GetShellWindow(), WM_USER+22, fOptions, 0);
|
||||
break;
|
||||
default:
|
||||
FIXME("unrecognized options id %d\n", fOptions);
|
||||
case 0:
|
||||
ShowFolderOptionsDialog(hWnd, hInst);
|
||||
break;
|
||||
case 1:
|
||||
// show taskbar options dialog
|
||||
FIXME("notify explorer to show taskbar options dialog");
|
||||
//PostMessage(GetShellWindow(), WM_USER+22, fOptions, 0);
|
||||
break;
|
||||
default:
|
||||
FIXME("unrecognized options id %d\n", fOptions);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -568,14 +568,14 @@ CountFolderAndFiles(LPVOID lParam)
|
|||
|
||||
pOffset = PathAddBackslashW(pContext->szFolderPath);
|
||||
if (!pOffset)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
Length = pOffset - pContext->szFolderPath;
|
||||
|
||||
wcscpy(pOffset, L"*.*");
|
||||
hFile = FindFirstFileW(pContext->szFolderPath, &FindData);
|
||||
if (hFile == INVALID_HANDLE_VALUE)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
do
|
||||
{
|
||||
|
@ -585,7 +585,7 @@ CountFolderAndFiles(LPVOID lParam)
|
|||
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
{
|
||||
if (FindData.cFileName[0] == L'.' && FindData.cFileName[1] == L'.' &&
|
||||
FindData.cFileName[2] == L'\0')
|
||||
FindData.cFileName[2] == L'\0')
|
||||
continue;
|
||||
|
||||
pContext->cFolder++;
|
||||
|
@ -600,13 +600,13 @@ CountFolderAndFiles(LPVOID lParam)
|
|||
|
||||
pContext->cFiles++;
|
||||
pContext->bSize.QuadPart += FileSize.QuadPart;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (GetLastError() == ERROR_NO_MORE_FILES)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}while(1);
|
||||
} while(1);
|
||||
|
||||
FindClose(hFile);
|
||||
return 1;
|
||||
|
@ -623,7 +623,7 @@ InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext)
|
|||
WCHAR szBuffer[MAX_PATH+5];
|
||||
WCHAR szFormat[30] = {0};
|
||||
|
||||
static const WCHAR wFormat[] = {'%','0','2','d','/','%','0','2','d','/','%','0','4','d',' ',' ','%','0','2','d',':','%','0','2','u',0};
|
||||
static const WCHAR wFormat[] = {'%', '0', '2', 'd', '/', '%', '0', '2', 'd', '/', '%', '0', '4', 'd', ' ', ' ', '%', '0', '2', 'd', ':', '%', '0', '2', 'u', 0};
|
||||
|
||||
pFolderName = wcsrchr(pContext->szFolderPath, L'\\');
|
||||
if (!pFolderName)
|
||||
|
@ -636,7 +636,7 @@ InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext)
|
|||
if (wcslen(pContext->szFolderPath) == 2)
|
||||
{
|
||||
/* folder is located at root */
|
||||
WCHAR szDrive[4] = {L'C',L':',L'\\',L'\0'};
|
||||
WCHAR szDrive[4] = {L'C', L':', L'\\', L'\0'};
|
||||
szDrive[0] = pContext->szFolderPath[0];
|
||||
SetDlgItemTextW(pContext->hwndDlg, 14007, szDrive);
|
||||
}
|
||||
|
@ -660,24 +660,24 @@ InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext)
|
|||
SendDlgItemMessage(pContext->hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0);
|
||||
}
|
||||
|
||||
if (FileTimeToLocalFileTime(&FolderAttribute.ftCreationTime, &ft))
|
||||
{
|
||||
FileTimeToSystemTime(&ft, &dt);
|
||||
swprintf (szBuffer, wFormat, dt.wDay, dt.wMonth, dt.wYear, dt.wHour, dt.wMinute);
|
||||
SetDlgItemTextW(pContext->hwndDlg, 14015, szBuffer);
|
||||
}
|
||||
if (FileTimeToLocalFileTime(&FolderAttribute.ftCreationTime, &ft))
|
||||
{
|
||||
FileTimeToSystemTime(&ft, &dt);
|
||||
swprintf (szBuffer, wFormat, dt.wDay, dt.wMonth, dt.wYear, dt.wHour, dt.wMinute);
|
||||
SetDlgItemTextW(pContext->hwndDlg, 14015, szBuffer);
|
||||
}
|
||||
}
|
||||
/* now enumerate enumerate contents */
|
||||
wcscpy(szBuffer, pContext->szFolderPath);
|
||||
CountFolderAndFiles((LPVOID)pContext);
|
||||
wcscpy(pContext->szFolderPath, szBuffer);
|
||||
/* set folder details */
|
||||
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, szFormat, sizeof(szFormat)/sizeof(WCHAR));
|
||||
LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, szFormat, sizeof(szFormat) / sizeof(WCHAR));
|
||||
szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0';
|
||||
swprintf(szBuffer, szFormat, pContext->cFiles, pContext->cFolder);
|
||||
SetDlgItemTextW(pContext->hwndDlg, 14011, szBuffer);
|
||||
|
||||
if (SH_FormatFileSizeWithBytes(&pContext->bSize, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (SH_FormatFileSizeWithBytes(&pContext->bSize, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
/* store folder size */
|
||||
SetDlgItemTextW(pContext->hwndDlg, 14009, szBuffer);
|
||||
|
@ -710,7 +710,7 @@ FolderPropertiesGeneralDlg(
|
|||
break;
|
||||
hIcon = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_FOLDER_OPEN));
|
||||
if (hIcon)
|
||||
SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0);
|
||||
SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0);
|
||||
|
||||
pContext = (FOLDER_PROPERTIES_CONTEXT *)SHAlloc(sizeof(FOLDER_PROPERTIES_CONTEXT));
|
||||
if (pContext)
|
||||
|
@ -725,7 +725,7 @@ FolderPropertiesGeneralDlg(
|
|||
case WM_COMMAND:
|
||||
if (HIWORD(wParam) == BN_CLICKED)
|
||||
{
|
||||
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
||||
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
||||
}
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
|
@ -751,8 +751,8 @@ FolderPropertiesGeneralDlg(
|
|||
else
|
||||
FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_HIDDEN);
|
||||
|
||||
Attribute = FolderAttribute.dwFileAttributes &
|
||||
(FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY);
|
||||
Attribute = FolderAttribute.dwFileAttributes &
|
||||
(FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_TEMPORARY);
|
||||
|
||||
SetFileAttributesW(pContext->szFolderPath, Attribute);
|
||||
}
|
||||
|
@ -815,19 +815,19 @@ SH_ShowFolderProperties(LPWSTR pwszFolder, LPCITEMIDLIST pidlFolder, LPCITEMIDL
|
|||
|
||||
if (SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (void**)&pDataObj) == S_OK)
|
||||
{
|
||||
hpsx = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"Directory", MAX_PROPERTY_SHEET_PAGE-1, pDataObj);
|
||||
hpsx = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"Directory", MAX_PROPERTY_SHEET_PAGE - 1, pDataObj);
|
||||
if (hpsx)
|
||||
{
|
||||
SHAddFromPropSheetExtArray(hpsx,
|
||||
(LPFNADDPROPSHEETPAGE)FolderAddPropSheetPageProc,
|
||||
(LPARAM)&psh);
|
||||
(LPFNADDPROPSHEETPAGE)FolderAddPropSheetPageProc,
|
||||
(LPARAM)&psh);
|
||||
}
|
||||
}
|
||||
|
||||
ret = PropertySheetW(&psh);
|
||||
|
||||
if (hpsx)
|
||||
SHDestroyPropSheetExtArray(hpsx);
|
||||
if (hpsx)
|
||||
SHDestroyPropSheetExtArray(hpsx);
|
||||
|
||||
if (ret < 0)
|
||||
return FALSE;
|
||||
|
|
|
@ -27,40 +27,40 @@ DWORD NumIconOverlayHandlers = 0;
|
|||
IShellIconOverlayIdentifier ** Handlers = NULL;
|
||||
|
||||
static HRESULT getIconLocationForFolder(LPCITEMIDLIST pidl, UINT uFlags,
|
||||
LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
|
||||
LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
|
||||
{
|
||||
int icon_idx;
|
||||
WCHAR wszPath[MAX_PATH];
|
||||
WCHAR wszCLSIDValue[CHARS_IN_GUID];
|
||||
static const WCHAR shellClassInfo[] = { '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0 };
|
||||
static const WCHAR iconFile[] = { 'I','c','o','n','F','i','l','e',0 };
|
||||
static const WCHAR clsid[] = { 'C','L','S','I','D',0 };
|
||||
static const WCHAR clsid2[] = { 'C','L','S','I','D','2',0 };
|
||||
static const WCHAR iconIndex[] = { 'I','c','o','n','I','n','d','e','x',0 };
|
||||
static const WCHAR shellClassInfo[] = { '.', 'S', 'h', 'e', 'l', 'l', 'C', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 };
|
||||
static const WCHAR iconFile[] = { 'I', 'c', 'o', 'n', 'F', 'i', 'l', 'e', 0 };
|
||||
static const WCHAR clsid[] = { 'C', 'L', 'S', 'I', 'D', 0 };
|
||||
static const WCHAR clsid2[] = { 'C', 'L', 'S', 'I', 'D', '2', 0 };
|
||||
static const WCHAR iconIndex[] = { 'I', 'c', 'o', 'n', 'I', 'n', 'd', 'e', 'x', 0 };
|
||||
|
||||
if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, iconFile,
|
||||
wszPath, MAX_PATH))
|
||||
wszPath, MAX_PATH))
|
||||
{
|
||||
WCHAR wszIconIndex[10];
|
||||
SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, iconIndex,
|
||||
wszIconIndex, 10);
|
||||
wszIconIndex, 10);
|
||||
*piIndex = _wtoi(wszIconIndex);
|
||||
}
|
||||
else if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, clsid,
|
||||
wszCLSIDValue, CHARS_IN_GUID) &&
|
||||
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
|
||||
wszCLSIDValue, CHARS_IN_GUID) &&
|
||||
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
|
||||
{
|
||||
*piIndex = icon_idx;
|
||||
*piIndex = icon_idx;
|
||||
}
|
||||
else if (SHELL32_GetCustomFolderAttribute(pidl, shellClassInfo, clsid2,
|
||||
wszCLSIDValue, CHARS_IN_GUID) &&
|
||||
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
|
||||
wszCLSIDValue, CHARS_IN_GUID) &&
|
||||
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
|
||||
{
|
||||
*piIndex = icon_idx;
|
||||
*piIndex = icon_idx;
|
||||
}
|
||||
else
|
||||
{
|
||||
static const WCHAR folder[] = { 'F','o','l','d','e','r',0 };
|
||||
static const WCHAR folder[] = { 'F', 'o', 'l', 'd', 'e', 'r', 0 };
|
||||
|
||||
if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &icon_idx))
|
||||
{
|
||||
|
@ -69,7 +69,7 @@ static HRESULT getIconLocationForFolder(LPCITEMIDLIST pidl, UINT uFlags,
|
|||
}
|
||||
|
||||
if (uFlags & GIL_OPENICON)
|
||||
*piIndex = icon_idx<0? icon_idx-1: icon_idx+1;
|
||||
*piIndex = icon_idx < 0 ? icon_idx - 1 : icon_idx + 1;
|
||||
else
|
||||
*piIndex = icon_idx;
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ void InitIconOverlays(void)
|
|||
CLSID clsid;
|
||||
IShellIconOverlayIdentifier * Overlay;
|
||||
|
||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers",0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
return;
|
||||
|
||||
if (RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &dwResult, NULL, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
|
||||
|
@ -132,7 +132,7 @@ void InitIconOverlays(void)
|
|||
|
||||
dwIndex++;
|
||||
|
||||
}while(1);
|
||||
} while(1);
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
@ -212,48 +212,59 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
|
|||
else if ((riid = _ILGetGUIDPointer(pSimplePidl)))
|
||||
{
|
||||
/* my computer and other shell extensions */
|
||||
static const WCHAR fmt[] = { 'C','L','S','I','D','\\',
|
||||
'{','%','0','8','l','x','-','%','0','4','x','-','%','0','4','x','-',
|
||||
'%','0','2','x','%','0','2','x','-','%','0','2','x', '%','0','2','x',
|
||||
'%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x','}',0 };
|
||||
WCHAR xriid[50];
|
||||
static const WCHAR fmt[] = { 'C', 'L', 'S', 'I', 'D', '\\',
|
||||
'{', '%', '0', '8', 'l', 'x', '-', '%', '0', '4', 'x', '-', '%', '0', '4', 'x', '-',
|
||||
'%', '0', '2', 'x', '%', '0', '2', 'x', '-', '%', '0', '2', 'x', '%', '0', '2', 'x',
|
||||
'%', '0', '2', 'x', '%', '0', '2', 'x', '%', '0', '2', 'x', '%', '0', '2', 'x', '}', 0
|
||||
};
|
||||
WCHAR xriid[50];
|
||||
|
||||
swprintf(xriid, fmt,
|
||||
riid->Data1, riid->Data2, riid->Data3,
|
||||
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
|
||||
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]);
|
||||
swprintf(xriid, fmt,
|
||||
riid->Data1, riid->Data2, riid->Data3,
|
||||
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
|
||||
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]);
|
||||
|
||||
if (HCR_GetDefaultIconW(xriid, wTemp, MAX_PATH, &icon_idx))
|
||||
{
|
||||
initIcon->SetNormalIcon(wTemp, icon_idx);
|
||||
}
|
||||
if (HCR_GetDefaultIconW(xriid, wTemp, MAX_PATH, &icon_idx))
|
||||
{
|
||||
initIcon->SetNormalIcon(wTemp, icon_idx);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsEqualGUID(*riid, CLSID_MyComputer))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_COMPUTER);
|
||||
else if (IsEqualGUID(*riid, CLSID_MyDocuments))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_DOCUMENTS);
|
||||
else if (IsEqualGUID(*riid, CLSID_NetworkPlaces))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_NETWORK_PLACES);
|
||||
else
|
||||
{
|
||||
if (IsEqualGUID(*riid, CLSID_MyComputer))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_COMPUTER);
|
||||
else if (IsEqualGUID(*riid, CLSID_MyDocuments))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_DOCUMENTS);
|
||||
else if (IsEqualGUID(*riid, CLSID_NetworkPlaces))
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_NETWORK_PLACES);
|
||||
else
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_FOLDER);
|
||||
}
|
||||
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_FOLDER);
|
||||
}
|
||||
}
|
||||
|
||||
else if (_ILIsDrive (pSimplePidl))
|
||||
{
|
||||
static const WCHAR drive[] = { 'D','r','i','v','e',0 };
|
||||
static const WCHAR drive[] = { 'D', 'r', 'i', 'v', 'e', 0 };
|
||||
int icon_idx = -1;
|
||||
|
||||
if (_ILGetDrive(pSimplePidl, sTemp, MAX_PATH))
|
||||
{
|
||||
switch(GetDriveTypeA(sTemp))
|
||||
{
|
||||
case DRIVE_REMOVABLE: icon_idx = IDI_SHELL_FLOPPY; break;
|
||||
case DRIVE_CDROM: icon_idx = IDI_SHELL_CDROM; break;
|
||||
case DRIVE_REMOTE: icon_idx = IDI_SHELL_NETDRIVE; break;
|
||||
case DRIVE_RAMDISK: icon_idx = IDI_SHELL_RAMDISK; break;
|
||||
case DRIVE_NO_ROOT_DIR: icon_idx = IDI_SHELL_CDROM; break;
|
||||
case DRIVE_REMOVABLE:
|
||||
icon_idx = IDI_SHELL_FLOPPY;
|
||||
break;
|
||||
case DRIVE_CDROM:
|
||||
icon_idx = IDI_SHELL_CDROM;
|
||||
break;
|
||||
case DRIVE_REMOTE:
|
||||
icon_idx = IDI_SHELL_NETDRIVE;
|
||||
break;
|
||||
case DRIVE_RAMDISK:
|
||||
icon_idx = IDI_SHELL_RAMDISK;
|
||||
break;
|
||||
case DRIVE_NO_ROOT_DIR:
|
||||
icon_idx = IDI_SHELL_CDROM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -273,30 +284,30 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
|
|||
else if (_ILIsFolder (pSimplePidl))
|
||||
{
|
||||
if (SUCCEEDED(getIconLocationForFolder(
|
||||
pidl, 0, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
pidl, 0, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
{
|
||||
initIcon->SetNormalIcon(wTemp, icon_idx);
|
||||
}
|
||||
if (SUCCEEDED(getIconLocationForFolder(
|
||||
pidl, GIL_DEFAULTICON, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
pidl, GIL_DEFAULTICON, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
{
|
||||
initIcon->SetDefaultIcon(wTemp, icon_idx);
|
||||
}
|
||||
if (SUCCEEDED(getIconLocationForFolder(
|
||||
pidl, GIL_FORSHORTCUT, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
pidl, GIL_FORSHORTCUT, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
{
|
||||
initIcon->SetShortcutIcon(wTemp, icon_idx);
|
||||
}
|
||||
if (SUCCEEDED(getIconLocationForFolder(
|
||||
pidl, GIL_OPENICON, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
pidl, GIL_OPENICON, wTemp, MAX_PATH,
|
||||
&icon_idx,
|
||||
&flags)))
|
||||
{
|
||||
initIcon->SetOpenIcon(wTemp, icon_idx);
|
||||
}
|
||||
|
@ -313,7 +324,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
|
|||
else if (_ILGetExtension(pSimplePidl, sTemp, MAX_PATH))
|
||||
{
|
||||
if (HCR_MapTypeToValueA(sTemp, sTemp, MAX_PATH, TRUE)
|
||||
&& HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &icon_idx))
|
||||
&& HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &icon_idx))
|
||||
{
|
||||
if (!lstrcmpA("%1", sTemp)) /* icon is in the file */
|
||||
{
|
||||
|
|
|
@ -93,19 +93,19 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
|
|||
{
|
||||
switch (type)
|
||||
{
|
||||
case ILGDN_FORPARSING:
|
||||
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
|
||||
break;
|
||||
case ILGDN_NORMAL:
|
||||
flag = SHGDN_NORMAL;
|
||||
break;
|
||||
case ILGDN_INFOLDER:
|
||||
flag = SHGDN_INFOLDER;
|
||||
break;
|
||||
default:
|
||||
FIXME("Unknown type parameter = %x\n", type);
|
||||
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
|
||||
break;
|
||||
case ILGDN_FORPARSING:
|
||||
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
|
||||
break;
|
||||
case ILGDN_NORMAL:
|
||||
flag = SHGDN_NORMAL;
|
||||
break;
|
||||
case ILGDN_INFOLDER:
|
||||
flag = SHGDN_INFOLDER;
|
||||
break;
|
||||
default:
|
||||
FIXME("Unknown type parameter = %x\n", type);
|
||||
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
|
||||
break;
|
||||
}
|
||||
if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
|
||||
{
|
||||
|
@ -172,7 +172,7 @@ LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPCITEMIDLIST pidlLast = pidl;
|
||||
|
||||
TRACE("(pidl=%p)\n",pidl);
|
||||
TRACE("(pidl=%p)\n", pidl);
|
||||
|
||||
if (!pidl)
|
||||
return NULL;
|
||||
|
@ -193,7 +193,7 @@ LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
|
|||
*/
|
||||
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
|
||||
{
|
||||
TRACE_(shell)("pidl=%p\n",pidl);
|
||||
TRACE_(shell)("pidl=%p\n", pidl);
|
||||
|
||||
if (!pidl || !pidl->mkid.cb)
|
||||
return 0;
|
||||
|
@ -218,9 +218,9 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
|
|||
len = ILGetSize(pidl);
|
||||
newpidl = (LPITEMIDLIST)SHAlloc(len);
|
||||
if (newpidl)
|
||||
memcpy(newpidl,pidl,len);
|
||||
memcpy(newpidl, pidl, len);
|
||||
|
||||
TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
|
||||
TRACE("pidl=%p newpidl=%p\n", pidl, newpidl);
|
||||
pdump(pidl);
|
||||
|
||||
return newpidl;
|
||||
|
@ -243,16 +243,16 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
|
|||
if (pidl)
|
||||
{
|
||||
len = pidl->mkid.cb;
|
||||
pidlNew = (LPITEMIDLIST)SHAlloc(len+2);
|
||||
pidlNew = (LPITEMIDLIST)SHAlloc(len + 2);
|
||||
if (pidlNew)
|
||||
{
|
||||
memcpy(pidlNew,pidl,len+2); /* 2 -> mind a desktop pidl */
|
||||
memcpy(pidlNew, pidl, len + 2); /* 2 -> mind a desktop pidl */
|
||||
|
||||
if (len)
|
||||
ILGetNext(pidlNew)->mkid.cb = 0x00;
|
||||
}
|
||||
}
|
||||
TRACE("-- newpidl=%p\n",pidlNew);
|
||||
TRACE("-- newpidl=%p\n", pidlNew);
|
||||
|
||||
return pidlNew;
|
||||
}
|
||||
|
@ -447,9 +447,9 @@ LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl)
|
|||
len = ILGetSize(pidl);
|
||||
newpidl = (LPITEMIDLIST)Alloc(len);
|
||||
if (newpidl)
|
||||
memcpy(newpidl,pidl,len);
|
||||
memcpy(newpidl, pidl, len);
|
||||
|
||||
TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
|
||||
TRACE("pidl=%p newpidl=%p\n", pidl, newpidl);
|
||||
pdump(pidl);
|
||||
|
||||
return newpidl;
|
||||
|
@ -467,7 +467,7 @@ BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
|||
LPCITEMIDLIST pidltemp1 = pidl1;
|
||||
LPCITEMIDLIST pidltemp2 = pidl2;
|
||||
|
||||
TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
|
||||
TRACE("pidl1=%p pidl2=%p\n", pidl1, pidl2);
|
||||
|
||||
/*
|
||||
* Explorer reads from registry directly (StreamMRU),
|
||||
|
@ -581,9 +581,9 @@ LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
|||
|
||||
LPCITEMIDLIST pidltemp1 = pidl1;
|
||||
LPCITEMIDLIST pidltemp2 = pidl2;
|
||||
LPCITEMIDLIST ret=NULL;
|
||||
LPCITEMIDLIST ret = NULL;
|
||||
|
||||
TRACE("pidl1=%p pidl2=%p\n",pidl1, pidl2);
|
||||
TRACE("pidl1=%p pidl2=%p\n", pidl1, pidl2);
|
||||
|
||||
/* explorer reads from registry directly (StreamMRU),
|
||||
so we can only check here */
|
||||
|
@ -604,7 +604,7 @@ LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
|||
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
|
||||
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
|
||||
|
||||
if (strcmp(szData1,szData2))
|
||||
if (strcmp(szData1, szData2))
|
||||
break;
|
||||
|
||||
pidltemp1 = ILGetNext(pidltemp1);
|
||||
|
@ -640,10 +640,10 @@ LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
|||
*/
|
||||
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||
{
|
||||
DWORD len1,len2;
|
||||
DWORD len1, len2;
|
||||
LPITEMIDLIST pidlNew;
|
||||
|
||||
TRACE("pidl=%p pidl=%p\n",pidl1,pidl2);
|
||||
TRACE("pidl=%p pidl=%p\n", pidl1, pidl2);
|
||||
|
||||
if (!pidl1 && !pidl2) return NULL;
|
||||
|
||||
|
@ -662,14 +662,14 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
|||
return pidlNew;
|
||||
}
|
||||
|
||||
len1 = ILGetSize(pidl1)-2;
|
||||
len1 = ILGetSize(pidl1) - 2;
|
||||
len2 = ILGetSize(pidl2);
|
||||
pidlNew = (LPITEMIDLIST)SHAlloc(len1+len2);
|
||||
pidlNew = (LPITEMIDLIST)SHAlloc(len1 + len2);
|
||||
|
||||
if (pidlNew)
|
||||
{
|
||||
memcpy(pidlNew,pidl1,len1);
|
||||
memcpy(((BYTE *)pidlNew)+len1,pidl2,len2);
|
||||
memcpy(pidlNew, pidl1, len1);
|
||||
memcpy(((BYTE *)pidlNew) + len1, pidl2, len2);
|
||||
}
|
||||
|
||||
/* TRACE(pidl,"--new pidl=%p\n",pidlNew);*/
|
||||
|
@ -706,8 +706,8 @@ HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEM
|
|||
/*assert(pida->cidl==1);*/
|
||||
LPIDA pida = (LPIDA)GlobalLock(medium.hGlobal);
|
||||
|
||||
LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
|
||||
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
|
||||
LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[0]);
|
||||
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[1]);
|
||||
|
||||
*pidlReal = ILCombine(pidl_folder, pidl_child);
|
||||
|
||||
|
@ -731,7 +731,7 @@ HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEM
|
|||
*/
|
||||
EXTERN_C LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
|
||||
{
|
||||
FIXME("(pidl=%p)\n",pidl);
|
||||
FIXME("(pidl=%p)\n", pidl);
|
||||
|
||||
pdump(pidl);
|
||||
|
||||
|
@ -755,18 +755,18 @@ EXTERN_C LPITEMIDLIST WINAPI SHLogILFromFSIL(LPITEMIDLIST pidl)
|
|||
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
|
||||
{
|
||||
LPCSHITEMID si = &(pidl->mkid);
|
||||
UINT len=0;
|
||||
UINT len = 0;
|
||||
|
||||
if (pidl)
|
||||
{
|
||||
while (si->cb)
|
||||
{
|
||||
len += si->cb;
|
||||
si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
|
||||
si = (LPCSHITEMID)(((const BYTE*)si) + si->cb);
|
||||
}
|
||||
len += 2;
|
||||
}
|
||||
TRACE("pidl=%p size=%u\n",pidl, len);
|
||||
TRACE("pidl=%p size=%u\n", pidl, len);
|
||||
return len;
|
||||
}
|
||||
|
||||
|
@ -797,7 +797,7 @@ LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
|
|||
len = pidl->mkid.cb;
|
||||
if (len)
|
||||
{
|
||||
pidl = (LPCITEMIDLIST) (((const BYTE*)pidl)+len);
|
||||
pidl = (LPCITEMIDLIST) (((const BYTE*)pidl) + len);
|
||||
TRACE("-- %p\n", pidl);
|
||||
return (LPITEMIDLIST)pidl;
|
||||
}
|
||||
|
@ -824,7 +824,7 @@ EXTERN_C LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOO
|
|||
{
|
||||
LPITEMIDLIST idlRet;
|
||||
|
||||
WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
|
||||
WARN("(pidl=%p,pidl=%p,%08u)semi-stub\n", pidl, item, bEnd);
|
||||
|
||||
pdump (pidl);
|
||||
pdump (item);
|
||||
|
@ -861,7 +861,7 @@ EXTERN_C LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOO
|
|||
*/
|
||||
void WINAPI ILFree(LPITEMIDLIST pidl)
|
||||
{
|
||||
TRACE("(pidl=%p)\n",pidl);
|
||||
TRACE("(pidl=%p)\n", pidl);
|
||||
SHFree(pidl);
|
||||
}
|
||||
|
||||
|
@ -972,8 +972,8 @@ static HRESULT _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
|
|||
HRESULT ret;
|
||||
|
||||
TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
|
||||
ppidl, ppidl ? *ppidl : NULL,
|
||||
prgfInOut, prgfInOut ? *prgfInOut : 0);
|
||||
ppidl, ppidl ? *ppidl : NULL,
|
||||
prgfInOut, prgfInOut ? *prgfInOut : 0);
|
||||
|
||||
ret = SHGetDesktopFolder(&pSF);
|
||||
if (FAILED(ret))
|
||||
|
@ -1068,7 +1068,7 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
|
|||
LPSTR filename, shortname;
|
||||
WIN32_FIND_DATAA * pfd;
|
||||
|
||||
TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
|
||||
TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n", psf, pidl, nFormat, dest, len);
|
||||
|
||||
pdump(pidl);
|
||||
if (!psf || !dest)
|
||||
|
@ -1076,41 +1076,41 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
|
|||
|
||||
switch (nFormat)
|
||||
{
|
||||
case SHGDFIL_FINDDATA:
|
||||
pfd = (WIN32_FIND_DATAA *)dest;
|
||||
case SHGDFIL_FINDDATA:
|
||||
pfd = (WIN32_FIND_DATAA *)dest;
|
||||
|
||||
if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
|
||||
return E_INVALIDARG;
|
||||
if (_ILIsDrive(pidl) || _ILIsSpecialFolder(pidl))
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (len < (int)sizeof(WIN32_FIND_DATAA))
|
||||
return E_INVALIDARG;
|
||||
if (len < (int)sizeof(WIN32_FIND_DATAA))
|
||||
return E_INVALIDARG;
|
||||
|
||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||
|
||||
filename = _ILGetTextPointer(pidl);
|
||||
shortname = _ILGetSTextPointer(pidl);
|
||||
filename = _ILGetTextPointer(pidl);
|
||||
shortname = _ILGetSTextPointer(pidl);
|
||||
|
||||
if (filename)
|
||||
lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
|
||||
else
|
||||
pfd->cFileName[0] = '\0';
|
||||
if (filename)
|
||||
lstrcpynA(pfd->cFileName, filename, sizeof(pfd->cFileName));
|
||||
else
|
||||
pfd->cFileName[0] = '\0';
|
||||
|
||||
if (shortname)
|
||||
lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
|
||||
else
|
||||
pfd->cAlternateFileName[0] = '\0';
|
||||
return NOERROR;
|
||||
if (shortname)
|
||||
lstrcpynA(pfd->cAlternateFileName, shortname, sizeof(pfd->cAlternateFileName));
|
||||
else
|
||||
pfd->cAlternateFileName[0] = '\0';
|
||||
return NOERROR;
|
||||
|
||||
case SHGDFIL_NETRESOURCE:
|
||||
case SHGDFIL_DESCRIPTIONID:
|
||||
FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
|
||||
break;
|
||||
case SHGDFIL_NETRESOURCE:
|
||||
case SHGDFIL_DESCRIPTIONID:
|
||||
FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
|
||||
break;
|
||||
|
||||
default:
|
||||
ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
|
||||
default:
|
||||
ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
|
||||
}
|
||||
|
||||
return E_INVALIDARG;
|
||||
|
@ -1126,7 +1126,7 @@ HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
|
|||
LPSTR filename, shortname;
|
||||
WIN32_FIND_DATAW * pfd = (WIN32_FIND_DATAW *)dest;
|
||||
|
||||
TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n",psf,pidl,nFormat,dest,len);
|
||||
TRACE_(shell)("sf=%p pidl=%p 0x%04x %p 0x%04x stub\n", psf, pidl, nFormat, dest, len);
|
||||
|
||||
pdump(pidl);
|
||||
|
||||
|
@ -1135,41 +1135,41 @@ HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
|
|||
|
||||
switch (nFormat)
|
||||
{
|
||||
case SHGDFIL_FINDDATA:
|
||||
pfd = (WIN32_FIND_DATAW *)dest;
|
||||
case SHGDFIL_FINDDATA:
|
||||
pfd = (WIN32_FIND_DATAW *)dest;
|
||||
|
||||
if (_ILIsDrive(pidl))
|
||||
return E_INVALIDARG;
|
||||
if (_ILIsDrive(pidl))
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (len < (int)sizeof(WIN32_FIND_DATAW))
|
||||
return E_INVALIDARG;
|
||||
if (len < (int)sizeof(WIN32_FIND_DATAW))
|
||||
return E_INVALIDARG;
|
||||
|
||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||
|
||||
filename = _ILGetTextPointer(pidl);
|
||||
shortname = _ILGetSTextPointer(pidl);
|
||||
filename = _ILGetTextPointer(pidl);
|
||||
shortname = _ILGetSTextPointer(pidl);
|
||||
|
||||
if (!filename)
|
||||
pfd->cFileName[0] = '\0';
|
||||
else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
|
||||
pfd->cFileName[MAX_PATH-1] = 0;
|
||||
if (!filename)
|
||||
pfd->cFileName[0] = '\0';
|
||||
else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
|
||||
pfd->cFileName[MAX_PATH-1] = 0;
|
||||
|
||||
if (!shortname)
|
||||
pfd->cAlternateFileName[0] = '\0';
|
||||
else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
|
||||
pfd->cAlternateFileName[13] = 0;
|
||||
return NOERROR;
|
||||
if (!shortname)
|
||||
pfd->cAlternateFileName[0] = '\0';
|
||||
else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
|
||||
pfd->cAlternateFileName[13] = 0;
|
||||
return NOERROR;
|
||||
|
||||
case SHGDFIL_NETRESOURCE:
|
||||
case SHGDFIL_DESCRIPTIONID:
|
||||
FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
|
||||
break;
|
||||
case SHGDFIL_NETRESOURCE:
|
||||
case SHGDFIL_DESCRIPTIONID:
|
||||
FIXME_(shell)("SHGDFIL %i stub\n", nFormat);
|
||||
break;
|
||||
|
||||
default:
|
||||
ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
|
||||
default:
|
||||
ERR_(shell)("Unknown SHGDFIL %i, please report\n", nFormat);
|
||||
}
|
||||
|
||||
return E_INVALIDARG;
|
||||
|
@ -1241,7 +1241,7 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
|
|||
|
||||
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
|
||||
|
||||
TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
|
||||
TRACE_(shell)("-- %s, 0x%08x\n", debugstr_w(pszPath), hr);
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
|
@ -1251,7 +1251,7 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
|
|||
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
|
||||
{
|
||||
CComPtr<IShellFolder> psfDesktop;
|
||||
HRESULT hr=E_FAIL;
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
TRACE_(shell)("pidl=%p\n", pidl);
|
||||
pdump(pidl);
|
||||
|
@ -1283,7 +1283,7 @@ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCI
|
|||
if (SUCCEEDED(hr) && ppidlLast)
|
||||
*ppidlLast = ILFindLastID(pidl);
|
||||
|
||||
TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
|
||||
TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast) ? *ppidlLast : NULL, hr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
@ -1471,11 +1471,11 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
|||
if (!wfd)
|
||||
return NULL;
|
||||
|
||||
TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
|
||||
TRACE("(%s, %s)\n", debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
|
||||
|
||||
/* prepare buffer with both names */
|
||||
len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
|
||||
len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
|
||||
len = WideCharToMultiByte(CP_ACP, 0, wfd->cFileName, -1, buff, MAX_PATH, NULL, NULL);
|
||||
len1 = WideCharToMultiByte(CP_ACP, 0, wfd->cAlternateFileName, -1, buff + len, sizeof(buff) - len, NULL, NULL);
|
||||
alen = len + len1;
|
||||
|
||||
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
|
||||
|
@ -1503,7 +1503,7 @@ LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
|
|||
|
||||
pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
|
||||
*pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
|
||||
TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
|
||||
TRACE("-- Set Value: %s\n", debugstr_w(fsw->wszName));
|
||||
}
|
||||
return pidl;
|
||||
|
||||
|
@ -1532,7 +1532,7 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
|
|||
{
|
||||
LPITEMIDLIST pidlOut;
|
||||
|
||||
TRACE("(%s)\n",debugstr_w(lpszNew));
|
||||
TRACE("(%s)\n", debugstr_w(lpszNew));
|
||||
|
||||
pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
|
||||
if (pidlOut)
|
||||
|
@ -1543,7 +1543,7 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
|
|||
if (pszDest)
|
||||
{
|
||||
strcpy(pszDest, "x:\\");
|
||||
pszDest[0]=towupper(lpszNew[0]);
|
||||
pszDest[0] = towupper(lpszNew[0]);
|
||||
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
|
||||
}
|
||||
}
|
||||
|
@ -1558,9 +1558,9 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
|
|||
* RETURNS
|
||||
* strlen (lpszText)
|
||||
*/
|
||||
DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
|
||||
DWORD _ILGetDrive(LPCITEMIDLIST pidl, LPSTR pOut, UINT uSize)
|
||||
{
|
||||
TRACE("(%p,%p,%u)\n",pidl,pOut,uSize);
|
||||
TRACE("(%p,%p,%u)\n", pidl, pOut, uSize);
|
||||
|
||||
if(_ILIsMyComputer(pidl))
|
||||
pidl = ILGetNext(pidl);
|
||||
|
@ -1589,14 +1589,14 @@ BOOL _ILIsUnicode(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && lpPData && PT_VALUEW == lpPData->type);
|
||||
}
|
||||
|
||||
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
|
||||
{
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return pidl && pidl->mkid.cb ? 0 : 1;
|
||||
}
|
||||
|
@ -1605,7 +1605,7 @@ BOOL _ILIsMyDocuments(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_MyDocuments);
|
||||
|
@ -1616,7 +1616,7 @@ BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_ControlPanel);
|
||||
|
@ -1627,7 +1627,7 @@ BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_NetworkPlaces);
|
||||
|
@ -1649,7 +1649,7 @@ BOOL _ILIsMyComputer(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_MyComputer);
|
||||
|
@ -1660,7 +1660,7 @@ BOOL _ILIsPrinter(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_Printers);
|
||||
|
@ -1671,7 +1671,7 @@ BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_RecycleBin);
|
||||
|
@ -1682,7 +1682,7 @@ BOOL _ILIsAdminTools(LPCITEMIDLIST pidl)
|
|||
{
|
||||
IID *iid = _ILGetGUIDPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
if (iid)
|
||||
return IsEqualIID(*iid, CLSID_AdminFolderShortcut);
|
||||
|
@ -1694,30 +1694,30 @@ BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && ( (lpPData && (PT_GUID== lpPData->type || PT_SHELLEXT== lpPData->type || PT_YAGUID == lpPData->type)) ||
|
||||
(pidl && pidl->mkid.cb == 0x00)
|
||||
));
|
||||
return (pidl && ( (lpPData && (PT_GUID == lpPData->type || PT_SHELLEXT == lpPData->type || PT_YAGUID == lpPData->type)) ||
|
||||
(pidl && pidl->mkid.cb == 0x00)
|
||||
));
|
||||
}
|
||||
|
||||
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
|
||||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && lpPData && (PT_DRIVE == lpPData->type ||
|
||||
PT_DRIVE1 == lpPData->type ||
|
||||
PT_DRIVE2 == lpPData->type ||
|
||||
PT_DRIVE3 == lpPData->type));
|
||||
PT_DRIVE1 == lpPData->type ||
|
||||
PT_DRIVE2 == lpPData->type ||
|
||||
PT_DRIVE3 == lpPData->type));
|
||||
}
|
||||
|
||||
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
|
||||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && lpPData && (PT_FOLDER == lpPData->type || PT_FOLDER1 == lpPData->type));
|
||||
}
|
||||
|
@ -1726,7 +1726,7 @@ BOOL _ILIsValue(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && lpPData && PT_VALUE == lpPData->type);
|
||||
}
|
||||
|
@ -1735,7 +1735,7 @@ BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("(%p)\n",pidl);
|
||||
TRACE("(%p)\n", pidl);
|
||||
|
||||
return (pidl && lpPData && (lpPData->type == 0));
|
||||
}
|
||||
|
@ -1765,22 +1765,22 @@ BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl)
|
|||
* ### 3. section getting values from pidls ###
|
||||
*/
|
||||
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetText
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
*
|
||||
* returns the length of the string
|
||||
*/
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetText
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
*
|
||||
* returns the length of the string
|
||||
*/
|
||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
||||
{
|
||||
DWORD dwReturn=0;
|
||||
DWORD dwReturn = 0;
|
||||
LPSTR szSrc;
|
||||
LPWSTR szSrcW;
|
||||
GUID const * riid;
|
||||
char szTemp[MAX_PATH];
|
||||
|
||||
TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
|
||||
TRACE("(%p %p %x)\n", pidl, szOut, uOutSize);
|
||||
|
||||
if (!pidl)
|
||||
return 0;
|
||||
|
@ -1810,7 +1810,7 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
|||
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
|
||||
{
|
||||
/* unicode filesystem */
|
||||
WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
|
||||
|
||||
if (szOut)
|
||||
lstrcpynA(szOut, szTemp, uOutSize);
|
||||
|
@ -1833,23 +1833,23 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
|
|||
ERR("-- no text\n");
|
||||
}
|
||||
|
||||
TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
|
||||
TRACE("-- (%p=%s 0x%08x)\n", szOut, debugstr_a(szOut), dwReturn);
|
||||
return dwReturn;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetTextW
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
*
|
||||
* returns the length of the string
|
||||
*/
|
||||
/**************************************************************************
|
||||
* _ILSimpleGetTextW
|
||||
*
|
||||
* gets the text for the first item in the pidl (eg. simple pidl)
|
||||
*
|
||||
* returns the length of the string
|
||||
*/
|
||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
||||
{
|
||||
DWORD dwReturn;
|
||||
FileStructW *pFileStructW = _ILGetFileStructW(pidl);
|
||||
|
||||
TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
|
||||
TRACE("(%p %p %x)\n", pidl, szOut, uOutSize);
|
||||
|
||||
if (pFileStructW) {
|
||||
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
|
||||
|
@ -1859,7 +1859,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
|||
WCHAR szTemp[MAX_PATH];
|
||||
LPSTR szSrc;
|
||||
LPWSTR szSrcW;
|
||||
dwReturn=0;
|
||||
dwReturn = 0;
|
||||
|
||||
if (!pidl)
|
||||
return 0;
|
||||
|
@ -1913,7 +1913,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
|
|||
}
|
||||
}
|
||||
|
||||
TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
|
||||
TRACE("-- (%p=%s 0x%08x)\n", szOut, debugstr_w(szOut), dwReturn);
|
||||
return dwReturn;
|
||||
}
|
||||
|
||||
|
@ -1946,36 +1946,36 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
|
|||
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_GUID:
|
||||
case PT_SHELLEXT:
|
||||
case PT_YAGUID:
|
||||
return NULL;
|
||||
case PT_GUID:
|
||||
case PT_SHELLEXT:
|
||||
case PT_YAGUID:
|
||||
return NULL;
|
||||
|
||||
case PT_DRIVE:
|
||||
case PT_DRIVE1:
|
||||
case PT_DRIVE2:
|
||||
case PT_DRIVE3:
|
||||
/*return (LPSTR)&(pdata->u.drive.szDriveName);*/
|
||||
return NULL;
|
||||
case PT_DRIVE:
|
||||
case PT_DRIVE1:
|
||||
case PT_DRIVE2:
|
||||
case PT_DRIVE3:
|
||||
/*return (LPSTR)&(pdata->u.drive.szDriveName);*/
|
||||
return NULL;
|
||||
|
||||
case PT_FOLDER:
|
||||
case PT_FOLDER1:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
/*return (LPSTR)&(pdata->u.file.szNames);*/
|
||||
return NULL;
|
||||
case PT_FOLDER:
|
||||
case PT_FOLDER1:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
/*return (LPSTR)&(pdata->u.file.szNames);*/
|
||||
return NULL;
|
||||
|
||||
case PT_WORKGRP:
|
||||
case PT_COMP:
|
||||
case PT_NETWORK:
|
||||
case PT_NETPROVIDER:
|
||||
case PT_SHARE:
|
||||
/*return (LPSTR)&(pdata->u.network.szNames);*/
|
||||
return NULL;
|
||||
case PT_WORKGRP:
|
||||
case PT_COMP:
|
||||
case PT_NETWORK:
|
||||
case PT_NETPROVIDER:
|
||||
case PT_SHARE:
|
||||
/*return (LPSTR)&(pdata->u.network.szNames);*/
|
||||
return NULL;
|
||||
|
||||
case PT_VALUEW:
|
||||
return (LPWSTR)pdata->u.file.szNames;
|
||||
case PT_VALUEW:
|
||||
return (LPWSTR)pdata->u.file.szNames;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1996,33 +1996,33 @@ LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
|
|||
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_GUID:
|
||||
case PT_SHELLEXT:
|
||||
case PT_YAGUID:
|
||||
return NULL;
|
||||
case PT_GUID:
|
||||
case PT_SHELLEXT:
|
||||
case PT_YAGUID:
|
||||
return NULL;
|
||||
|
||||
case PT_DRIVE:
|
||||
case PT_DRIVE1:
|
||||
case PT_DRIVE2:
|
||||
case PT_DRIVE3:
|
||||
return pdata->u.drive.szDriveName;
|
||||
case PT_DRIVE:
|
||||
case PT_DRIVE1:
|
||||
case PT_DRIVE2:
|
||||
case PT_DRIVE3:
|
||||
return pdata->u.drive.szDriveName;
|
||||
|
||||
case PT_FOLDER:
|
||||
case PT_FOLDER1:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
return pdata->u.file.szNames;
|
||||
case PT_FOLDER:
|
||||
case PT_FOLDER1:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
return pdata->u.file.szNames;
|
||||
|
||||
case PT_WORKGRP:
|
||||
case PT_COMP:
|
||||
case PT_NETWORK:
|
||||
case PT_NETPROVIDER:
|
||||
case PT_SHARE:
|
||||
return pdata->u.network.szNames;
|
||||
case PT_WORKGRP:
|
||||
case PT_COMP:
|
||||
case PT_NETWORK:
|
||||
case PT_NETPROVIDER:
|
||||
case PT_SHARE:
|
||||
return pdata->u.network.szNames;
|
||||
|
||||
case PT_CPLAPPLET:
|
||||
return pdata->u.cpanel.szName;
|
||||
case PT_CPLAPPLET:
|
||||
return pdata->u.cpanel.szName;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2035,21 +2035,21 @@ static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
|
|||
{
|
||||
/* TRACE(pidl,"(pidl%p)\n", pidl); */
|
||||
|
||||
LPPIDLDATA pdata =_ILGetDataPointer(pidl);
|
||||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
|
||||
if (!pdata)
|
||||
return NULL;
|
||||
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
case PT_IESPECIAL1:
|
||||
case PT_IESPECIAL2:
|
||||
return pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1;
|
||||
|
||||
case PT_WORKGRP:
|
||||
return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
|
||||
case PT_WORKGRP:
|
||||
return pdata->u.network.szNames + strlen (pdata->u.network.szNames) + 1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2061,7 +2061,7 @@ static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
|
|||
*/
|
||||
IID* _ILGetGUIDPointer(LPCITEMIDLIST pidl)
|
||||
{
|
||||
LPPIDLDATA pdata =_ILGetDataPointer(pidl);
|
||||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
|
||||
TRACE("%p\n", pidl);
|
||||
|
||||
|
@ -2071,14 +2071,14 @@ IID* _ILGetGUIDPointer(LPCITEMIDLIST pidl)
|
|||
TRACE("pdata->type 0x%04x\n", pdata->type);
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_SHELLEXT:
|
||||
case PT_GUID:
|
||||
case PT_YAGUID:
|
||||
return &(pdata->u.guid.guid);
|
||||
case PT_SHELLEXT:
|
||||
case PT_GUID:
|
||||
case PT_YAGUID:
|
||||
return &(pdata->u.guid.guid);
|
||||
|
||||
default:
|
||||
TRACE("Unknown pidl type 0x%04x\n", pdata->type);
|
||||
break;
|
||||
default:
|
||||
TRACE("Unknown pidl type 0x%04x\n", pdata->type);
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2109,11 +2109,11 @@ FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) {
|
|||
* style with a FileStructW member. If we switch all our shellfolder-implementations to
|
||||
* the new format, this won't be a problem. For now, we do as many sanity checks as possible. */
|
||||
if (cbOffset & 0x1 || /* FileStructW member is word aligned in the pidl */
|
||||
/* FileStructW is positioned after FileStruct */
|
||||
cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
|
||||
/* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
|
||||
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
|
||||
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
|
||||
/* FileStructW is positioned after FileStruct */
|
||||
cbOffset < sizeof(pidl->mkid.cb) + sizeof(PIDLTYPE) + sizeof(FileStruct) ||
|
||||
/* There has to be enough space at cbOffset in the pidl to hold FileStructW and cbOffset */
|
||||
cbOffset > pidl->mkid.cb - sizeof(cbOffset) - sizeof(FileStructW) ||
|
||||
pidl->mkid.cb != cbOffset + pFileStructW->cbLen)
|
||||
{
|
||||
WARN("Invalid pidl format (cbOffset = %d)!\n", cbOffset);
|
||||
return NULL;
|
||||
|
@ -2146,19 +2146,19 @@ BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt)
|
|||
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt);
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
||||
{
|
||||
FILETIME ft,lft;
|
||||
FILETIME ft, lft;
|
||||
SYSTEMTIME time;
|
||||
BOOL ret;
|
||||
|
||||
|
@ -2167,7 +2167,7 @@ BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
FileTimeToLocalFileTime(&ft, &lft);
|
||||
FileTimeToSystemTime (&lft, &time);
|
||||
|
||||
ret = GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL, pOut, uOutSize);
|
||||
ret = GetDateFormatA(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, pOut, uOutSize);
|
||||
if (ret)
|
||||
{
|
||||
/* Append space + time without seconds */
|
||||
|
@ -2210,11 +2210,11 @@ DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
|
||||
switch (pdata->type)
|
||||
{
|
||||
case PT_VALUE:
|
||||
dwSize = pdata->u.file.dwFileSize;
|
||||
if (pOut)
|
||||
StrFormatKBSizeA(dwSize, pOut, uOutSize);
|
||||
return dwSize;
|
||||
case PT_VALUE:
|
||||
dwSize = pdata->u.file.dwFileSize;
|
||||
if (pOut)
|
||||
StrFormatKBSizeA(dwSize, pOut, uOutSize);
|
||||
return dwSize;
|
||||
}
|
||||
if (pOut)
|
||||
*pOut = 0x00;
|
||||
|
@ -2225,9 +2225,9 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
{
|
||||
char szTemp[MAX_PATH];
|
||||
const char * pPoint;
|
||||
LPCITEMIDLIST pidlTemp=pidl;
|
||||
LPCITEMIDLIST pidlTemp = pidl;
|
||||
|
||||
TRACE("pidl=%p\n",pidl);
|
||||
TRACE("pidl=%p\n", pidl);
|
||||
|
||||
if (!pidl)
|
||||
return FALSE;
|
||||
|
@ -2246,7 +2246,7 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
|
||||
pPoint++;
|
||||
lstrcpynA(pOut, pPoint, uOutSize);
|
||||
TRACE("%s\n",pOut);
|
||||
TRACE("%s\n", pOut);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -2298,7 +2298,7 @@ void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
pOut[0] = '\0';
|
||||
LoadStringA(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize);
|
||||
|
@ -2335,15 +2335,15 @@ DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
|
|||
|
||||
switch(pData->type)
|
||||
{
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
wAttrib = pData->u.file.uFileAttribs;
|
||||
break;
|
||||
case PT_FOLDER:
|
||||
case PT_VALUE:
|
||||
wAttrib = pData->u.file.uFileAttribs;
|
||||
break;
|
||||
}
|
||||
|
||||
if(uOutSize >= 6)
|
||||
{
|
||||
i=0;
|
||||
i = 0;
|
||||
if(wAttrib & FILE_ATTRIBUTE_READONLY)
|
||||
pOut[i++] = 'R';
|
||||
if(wAttrib & FILE_ATTRIBUTE_HIDDEN)
|
||||
|
|
|
@ -51,73 +51,73 @@
|
|||
* The structure of the pidl seems to be a union. The first byte of the
|
||||
* PIDLDATA describes the type of pidl.
|
||||
*
|
||||
* object ! first byte / ! format ! living space
|
||||
* ! size
|
||||
* ----------------------------------------------------------------
|
||||
* my computer 0x1F/20 guid (2) (usual)
|
||||
* network 0x1F guid
|
||||
* bitbucket 0x1F guid
|
||||
* drive 0x23/25 drive (usual)
|
||||
* drive 0x25/25 drive (lnk/persistent)
|
||||
* drive 0x29/25 drive
|
||||
* shell extension 0x2E guid
|
||||
* drive 0x2F drive (lnk/persistent)
|
||||
* folder/file 0x30 folder/file (1) (lnk/persistent)
|
||||
* folder 0x31 folder (usual)
|
||||
* valueA 0x32 file (ANSI file name)
|
||||
* valueW 0x34 file (Unicode file name)
|
||||
* workgroup 0x41 network (3)
|
||||
* computer 0x42 network (4)
|
||||
* net provider 0x46 network
|
||||
* whole network 0x47 network (5)
|
||||
* MSITStore 0x61 htmlhlp (7)
|
||||
* printers/ras connections 0x70 guid
|
||||
* history/favorites 0xb1 file
|
||||
* share 0xc3 network (6)
|
||||
* object ! first byte / ! format ! living space
|
||||
* ! size
|
||||
* ----------------------------------------------------------------
|
||||
* my computer 0x1F/20 guid (2) (usual)
|
||||
* network 0x1F guid
|
||||
* bitbucket 0x1F guid
|
||||
* drive 0x23/25 drive (usual)
|
||||
* drive 0x25/25 drive (lnk/persistent)
|
||||
* drive 0x29/25 drive
|
||||
* shell extension 0x2E guid
|
||||
* drive 0x2F drive (lnk/persistent)
|
||||
* folder/file 0x30 folder/file (1) (lnk/persistent)
|
||||
* folder 0x31 folder (usual)
|
||||
* valueA 0x32 file (ANSI file name)
|
||||
* valueW 0x34 file (Unicode file name)
|
||||
* workgroup 0x41 network (3)
|
||||
* computer 0x42 network (4)
|
||||
* net provider 0x46 network
|
||||
* whole network 0x47 network (5)
|
||||
* MSITStore 0x61 htmlhlp (7)
|
||||
* printers/ras connections 0x70 guid
|
||||
* history/favorites 0xb1 file
|
||||
* share 0xc3 network (6)
|
||||
*
|
||||
* guess: the persistent elements are non tracking
|
||||
*
|
||||
* (1) dummy byte is used, attributes are empty
|
||||
* (2) IID_MyComputer = 20D04FE0L-3AEA-1069-A2D8-08002B30309D
|
||||
* (3) two strings "workgroup" "Microsoft Network"
|
||||
* (4) two strings "\\sirius" "Microsoft Network"
|
||||
* (5) one string "Entire Network"
|
||||
* (6) two strings "\\sirius\c" "Microsoft Network"
|
||||
* (3) two strings "workgroup" "Microsoft Network"
|
||||
* (4) two strings "\\sirius" "Microsoft Network"
|
||||
* (5) one string "Entire Network"
|
||||
* (6) two strings "\\sirius\c" "Microsoft Network"
|
||||
* (7) contains string "mk:@MSITStore:C:\path\file.chm::/path/filename.htm"
|
||||
* GUID 871C5380-42A0-1069-A2EA-08002B30309D
|
||||
* GUID 871C5380-42A0-1069-A2EA-08002B30309D
|
||||
*/
|
||||
|
||||
#define PT_CPLAPPLET 0x00
|
||||
#define PT_GUID 0x1F
|
||||
#define PT_DRIVE 0x23
|
||||
#define PT_DRIVE2 0x25
|
||||
#define PT_DRIVE3 0x29
|
||||
#define PT_SHELLEXT 0x2E
|
||||
#define PT_DRIVE1 0x2F
|
||||
#define PT_FOLDER1 0x30
|
||||
#define PT_FOLDER 0x31
|
||||
#define PT_VALUE 0x32
|
||||
#define PT_CPLAPPLET 0x00
|
||||
#define PT_GUID 0x1F
|
||||
#define PT_DRIVE 0x23
|
||||
#define PT_DRIVE2 0x25
|
||||
#define PT_DRIVE3 0x29
|
||||
#define PT_SHELLEXT 0x2E
|
||||
#define PT_DRIVE1 0x2F
|
||||
#define PT_FOLDER1 0x30
|
||||
#define PT_FOLDER 0x31
|
||||
#define PT_VALUE 0x32
|
||||
#define PT_VALUEW 0x34
|
||||
#define PT_WORKGRP 0x41
|
||||
#define PT_COMP 0x42
|
||||
#define PT_WORKGRP 0x41
|
||||
#define PT_COMP 0x42
|
||||
#define PT_NETPROVIDER 0x46
|
||||
#define PT_NETWORK 0x47
|
||||
#define PT_IESPECIAL1 0x61
|
||||
#define PT_YAGUID 0x70 /* yet another guid.. */
|
||||
#define PT_CPEXT 0x71
|
||||
#define PT_IESPECIAL2 0xb1
|
||||
#define PT_SHARE 0xc3
|
||||
#define PT_NETWORK 0x47
|
||||
#define PT_IESPECIAL1 0x61
|
||||
#define PT_YAGUID 0x70 /* yet another guid.. */
|
||||
#define PT_CPEXT 0x71
|
||||
#define PT_IESPECIAL2 0xb1
|
||||
#define PT_SHARE 0xc3
|
||||
|
||||
#include "pshpack1.h"
|
||||
typedef BYTE PIDLTYPE;
|
||||
|
||||
typedef struct tagPIDLCPanelStruct
|
||||
{
|
||||
BYTE dummy; /*01 is 0x00 */
|
||||
DWORD iconIdx; /*02 negative icon ID */
|
||||
WORD offsDispName; /*06*/
|
||||
WORD offsComment; /*08*/
|
||||
CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */
|
||||
BYTE dummy; /*01 is 0x00 */
|
||||
DWORD iconIdx; /*02 negative icon ID */
|
||||
WORD offsDispName; /*06*/
|
||||
WORD offsComment; /*08*/
|
||||
CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */
|
||||
} PIDLCPanelStruct;
|
||||
|
||||
typedef struct tagPIDLFontStruct
|
||||
|
@ -133,17 +133,17 @@ typedef struct tagPIDLPrinterStruct
|
|||
DWORD Attributes;
|
||||
WORD offsServer;
|
||||
WCHAR szName[1];
|
||||
}PIDLPrinterStruct;
|
||||
} PIDLPrinterStruct;
|
||||
|
||||
typedef struct tagPIDLRecycleStruct
|
||||
{
|
||||
FILETIME LastModification;
|
||||
FILETIME DeletionTime;
|
||||
ULARGE_INTEGER FileSize;
|
||||
ULARGE_INTEGER PhysicalFileSize;
|
||||
DWORD Attributes;
|
||||
WCHAR szName[1];
|
||||
}PIDLRecycleStruct;
|
||||
FILETIME LastModification;
|
||||
FILETIME DeletionTime;
|
||||
ULARGE_INTEGER FileSize;
|
||||
ULARGE_INTEGER PhysicalFileSize;
|
||||
DWORD Attributes;
|
||||
WCHAR szName[1];
|
||||
} PIDLRecycleStruct;
|
||||
|
||||
typedef struct tagGUIDStruct
|
||||
{
|
||||
|
@ -153,18 +153,18 @@ typedef struct tagGUIDStruct
|
|||
|
||||
typedef struct tagDriveStruct
|
||||
{
|
||||
CHAR szDriveName[20]; /*01*/
|
||||
WORD unknown; /*21*/
|
||||
CHAR szDriveName[20]; /*01*/
|
||||
WORD unknown; /*21*/
|
||||
} DriveStruct;
|
||||
|
||||
typedef struct tagFileStruct
|
||||
{
|
||||
BYTE dummy; /*01 is 0x00 for files or dirs */
|
||||
DWORD dwFileSize; /*02*/
|
||||
WORD uFileDate; /*06*/
|
||||
WORD uFileTime; /*08*/
|
||||
WORD uFileAttribs; /*10*/
|
||||
CHAR szNames[0]; /*12*/
|
||||
BYTE dummy; /*01 is 0x00 for files or dirs */
|
||||
DWORD dwFileSize; /*02*/
|
||||
WORD uFileDate; /*06*/
|
||||
WORD uFileTime; /*08*/
|
||||
WORD uFileAttribs; /*10*/
|
||||
CHAR szNames[0]; /*12*/
|
||||
/* Here are coming two strings. The first is the long name.
|
||||
The second the dos name when needed or just 0x00 */
|
||||
} FileStruct;
|
||||
|
@ -189,69 +189,71 @@ typedef struct tagValueW
|
|||
} ValueWStruct;
|
||||
|
||||
typedef struct tagPIDLDATA
|
||||
{ PIDLTYPE type; /*00*/
|
||||
union
|
||||
{
|
||||
struct tagGUIDStruct guid;
|
||||
struct tagDriveStruct drive;
|
||||
struct tagFileStruct file;
|
||||
struct
|
||||
{ WORD dummy; /*01*/
|
||||
CHAR szNames[1]; /*03*/
|
||||
} network;
|
||||
struct
|
||||
{ WORD dummy; /*01*/
|
||||
DWORD dummy1; /*02*/
|
||||
CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */
|
||||
} htmlhelp;
|
||||
struct tagPIDLCPanelStruct cpanel;
|
||||
struct tagValueW valueW;
|
||||
struct tagPIDLFontStruct cfont;
|
||||
struct tagPIDLPrinterStruct cprinter;
|
||||
struct tagPIDLRecycleStruct crecycle;
|
||||
}u;
|
||||
{ PIDLTYPE type; /*00*/
|
||||
union
|
||||
{
|
||||
struct tagGUIDStruct guid;
|
||||
struct tagDriveStruct drive;
|
||||
struct tagFileStruct file;
|
||||
struct
|
||||
{ WORD dummy; /*01*/
|
||||
CHAR szNames[1]; /*03*/
|
||||
} network;
|
||||
struct
|
||||
{ WORD dummy; /*01*/
|
||||
DWORD dummy1; /*02*/
|
||||
CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */
|
||||
} htmlhelp;
|
||||
struct tagPIDLCPanelStruct cpanel;
|
||||
struct tagValueW valueW;
|
||||
struct tagPIDLFontStruct cfont;
|
||||
struct tagPIDLPrinterStruct cprinter;
|
||||
struct tagPIDLRecycleStruct crecycle;
|
||||
} u;
|
||||
} PIDLDATA, *LPPIDLDATA;
|
||||
#include "poppack.h"
|
||||
|
||||
/*
|
||||
* getting special values from simple pidls
|
||||
*/
|
||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize);
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize);
|
||||
BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize);
|
||||
|
||||
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft);
|
||||
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
|
||||
BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft);
|
||||
DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
|
||||
|
||||
/*
|
||||
* testing simple pidls
|
||||
*/
|
||||
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsPrinter (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsControlPanel (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsBitBucket (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsAdminTools (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsNetHood (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsFolder (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsValue (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsFolder (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsValue (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsPidlSimple (LPCITEMIDLIST pidl);
|
||||
BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl);
|
||||
static BOOL __inline _ILIsEqualSimple (LPCITEMIDLIST pidlA, LPCITEMIDLIST pidlB)
|
||||
{
|
||||
return (pidlA->mkid.cb > 0 && !memcmp(pidlA, pidlB, pidlA->mkid.cb)) ||
|
||||
(!pidlA->mkid.cb && !pidlB->mkid.cb);
|
||||
(!pidlA->mkid.cb && !pidlB->mkid.cb);
|
||||
}
|
||||
static
|
||||
BOOL __inline _ILIsEmpty (LPCITEMIDLIST pidl) {
|
||||
return _ILIsDesktop(pidl);
|
||||
}
|
||||
static
|
||||
BOOL __inline _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDesktop(pidl); }
|
||||
|
||||
/*
|
||||
* simple pidls
|
||||
|
@ -260,43 +262,43 @@ BOOL __inline _ILIsEmpty (LPCITEMIDLIST pidl) { return _ILIsDeskto
|
|||
/* Creates a PIDL with guid format and type type, which must be one of PT_GUID,
|
||||
* PT_SHELLEXT, or PT_YAGUID.
|
||||
*/
|
||||
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid);
|
||||
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid);
|
||||
|
||||
/* Like _ILCreateGuid, but using the string szGUID. */
|
||||
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
|
||||
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID);
|
||||
LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID);
|
||||
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID);
|
||||
|
||||
/* Commonly used PIDLs representing file system objects. */
|
||||
LPITEMIDLIST _ILCreateDesktop (void);
|
||||
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
|
||||
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
|
||||
LPITEMIDLIST _ILCreateDesktop (void);
|
||||
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
|
||||
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
|
||||
|
||||
/* Other helpers */
|
||||
LPITEMIDLIST _ILCreateMyComputer (void);
|
||||
LPITEMIDLIST _ILCreateMyDocuments (void);
|
||||
LPITEMIDLIST _ILCreateIExplore (void);
|
||||
LPITEMIDLIST _ILCreateControlPanel (void);
|
||||
LPITEMIDLIST _ILCreatePrinters (void);
|
||||
LPITEMIDLIST _ILCreateNetwork (void);
|
||||
LPITEMIDLIST _ILCreateNetHood (void);
|
||||
LPITEMIDLIST _ILCreateAdminTools (void);
|
||||
LPITEMIDLIST _ILCreateFont (void);
|
||||
LPITEMIDLIST _ILCreateBitBucket (void);
|
||||
LPITEMIDLIST _ILCreateDrive (LPCWSTR);
|
||||
LPITEMIDLIST _ILCreateMyComputer (void);
|
||||
LPITEMIDLIST _ILCreateMyDocuments (void);
|
||||
LPITEMIDLIST _ILCreateIExplore (void);
|
||||
LPITEMIDLIST _ILCreateControlPanel (void);
|
||||
LPITEMIDLIST _ILCreatePrinters (void);
|
||||
LPITEMIDLIST _ILCreateNetwork (void);
|
||||
LPITEMIDLIST _ILCreateNetHood (void);
|
||||
LPITEMIDLIST _ILCreateAdminTools (void);
|
||||
LPITEMIDLIST _ILCreateFont (void);
|
||||
LPITEMIDLIST _ILCreateBitBucket (void);
|
||||
LPITEMIDLIST _ILCreateDrive (LPCWSTR);
|
||||
|
||||
/*
|
||||
* helper functions (getting struct-pointer)
|
||||
*/
|
||||
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
|
||||
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
|
||||
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
|
||||
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
|
||||
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
|
||||
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
|
||||
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl);
|
||||
|
||||
/*
|
||||
* debug helper
|
||||
*/
|
||||
void pdump (LPCITEMIDLIST pidl);
|
||||
BOOL pcheck (LPCITEMIDLIST pidl);
|
||||
void pdump (LPCITEMIDLIST pidl);
|
||||
BOOL pcheck (LPCITEMIDLIST pidl);
|
||||
|
||||
/*
|
||||
* aPidl helper
|
||||
|
|
|
@ -575,7 +575,7 @@ static GUID const CLSID_Shortcut = {
|
|||
0x00021401, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} };
|
||||
|
||||
static struct regsvr_coclass const coclass_list[] = {
|
||||
{ &CLSID_Desktop,
|
||||
/*{ &CLSID_Desktop,
|
||||
"Desktop",
|
||||
IDS_DESKTOP,
|
||||
NULL,
|
||||
|
@ -634,7 +634,7 @@ static struct regsvr_coclass const coclass_list[] = {
|
|||
NULL,
|
||||
NULL,
|
||||
IDI_SHELL_MY_NETWORK_PLACES
|
||||
},
|
||||
},*/
|
||||
{ &CLSID_FontsFolderShortcut,
|
||||
"Fonts",
|
||||
IDS_FONTS,
|
||||
|
@ -648,7 +648,7 @@ static struct regsvr_coclass const coclass_list[] = {
|
|||
NULL,
|
||||
IDI_SHELL_FONTS_FOLDER
|
||||
},
|
||||
{ &CLSID_AdminFolderShortcut,
|
||||
/*{ &CLSID_AdminFolderShortcut,
|
||||
"Administrative Tools",
|
||||
IDS_ADMINISTRATIVETOOLS,
|
||||
NULL,
|
||||
|
@ -660,8 +660,8 @@ static struct regsvr_coclass const coclass_list[] = {
|
|||
NULL,
|
||||
NULL,
|
||||
IDI_SHELL_ADMINTOOLS //FIXME
|
||||
},
|
||||
{ &CLSID_Shortcut,
|
||||
},*/
|
||||
/*{ &CLSID_Shortcut,
|
||||
"Shortcut",
|
||||
0,
|
||||
NULL,
|
||||
|
@ -737,7 +737,7 @@ static struct regsvr_coclass const coclass_list[] = {
|
|||
NULL,
|
||||
"shell32.dll",
|
||||
"Apartment"
|
||||
},
|
||||
},*/
|
||||
{ NULL } /* list terminator */
|
||||
};
|
||||
|
||||
|
@ -818,17 +818,17 @@ static struct regsvr_namespace const namespace_extensions_list[] = {
|
|||
|
||||
HRESULT WINAPI DoRegisterServer(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
TRACE("\n");
|
||||
|
||||
hr = register_coclasses(coclass_list);
|
||||
if (SUCCEEDED(hr))
|
||||
hr = register_interfaces(interface_list);
|
||||
if (SUCCEEDED(hr))
|
||||
hr = SHELL_RegisterShellFolders();
|
||||
if (SUCCEEDED(hr))
|
||||
hr = register_namespace_extensions(namespace_extensions_list);
|
||||
//hr = register_coclasses(coclass_list);
|
||||
//if (SUCCEEDED(hr))
|
||||
// hr = register_interfaces(interface_list);
|
||||
//if (SUCCEEDED(hr))
|
||||
// hr = SHELL_RegisterShellFolders();
|
||||
//if (SUCCEEDED(hr))
|
||||
// hr = register_namespace_extensions(namespace_extensions_list);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,21 +21,21 @@
|
|||
|
||||
#include <precomp.h>
|
||||
|
||||
/* copy data structure for tray notifications */
|
||||
/* copy data structure for tray notifications */
|
||||
typedef struct TrayNotifyCDS_Dummy {
|
||||
DWORD cookie;
|
||||
DWORD notify_code;
|
||||
DWORD nicon_data[1]; // placeholder for NOTIFYICONDATA structure
|
||||
} TrayNotifyCDS_Dummy;
|
||||
|
||||
/* The only difference between Shell_NotifyIconA and Shell_NotifyIconW is the call to SendMessageA/W. */
|
||||
/* The only difference between Shell_NotifyIconA and Shell_NotifyIconW is the call to SendMessageA/W. */
|
||||
static BOOL SHELL_NotifyIcon(DWORD dwMessage, void* pnid, HWND nid_hwnd, int nid_size, BOOL unicode)
|
||||
{
|
||||
HWND hwnd;
|
||||
COPYDATASTRUCT data;
|
||||
|
||||
BOOL ret = FALSE;
|
||||
int len = sizeof(TrayNotifyCDS_Dummy)-sizeof(DWORD)+nid_size;
|
||||
int len = sizeof(TrayNotifyCDS_Dummy) - sizeof(DWORD) + nid_size;
|
||||
|
||||
TrayNotifyCDS_Dummy* pnotify_data = (TrayNotifyCDS_Dummy*) alloca(len);
|
||||
|
||||
|
@ -47,8 +47,8 @@ static BOOL SHELL_NotifyIcon(DWORD dwMessage, void* pnid, HWND nid_hwnd, int nid
|
|||
data.cbData = len;
|
||||
data.lpData = pnotify_data;
|
||||
|
||||
for(hwnd=0; (hwnd=FindWindowExW(0, hwnd, L"Shell_TrayWnd", NULL)); )
|
||||
if ((unicode?SendMessageW:SendMessageA)(hwnd, WM_COPYDATA, (WPARAM)nid_hwnd, (LPARAM)&data))
|
||||
for(hwnd = 0; (hwnd = FindWindowExW(0, hwnd, L"Shell_TrayWnd", NULL)); )
|
||||
if ((unicode ? SendMessageW : SendMessageA)(hwnd, WM_COPYDATA, (WPARAM)nid_hwnd, (LPARAM)&data))
|
||||
ret = TRUE;
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef struct
|
|||
UINT Count;
|
||||
BOOL NoOpen;
|
||||
UINT idCmdFirst;
|
||||
}OPEN_WITH_CONTEXT, *POPEN_WITH_CONTEXT;
|
||||
} OPEN_WITH_CONTEXT, *POPEN_WITH_CONTEXT;
|
||||
|
||||
#define MANUFACTURER_NAME_SIZE 100
|
||||
|
||||
|
@ -50,11 +50,11 @@ typedef struct
|
|||
HICON hIcon;
|
||||
WCHAR szAppName[MAX_PATH];
|
||||
WCHAR szManufacturer[MANUFACTURER_NAME_SIZE];
|
||||
}OPEN_ITEM_CONTEXT, *POPEN_ITEM_CONTEXT;
|
||||
} OPEN_ITEM_CONTEXT, *POPEN_ITEM_CONTEXT;
|
||||
|
||||
|
||||
typedef struct _LANGANDCODEPAGE_
|
||||
{
|
||||
{
|
||||
WORD lang;
|
||||
WORD code;
|
||||
} LANGANDCODEPAGE, *LPLANGANDCODEPAGE;
|
||||
|
@ -81,7 +81,7 @@ AddItem(HMENU hMenu, UINT idCmdFirst)
|
|||
{
|
||||
MENUITEMINFOW mii;
|
||||
WCHAR szBuffer[MAX_PATH];
|
||||
static const WCHAR szChoose[] = { 'C','h','o','o','s','e',' ','P','r','o','g','r','a','m','.','.','.',0 };
|
||||
static const WCHAR szChoose[] = { 'C', 'h', 'o', 'o', 's', 'e', ' ', 'P', 'r', 'o', 'g', 'r', 'a', 'm', '.', '.', '.', 0 };
|
||||
|
||||
ZeroMemory(&mii, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
|
@ -91,7 +91,7 @@ AddItem(HMENU hMenu, UINT idCmdFirst)
|
|||
InsertMenuItemW(hMenu, -1, TRUE, &mii);
|
||||
|
||||
if (!LoadStringW(shell32_hInstance, IDS_OPEN_WITH_CHOOSE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
wcscpy(szBuffer, szChoose);
|
||||
wcscpy(szBuffer, szChoose);
|
||||
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
||||
|
@ -105,7 +105,7 @@ AddItem(HMENU hMenu, UINT idCmdFirst)
|
|||
InsertMenuItemW(hMenu, -1, TRUE, &mii);
|
||||
}
|
||||
|
||||
static
|
||||
static
|
||||
void
|
||||
LoadOWItems(POPEN_WITH_CONTEXT pContext, LPCWSTR szName)
|
||||
{
|
||||
|
@ -152,11 +152,11 @@ HRESULT WINAPI COpenWithMenu::QueryContextMenu(
|
|||
INT pos;
|
||||
HMENU hSubMenu = NULL;
|
||||
OPEN_WITH_CONTEXT Context;
|
||||
|
||||
if (!LoadStringW(shell32_hInstance, IDS_OPEN_WITH, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
|
||||
if (!LoadStringW(shell32_hInstance, IDS_OPEN_WITH, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
ERR("failed to load string\n");
|
||||
return E_FAIL;
|
||||
ERR("failed to load string\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
hSubMenu = CreatePopupMenu();
|
||||
|
@ -181,7 +181,7 @@ HRESULT WINAPI COpenWithMenu::QueryContextMenu(
|
|||
AddItem(hSubMenu, Context.idCmdFirst++);
|
||||
count = Context.idCmdFirst - idCmdFirst;
|
||||
/* verb start at index zero */
|
||||
wId = count -1;
|
||||
wId = count - 1;
|
||||
hSubMenu = hSubMenu;
|
||||
}
|
||||
|
||||
|
@ -192,8 +192,8 @@ HRESULT WINAPI COpenWithMenu::QueryContextMenu(
|
|||
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
|
||||
if (hSubMenu)
|
||||
{
|
||||
mii.fMask |= MIIM_SUBMENU;
|
||||
mii.hSubMenu = hSubMenu;
|
||||
mii.fMask |= MIIM_SUBMENU;
|
||||
mii.hSubMenu = hSubMenu;
|
||||
}
|
||||
mii.dwTypeData = (LPWSTR) szBuffer;
|
||||
mii.fState = MFS_ENABLED;
|
||||
|
@ -205,7 +205,7 @@ HRESULT WINAPI COpenWithMenu::QueryContextMenu(
|
|||
mii.wID = Context.idCmdFirst;
|
||||
mii.fType = MFT_STRING;
|
||||
if (InsertMenuItemW( hmenu, pos, TRUE, &mii))
|
||||
Context.Count++;
|
||||
Context.Count++;
|
||||
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Context.Count);
|
||||
}
|
||||
|
@ -236,11 +236,11 @@ FreeListItems(HWND hwndDlg)
|
|||
|
||||
BOOL HideApplicationFromList(WCHAR * pFileName)
|
||||
{
|
||||
WCHAR szBuffer[100] = {'A','p','p','l','i','c','a','t','i','o','n','s','\\',0};
|
||||
WCHAR szBuffer[100] = {'A', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 's', '\\', 0};
|
||||
DWORD dwSize = 0;
|
||||
LONG result;
|
||||
|
||||
if (wcslen(pFileName) > (sizeof(szBuffer)/sizeof(WCHAR)) - 14)
|
||||
if (wcslen(pFileName) > (sizeof(szBuffer) / sizeof(WCHAR)) - 14)
|
||||
{
|
||||
ERR("insufficient buffer\n");
|
||||
return FALSE;
|
||||
|
@ -262,10 +262,10 @@ WriteStaticShellExtensionKey(HKEY hRootKey, const WCHAR * pVerb, WCHAR *pFullPat
|
|||
{
|
||||
HKEY hShell;
|
||||
LONG result;
|
||||
WCHAR szBuffer[MAX_PATH+10] = {'s','h','e','l','l','\\', 0 };
|
||||
WCHAR szBuffer[MAX_PATH+10] = {'s', 'h', 'e', 'l', 'l', '\\', 0 };
|
||||
|
||||
if (wcslen(pVerb) > (sizeof(szBuffer)/sizeof(WCHAR)) - 15 ||
|
||||
wcslen(pFullPath) > (sizeof(szBuffer)/sizeof(WCHAR)) - 4)
|
||||
if (wcslen(pVerb) > (sizeof(szBuffer) / sizeof(WCHAR)) - 15 ||
|
||||
wcslen(pFullPath) > (sizeof(szBuffer) / sizeof(WCHAR)) - 4)
|
||||
{
|
||||
ERR("insufficient buffer\n");
|
||||
return;
|
||||
|
@ -283,7 +283,7 @@ WriteStaticShellExtensionKey(HKEY hRootKey, const WCHAR * pVerb, WCHAR *pFullPat
|
|||
wcscpy(szBuffer, pFullPath);
|
||||
wcscat(szBuffer, L" %1");
|
||||
|
||||
result = RegSetValueExW(hShell, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer)+1)* sizeof(WCHAR));
|
||||
result = RegSetValueExW(hShell, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer) + 1) * sizeof(WCHAR));
|
||||
RegCloseKey(hShell);
|
||||
}
|
||||
|
||||
|
@ -298,7 +298,7 @@ StoreNewSettings(LPCWSTR szFileName, WCHAR *szAppName)
|
|||
|
||||
/* get file extension */
|
||||
pFileExt = wcsrchr(szFileName, L'.');
|
||||
if (wcslen(pFileExt) > (sizeof(szBuffer)/sizeof(WCHAR)) - 60)
|
||||
if (wcslen(pFileExt) > (sizeof(szBuffer) / sizeof(WCHAR)) - 60)
|
||||
{
|
||||
ERR("insufficient buffer\n");
|
||||
return;
|
||||
|
@ -352,7 +352,7 @@ SetProgrammAsDefaultHandler(LPCWSTR szFileName, WCHAR * szAppName)
|
|||
/* a new entry was created create the prog key id */
|
||||
wcscpy(szBuffer, &pFileExt[1]);
|
||||
wcscat(szBuffer, L"_auto_file");
|
||||
if (RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer)+1) * sizeof(WCHAR)) != ERROR_SUCCESS)
|
||||
if (RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE*)szBuffer, (wcslen(szBuffer) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS)
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
return;
|
||||
|
@ -453,7 +453,7 @@ BrowseForApplication(HWND hwndDlg)
|
|||
POPEN_ITEM_CONTEXT
|
||||
GetCurrentOpenItemContext(HWND hwndDlg)
|
||||
{
|
||||
LRESULT result;
|
||||
LRESULT result;
|
||||
|
||||
/* get current item */
|
||||
result = SendDlgItemMessage(hwndDlg, 14002, LB_GETCURSEL, 0, 0);
|
||||
|
@ -495,8 +495,8 @@ ExecuteOpenItem(POPEN_ITEM_CONTEXT pItemContext, LPCWSTR FileName)
|
|||
|
||||
static INT_PTR CALLBACK OpenWithProgrammDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LPMEASUREITEMSTRUCT lpmis;
|
||||
LPDRAWITEMSTRUCT lpdis;
|
||||
LPMEASUREITEMSTRUCT lpmis;
|
||||
LPDRAWITEMSTRUCT lpdis;
|
||||
INT index;
|
||||
WCHAR szBuffer[MAX_PATH + 30] = { 0 };
|
||||
OPENASINFO *poainfo;
|
||||
|
@ -510,128 +510,128 @@ static INT_PTR CALLBACK OpenWithProgrammDlg(HWND hwndDlg, UINT uMsg, WPARAM wPar
|
|||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)lParam);
|
||||
poainfo = (OPENASINFO*)lParam;
|
||||
if (!(poainfo->oaifInFlags & OAIF_ALLOW_REGISTRATION))
|
||||
EnableWindow(GetDlgItem(hwndDlg, 14003), FALSE);
|
||||
if (poainfo->oaifInFlags & OAIF_FORCE_REGISTRATION)
|
||||
SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0);
|
||||
if (poainfo->oaifInFlags & OAIF_HIDE_REGISTRATION)
|
||||
ShowWindow(GetDlgItem(hwndDlg, 14003), SW_HIDE);
|
||||
if (poainfo->pcszFile)
|
||||
{
|
||||
szBuffer[0] = L'\0';
|
||||
GetDlgItemTextW(hwndDlg, 14001, szBuffer, sizeof(szBuffer)/sizeof(szBuffer[0]));
|
||||
index = wcslen(szBuffer);
|
||||
if (index + wcslen(poainfo->pcszFile) + 1 < sizeof(szBuffer)/sizeof(szBuffer[0]))
|
||||
wcscat(szBuffer, poainfo->pcszFile);
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
SetDlgItemTextW(hwndDlg, 14001, szBuffer);
|
||||
ZeroMemory(&Context, sizeof(OPEN_WITH_CONTEXT));
|
||||
Context.hDlgCtrl = GetDlgItem(hwndDlg, 14002);
|
||||
LoadOWItems(&Context, poainfo->pcszFile);
|
||||
SendMessage(Context.hDlgCtrl, LB_SETCURSEL, 0, 0);
|
||||
}
|
||||
return TRUE;
|
||||
case WM_MEASUREITEM:
|
||||
lpmis = (LPMEASUREITEMSTRUCT) lParam;
|
||||
lpmis->itemHeight = 64;
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case 14004: /* browse */
|
||||
BrowseForApplication(hwndDlg);
|
||||
return TRUE;
|
||||
case 14002:
|
||||
if (HIWORD(wParam) == LBN_SELCHANGE)
|
||||
InvalidateRect((HWND)lParam, NULL, TRUE); // FIXME USE UPDATE RECT
|
||||
break;
|
||||
case 14005: /* ok */
|
||||
pItemContext = GetCurrentOpenItemContext(hwndDlg);
|
||||
if (pItemContext)
|
||||
case WM_INITDIALOG:
|
||||
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG)lParam);
|
||||
poainfo = (OPENASINFO*)lParam;
|
||||
if (!(poainfo->oaifInFlags & OAIF_ALLOW_REGISTRATION))
|
||||
EnableWindow(GetDlgItem(hwndDlg, 14003), FALSE);
|
||||
if (poainfo->oaifInFlags & OAIF_FORCE_REGISTRATION)
|
||||
SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0);
|
||||
if (poainfo->oaifInFlags & OAIF_HIDE_REGISTRATION)
|
||||
ShowWindow(GetDlgItem(hwndDlg, 14003), SW_HIDE);
|
||||
if (poainfo->pcszFile)
|
||||
{
|
||||
/* store settings in HKCU path */
|
||||
StoreNewSettings(poainfo->pcszFile, pItemContext->szAppName);
|
||||
|
||||
if (SendDlgItemMessage(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||
{
|
||||
/* set programm as default handler */
|
||||
SetProgrammAsDefaultHandler(poainfo->pcszFile, pItemContext->szAppName);
|
||||
}
|
||||
|
||||
if (poainfo->oaifInFlags & OAIF_EXEC)
|
||||
ExecuteOpenItem(pItemContext, poainfo->pcszFile);
|
||||
szBuffer[0] = L'\0';
|
||||
GetDlgItemTextW(hwndDlg, 14001, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]));
|
||||
index = wcslen(szBuffer);
|
||||
if (index + wcslen(poainfo->pcszFile) + 1 < sizeof(szBuffer) / sizeof(szBuffer[0]))
|
||||
wcscat(szBuffer, poainfo->pcszFile);
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
SetDlgItemTextW(hwndDlg, 14001, szBuffer);
|
||||
ZeroMemory(&Context, sizeof(OPEN_WITH_CONTEXT));
|
||||
Context.hDlgCtrl = GetDlgItem(hwndDlg, 14002);
|
||||
LoadOWItems(&Context, poainfo->pcszFile);
|
||||
SendMessage(Context.hDlgCtrl, LB_SETCURSEL, 0, 0);
|
||||
}
|
||||
FreeListItems(hwndDlg);
|
||||
EndDialog(hwndDlg, 1);
|
||||
return TRUE;
|
||||
case 14006: /* cancel */
|
||||
case WM_MEASUREITEM:
|
||||
lpmis = (LPMEASUREITEMSTRUCT) lParam;
|
||||
lpmis->itemHeight = 64;
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case 14004: /* browse */
|
||||
BrowseForApplication(hwndDlg);
|
||||
return TRUE;
|
||||
case 14002:
|
||||
if (HIWORD(wParam) == LBN_SELCHANGE)
|
||||
InvalidateRect((HWND)lParam, NULL, TRUE); // FIXME USE UPDATE RECT
|
||||
break;
|
||||
case 14005: /* ok */
|
||||
pItemContext = GetCurrentOpenItemContext(hwndDlg);
|
||||
if (pItemContext)
|
||||
{
|
||||
/* store settings in HKCU path */
|
||||
StoreNewSettings(poainfo->pcszFile, pItemContext->szAppName);
|
||||
|
||||
if (SendDlgItemMessage(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||
{
|
||||
/* set programm as default handler */
|
||||
SetProgrammAsDefaultHandler(poainfo->pcszFile, pItemContext->szAppName);
|
||||
}
|
||||
|
||||
if (poainfo->oaifInFlags & OAIF_EXEC)
|
||||
ExecuteOpenItem(pItemContext, poainfo->pcszFile);
|
||||
}
|
||||
FreeListItems(hwndDlg);
|
||||
EndDialog(hwndDlg, 1);
|
||||
return TRUE;
|
||||
case 14006: /* cancel */
|
||||
FreeListItems(hwndDlg);
|
||||
EndDialog(hwndDlg, 0);
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WM_DRAWITEM:
|
||||
lpdis = (LPDRAWITEMSTRUCT) lParam;
|
||||
if ((int)lpdis->itemID == -1)
|
||||
break;
|
||||
|
||||
switch (lpdis->itemAction)
|
||||
{
|
||||
case ODA_SELECT:
|
||||
case ODA_DRAWENTIRE:
|
||||
index = SendMessageW(lpdis->hwndItem, LB_GETCURSEL, 0, 0);
|
||||
pItemContext = (POPEN_ITEM_CONTEXT)SendMessage(lpdis->hwndItem, LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0);
|
||||
|
||||
if ((int)lpdis->itemID == index)
|
||||
{
|
||||
/* paint focused item with standard background colour */
|
||||
HBRUSH hBrush;
|
||||
hBrush = CreateSolidBrush(RGB(46, 104, 160));
|
||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||
DeleteObject(hBrush);
|
||||
preBkColor = SetBkColor(lpdis->hDC, RGB(46, 104, 160));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* paint non focused item with white background */
|
||||
HBRUSH hBrush;
|
||||
hBrush = CreateSolidBrush(RGB(255, 255, 255));
|
||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||
DeleteObject(hBrush);
|
||||
preBkColor = SetBkColor(lpdis->hDC, RGB(255, 255, 255));
|
||||
}
|
||||
|
||||
SendMessageW(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, (LPARAM) szBuffer);
|
||||
/* paint the icon */
|
||||
DrawIconEx(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, pItemContext->hIcon, 0, 0, 0, NULL, DI_NORMAL);
|
||||
/* get text size */
|
||||
GetTextMetrics(lpdis->hDC, &mt);
|
||||
/* paint app name */
|
||||
YOffset = lpdis->rcItem.top + mt.tmHeight / 2;
|
||||
TextOutW(lpdis->hDC, 45, YOffset, szBuffer, wcslen(szBuffer));
|
||||
/* paint manufacturer description */
|
||||
YOffset += mt.tmHeight + 2;
|
||||
preColor = SetTextColor(lpdis->hDC, RGB(192, 192, 192));
|
||||
if (pItemContext->szManufacturer[0])
|
||||
TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szManufacturer, wcslen(pItemContext->szManufacturer));
|
||||
else
|
||||
TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szAppName, wcslen(pItemContext->szAppName));
|
||||
SetTextColor(lpdis->hDC, preColor);
|
||||
SetBkColor(lpdis->hDC, preBkColor);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
FreeListItems(hwndDlg);
|
||||
EndDialog(hwndDlg, 0);
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WM_DRAWITEM:
|
||||
lpdis = (LPDRAWITEMSTRUCT) lParam;
|
||||
if ((int)lpdis->itemID == -1)
|
||||
break;
|
||||
|
||||
switch (lpdis->itemAction)
|
||||
{
|
||||
case ODA_SELECT:
|
||||
case ODA_DRAWENTIRE:
|
||||
index = SendMessageW(lpdis->hwndItem, LB_GETCURSEL, 0, 0);
|
||||
pItemContext =(POPEN_ITEM_CONTEXT)SendMessage(lpdis->hwndItem, LB_GETITEMDATA, lpdis->itemID, (LPARAM) 0);
|
||||
|
||||
if ((int)lpdis->itemID == index)
|
||||
{
|
||||
/* paint focused item with standard background colour */
|
||||
HBRUSH hBrush;
|
||||
hBrush = CreateSolidBrush(RGB(46, 104, 160));
|
||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||
DeleteObject(hBrush);
|
||||
preBkColor = SetBkColor(lpdis->hDC, RGB(46, 104, 160));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* paint non focused item with white background */
|
||||
HBRUSH hBrush;
|
||||
hBrush = CreateSolidBrush(RGB(255, 255, 255));
|
||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||
DeleteObject(hBrush);
|
||||
preBkColor = SetBkColor(lpdis->hDC, RGB(255, 255, 255));
|
||||
}
|
||||
|
||||
SendMessageW(lpdis->hwndItem, LB_GETTEXT, lpdis->itemID, (LPARAM) szBuffer);
|
||||
/* paint the icon */
|
||||
DrawIconEx(lpdis->hDC, lpdis->rcItem.left,lpdis->rcItem.top, pItemContext->hIcon, 0, 0, 0, NULL, DI_NORMAL);
|
||||
/* get text size */
|
||||
GetTextMetrics(lpdis->hDC, &mt);
|
||||
/* paint app name */
|
||||
YOffset = lpdis->rcItem.top + mt.tmHeight/2;
|
||||
TextOutW(lpdis->hDC, 45, YOffset, szBuffer, wcslen(szBuffer));
|
||||
/* paint manufacturer description */
|
||||
YOffset += mt.tmHeight + 2;
|
||||
preColor = SetTextColor(lpdis->hDC, RGB(192, 192, 192));
|
||||
if (pItemContext->szManufacturer[0])
|
||||
TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szManufacturer, wcslen(pItemContext->szManufacturer));
|
||||
else
|
||||
TextOutW(lpdis->hDC, 45, YOffset, pItemContext->szAppName, wcslen(pItemContext->szAppName));
|
||||
SetTextColor(lpdis->hDC, preColor);
|
||||
SetBkColor(lpdis->hDC, preBkColor);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
FreeListItems(hwndDlg);
|
||||
EndDialog(hwndDlg, 0);
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -655,12 +655,12 @@ FreeMenuItemContext(HMENU hMenu)
|
|||
|
||||
for(Index = 0; Index < Count; Index++)
|
||||
{
|
||||
if (GetMenuItemInfoW(hMenu, Index, TRUE, &mii))
|
||||
{
|
||||
if ((mii.fType & MFT_SEPARATOR) || mii.dwItemData == 0)
|
||||
continue;
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)mii.dwItemData);
|
||||
}
|
||||
if (GetMenuItemInfoW(hMenu, Index, TRUE, &mii))
|
||||
{
|
||||
if ((mii.fType & MFT_SEPARATOR) || mii.dwItemData == 0)
|
||||
continue;
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)mii.dwItemData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -707,7 +707,7 @@ COpenWithMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici )
|
|||
|
||||
HRESULT WINAPI
|
||||
COpenWithMenu::GetCommandString(UINT_PTR idCmd, UINT uType,
|
||||
UINT* pwReserved, LPSTR pszName, UINT cchMax )
|
||||
UINT* pwReserved, LPSTR pszName, UINT cchMax )
|
||||
{
|
||||
FIXME("%p %lu %u %p %p %u\n", this,
|
||||
idCmd, uType, pwReserved, pszName, cchMax );
|
||||
|
@ -720,7 +720,7 @@ HRESULT WINAPI COpenWithMenu::HandleMenuMsg(
|
|||
WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
{
|
||||
TRACE("This %p uMsg %x\n",this, uMsg);
|
||||
TRACE("This %p uMsg %x\n", this, uMsg);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
@ -768,17 +768,17 @@ GetManufacturer(WCHAR * szAppName, POPEN_ITEM_CONTEXT pContext)
|
|||
/* query lang code */
|
||||
if(VerQueryValueW(pBuf, const_cast<LPWSTR>(wTranslation), (LPVOID *)&lplangcode, &VerSize))
|
||||
{
|
||||
/* FIXME find language from current locale / if not available,
|
||||
* default to english
|
||||
* for now default to first available language
|
||||
*/
|
||||
lang = lplangcode->lang;
|
||||
code = lplangcode->code;
|
||||
/* FIXME find language from current locale / if not available,
|
||||
* default to english
|
||||
* for now default to first available language
|
||||
*/
|
||||
lang = lplangcode->lang;
|
||||
code = lplangcode->code;
|
||||
}
|
||||
/* set up format */
|
||||
swprintf(szBuffer, wFormat, lang, code);
|
||||
/* query manufacturer */
|
||||
pResult = NULL;
|
||||
pResult = NULL;
|
||||
bResult = VerQueryValueW(pBuf, szBuffer, (LPVOID *)&pResult, &VerSize);
|
||||
|
||||
if (VerSize && bResult && pResult)
|
||||
|
@ -833,9 +833,9 @@ InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, WCHAR * szAppName)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* get default icon */
|
||||
pItemContext->hIcon = ExtractIconW(shell32_hInstance, szAppName, 0);
|
||||
/* get manufacturer */
|
||||
/* get default icon */
|
||||
pItemContext->hIcon = ExtractIconW(shell32_hInstance, szAppName, 0);
|
||||
/* get manufacturer */
|
||||
GetManufacturer(pItemContext->szAppName, pItemContext);
|
||||
index = SendMessageW(pContext->hDlgCtrl, LB_ADDSTRING, 0, (LPARAM)Buffer);
|
||||
if (index != LB_ERR)
|
||||
|
@ -846,7 +846,7 @@ InsertOpenWithItem(POPEN_WITH_CONTEXT pContext, WCHAR * szAppName)
|
|||
void
|
||||
AddItemFromProgIDList(POPEN_WITH_CONTEXT pContext, HKEY hKey)
|
||||
{
|
||||
FIXME("implement me :)))\n");
|
||||
FIXME("implement me :)))\n");
|
||||
}
|
||||
|
||||
HANDLE
|
||||
|
@ -1020,11 +1020,11 @@ COpenWithMenu::SHEOW_LoadOpenWithItems(IDataObject *pdtobj)
|
|||
HRESULT hr;
|
||||
LPIDA pida;
|
||||
LPCITEMIDLIST pidl_folder;
|
||||
LPCITEMIDLIST pidl_child;
|
||||
LPCITEMIDLIST pidl;
|
||||
LPCITEMIDLIST pidl_child;
|
||||
LPCITEMIDLIST pidl;
|
||||
DWORD dwType;
|
||||
LPWSTR pszExt;
|
||||
static const WCHAR szShortCut[] = { '.','l','n','k', 0 };
|
||||
static const WCHAR szShortCut[] = { '.', 'l', 'n', 'k', 0 };
|
||||
|
||||
fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLIST);
|
||||
fmt.ptd = NULL;
|
||||
|
@ -1041,7 +1041,7 @@ COpenWithMenu::SHEOW_LoadOpenWithItems(IDataObject *pdtobj)
|
|||
}
|
||||
|
||||
pida = (LPIDA)GlobalLock(medium.hGlobal);
|
||||
ASSERT(pida->cidl==1);
|
||||
ASSERT(pida->cidl == 1);
|
||||
|
||||
pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[0]);
|
||||
pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida + pida->aoffset[1]);
|
||||
|
@ -1057,7 +1057,7 @@ COpenWithMenu::SHEOW_LoadOpenWithItems(IDataObject *pdtobj)
|
|||
return E_OUTOFMEMORY;
|
||||
}
|
||||
if (_ILIsDesktop(pidl) || _ILIsMyDocuments(pidl) || _ILIsControlPanel(pidl) || _ILIsNetHood(pidl) ||
|
||||
_ILIsBitBucket(pidl) || _ILIsDrive(pidl) || _ILIsCPanelStruct(pidl) || _ILIsFolder(pidl))
|
||||
_ILIsBitBucket(pidl) || _ILIsDrive(pidl) || _ILIsCPanelStruct(pidl) || _ILIsFolder(pidl))
|
||||
{
|
||||
TRACE("pidl is a folder\n");
|
||||
SHFree((void*)pidl);
|
||||
|
@ -1123,12 +1123,12 @@ SHOpenWithDialog(HWND hwndParent,
|
|||
}
|
||||
ShowWindow(hwnd, SW_SHOWNORMAL);
|
||||
|
||||
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
|
||||
{
|
||||
if (!IsWindow(hwnd) || !IsDialogMessage(hwnd, &msg))
|
||||
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
|
||||
{
|
||||
if (!IsWindow(hwnd) || !IsDialogMessage(hwnd, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
return S_OK;
|
||||
|
|
|
@ -40,15 +40,15 @@ This folder should not exist. It is just a file system folder...
|
|||
class CDesktopFolderEnumY :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CDesktopFolderEnumY();
|
||||
~CDesktopFolderEnumY();
|
||||
HRESULT WINAPI Initialize(LPWSTR szTarget, DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CDesktopFolderEnumY();
|
||||
~CDesktopFolderEnumY();
|
||||
HRESULT WINAPI Initialize(LPWSTR szTarget, DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CDesktopFolderEnumY)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CDesktopFolderEnumY)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
static const shvheader AdminToolsSFHeader[] = {
|
||||
|
@ -76,7 +76,7 @@ CDesktopFolderEnumY::~CDesktopFolderEnumY()
|
|||
HRESULT WINAPI CDesktopFolderEnumY::Initialize(LPWSTR szTarget, DWORD dwFlags)
|
||||
{
|
||||
TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags);
|
||||
/* enumerate the elements in %windir%\desktop */
|
||||
/* enumerate the elements in %windir%\desktop */
|
||||
return CreateFolderEnumList(szTarget, dwFlags);
|
||||
}
|
||||
|
||||
|
@ -117,11 +117,11 @@ HRESULT WINAPI CAdminToolsFolder::FinalConstruct()
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CAdminToolsFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
|
||||
*ppidl = 0;
|
||||
if (pchEaten)
|
||||
|
@ -171,7 +171,7 @@ HRESULT WINAPI CAdminToolsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPE
|
|||
HRESULT WINAPI CAdminToolsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut);
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ HRESULT WINAPI CAdminToolsFolder::CreateViewObject(HWND hwndOwner, REFIID riid,
|
|||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this,
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -288,14 +288,14 @@ HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apid
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl,
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
CComPtr<IUnknown> pObj;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -361,7 +361,7 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
if (!strRet)
|
||||
return E_INVALIDARG;
|
||||
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
||||
if (!pszPath)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
|
@ -370,7 +370,7 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
if (!pidl->mkid.cb)
|
||||
{
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
wcscpy(pszPath, szTarget);
|
||||
else if (!HCR_GetClassNameW(CLSID_AdminFolderShortcut, pszPath, MAX_PATH))
|
||||
hr = E_FAIL;
|
||||
|
@ -378,8 +378,8 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
else if (_ILIsPidlSimple(pidl))
|
||||
{
|
||||
if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
|
||||
szTarget)
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
|
||||
szTarget)
|
||||
{
|
||||
wcscpy(pszPath, szTarget);
|
||||
pOffset = PathAddBackslashW(pszPath);
|
||||
|
@ -402,16 +402,16 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
hr = E_FAIL;
|
||||
}
|
||||
}
|
||||
else if (_ILIsSpecialFolder(pidl))
|
||||
else if (_ILIsSpecialFolder(pidl))
|
||||
{
|
||||
BOOL bSimplePidl = _ILIsPidlSimple(pidl);
|
||||
|
||||
if (bSimplePidl)
|
||||
if (bSimplePidl)
|
||||
{
|
||||
if (!_ILSimpleGetTextW(pidl, pszPath, MAX_PATH))
|
||||
hr = E_FAIL;
|
||||
}
|
||||
else if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl)
|
||||
else if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl)
|
||||
{
|
||||
int len = 0;
|
||||
|
||||
|
@ -425,7 +425,7 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
@ -453,7 +453,7 @@ HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwF
|
|||
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CAdminToolsFolder::SetNameOf (HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl,
|
||||
debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
|
@ -522,20 +522,20 @@ HRESULT WINAPI CAdminToolsFolder::GetDetailsOf (LPCITEMIDLIST pidl, UINT iColumn
|
|||
psd->str.uType = STRRET_CSTR;
|
||||
switch (iColumn)
|
||||
{
|
||||
case COLUMN_NAME:
|
||||
psd->str.uType = STRRET_WSTR;
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case COLUMN_SIZE:
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case COLUMN_TYPE:
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case COLUMN_DATE:
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case COLUMN_NAME:
|
||||
psd->str.uType = STRRET_WSTR;
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case COLUMN_SIZE:
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case COLUMN_TYPE:
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case COLUMN_DATE:
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
|
||||
return hr;
|
||||
|
|
|
@ -36,19 +36,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
|||
class CControlPanelEnum :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CControlPanelEnum();
|
||||
~CControlPanelEnum();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
BOOL RegisterCPanelApp(LPCSTR path);
|
||||
int RegisterRegistryCPanelApps(HKEY hkey_root, LPCSTR szRepPath);
|
||||
int RegisterCPanelFolders(HKEY hkey_root, LPCSTR szRepPath);
|
||||
BOOL CreateCPanelEnumList(DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CControlPanelEnum();
|
||||
~CControlPanelEnum();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
BOOL RegisterCPanelApp(LPCSTR path);
|
||||
int RegisterRegistryCPanelApps(HKEY hkey_root, LPCSTR szRepPath);
|
||||
int RegisterCPanelFolders(HKEY hkey_root, LPCSTR szRepPath);
|
||||
BOOL CreateCPanelEnumList(DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CControlPanelEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CControlPanelEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -91,7 +91,7 @@ static LPITEMIDLIST _ILCreateCPanelApplet(LPCSTR pszName, LPCSTR pszDisplayName,
|
|||
|
||||
/* Allocate PIDL */
|
||||
cbData = sizeof(pidl->mkid.cb) + sizeof(pData->type) + sizeof(pData->u.cpanel) - sizeof(pData->u.cpanel.szName)
|
||||
+ cchName + cchDisplayName + cchComment + 3;
|
||||
+ cchName + cchDisplayName + cchComment + 3;
|
||||
pidl = (LPITEMIDLIST)SHAlloc(cbData + sizeof(WORD));
|
||||
if (!pidl)
|
||||
return NULL;
|
||||
|
@ -127,7 +127,7 @@ static PIDLCPanelStruct *_ILGetCPanelPointer(LPCITEMIDLIST pidl)
|
|||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
|
||||
if (pdata && pdata->type == PT_CPLAPPLET)
|
||||
return (PIDLCPanelStruct *)&(pdata->u.cpanel);
|
||||
return (PIDLCPanelStruct *) & (pdata->u.cpanel);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -309,9 +309,9 @@ HRESULT WINAPI CControlPanelFolder::FinalConstruct()
|
|||
* ISF_ControlPanel_fnParseDisplayName
|
||||
*/
|
||||
HRESULT WINAPI CControlPanelFolder::ParseDisplayName(HWND hwndOwner,
|
||||
LPBC pbc,
|
||||
LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
LPBC pbc,
|
||||
LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
WCHAR szElement[MAX_PATH];
|
||||
LPCWSTR szNext = NULL;
|
||||
|
@ -349,7 +349,7 @@ HRESULT WINAPI CControlPanelFolder::ParseDisplayName(HWND hwndOwner,
|
|||
if (szNext && *szNext)
|
||||
{
|
||||
hr = SHELL32_ParseNextElement(this, hwndOwner, pbc,
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -445,21 +445,21 @@ HRESULT WINAPI CControlPanelFolder::CreateViewObject(HWND hwndOwner, REFIID riid
|
|||
TRACE("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid(&riid), ppvOut);
|
||||
|
||||
if (ppvOut) {
|
||||
*ppvOut = NULL;
|
||||
*ppvOut = NULL;
|
||||
|
||||
if (IsEqualIID(riid, IID_IDropTarget)) {
|
||||
WARN("IDropTarget not implemented\n");
|
||||
hr = E_NOTIMPL;
|
||||
} else if (IsEqualIID(riid, IID_IContextMenu)) {
|
||||
WARN("IContextMenu not implemented\n");
|
||||
hr = E_NOTIMPL;
|
||||
} else if (IsEqualIID(riid, IID_IShellView)) {
|
||||
hr = IShellView_Constructor((IShellFolder *)this, &pShellView);
|
||||
if (pShellView) {
|
||||
hr = pShellView->QueryInterface(riid, ppvOut);
|
||||
if (IsEqualIID(riid, IID_IDropTarget)) {
|
||||
WARN("IDropTarget not implemented\n");
|
||||
hr = E_NOTIMPL;
|
||||
} else if (IsEqualIID(riid, IID_IContextMenu)) {
|
||||
WARN("IContextMenu not implemented\n");
|
||||
hr = E_NOTIMPL;
|
||||
} else if (IsEqualIID(riid, IID_IShellView)) {
|
||||
hr = IShellView_Constructor((IShellFolder *)this, &pShellView);
|
||||
if (pShellView) {
|
||||
hr = pShellView->QueryInterface(riid, ppvOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
TRACE("--(%p)->(interface=%p)\n", this, ppvOut);
|
||||
return hr;
|
||||
}
|
||||
|
@ -509,52 +509,52 @@ HRESULT WINAPI CControlPanelFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST * a
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CControlPanelFolder::GetUIObjectOf(HWND hwndOwner,
|
||||
UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid(&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid(&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (ppvOut) {
|
||||
*ppvOut = NULL;
|
||||
*ppvOut = NULL;
|
||||
|
||||
if (IsEqualIID(riid, IID_IContextMenu) &&(cidl >= 1)) {
|
||||
// TODO
|
||||
// create a seperate item struct
|
||||
//
|
||||
pObj = (IContextMenu *)this;
|
||||
this->apidl = apidl;
|
||||
cidl = cidl;
|
||||
pObj->AddRef();
|
||||
hr = S_OK;
|
||||
} else if (IsEqualIID(riid, IID_IDataObject) &&(cidl >= 1)) {
|
||||
hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
} else if (IsEqualIID(riid, IID_IExtractIconA) &&(cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
pObj = (LPUNKNOWN) IExtractIconA_Constructor(pidl);
|
||||
SHFree(pidl);
|
||||
hr = S_OK;
|
||||
} else if (IsEqualIID(riid, IID_IExtractIconW) &&(cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
pObj = (LPUNKNOWN) IExtractIconW_Constructor(pidl);
|
||||
SHFree(pidl);
|
||||
hr = S_OK;
|
||||
} else if ((IsEqualIID(riid, IID_IShellLinkW) || IsEqualIID(riid, IID_IShellLinkA))
|
||||
&& (cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
hr = IShellLink_ConstructFromFile(NULL, riid, pidl,(LPVOID*)&pObj);
|
||||
SHFree(pidl);
|
||||
} else {
|
||||
hr = E_NOINTERFACE;
|
||||
}
|
||||
if (IsEqualIID(riid, IID_IContextMenu) && (cidl >= 1)) {
|
||||
// TODO
|
||||
// create a seperate item struct
|
||||
//
|
||||
pObj = (IContextMenu *)this;
|
||||
this->apidl = apidl;
|
||||
cidl = cidl;
|
||||
pObj->AddRef();
|
||||
hr = S_OK;
|
||||
} else if (IsEqualIID(riid, IID_IDataObject) && (cidl >= 1)) {
|
||||
hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
} else if (IsEqualIID(riid, IID_IExtractIconA) && (cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
pObj = (LPUNKNOWN) IExtractIconA_Constructor(pidl);
|
||||
SHFree(pidl);
|
||||
hr = S_OK;
|
||||
} else if (IsEqualIID(riid, IID_IExtractIconW) && (cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
pObj = (LPUNKNOWN) IExtractIconW_Constructor(pidl);
|
||||
SHFree(pidl);
|
||||
hr = S_OK;
|
||||
} else if ((IsEqualIID(riid, IID_IShellLinkW) || IsEqualIID(riid, IID_IShellLinkA))
|
||||
&& (cidl == 1)) {
|
||||
pidl = ILCombine(pidlRoot, apidl[0]);
|
||||
hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj);
|
||||
SHFree(pidl);
|
||||
} else {
|
||||
hr = E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr) && !pObj)
|
||||
hr = E_OUTOFMEMORY;
|
||||
if (SUCCEEDED(hr) && !pObj)
|
||||
hr = E_OUTOFMEMORY;
|
||||
|
||||
*ppvOut = pObj;
|
||||
*ppvOut = pObj;
|
||||
}
|
||||
TRACE("(%p)->hr=0x%08x\n", this, hr);
|
||||
return hr;
|
||||
|
@ -591,7 +591,7 @@ HRESULT WINAPI CControlPanelFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD d
|
|||
{
|
||||
BOOL bSimplePidl = _ILIsPidlSimple(pidl);
|
||||
SFGAOF Attr = SFGAO_FILESYSTEM;
|
||||
|
||||
|
||||
SHELL32_GetItemAttributes(this, pidl, &Attr);
|
||||
if (Attr & SFGAO_FILESYSTEM)
|
||||
{
|
||||
|
@ -644,7 +644,7 @@ HRESULT WINAPI CControlPanelFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD d
|
|||
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CControlPanelFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
|
||||
return E_FAIL;
|
||||
|
@ -693,26 +693,26 @@ HRESULT WINAPI CControlPanelFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColum
|
|||
TRACE("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd);
|
||||
|
||||
if (!psd || iColumn >= CONROLPANELSHELLVIEWCOLUMNS)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (!pidl) {
|
||||
psd->fmt = ControlPanelSFHeader[iColumn].fmt;
|
||||
psd->cxChar = ControlPanelSFHeader[iColumn].cxChar;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
LoadStringA(shell32_hInstance, ControlPanelSFHeader[iColumn].colnameid, psd->str.cStr, MAX_PATH);
|
||||
return S_OK;
|
||||
psd->fmt = ControlPanelSFHeader[iColumn].fmt;
|
||||
psd->cxChar = ControlPanelSFHeader[iColumn].cxChar;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
LoadStringA(shell32_hInstance, ControlPanelSFHeader[iColumn].colnameid, psd->str.cStr, MAX_PATH);
|
||||
return S_OK;
|
||||
} else {
|
||||
psd->str.cStr[0] = 0x00;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
switch(iColumn) {
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* comment */
|
||||
_ILGetFileType(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
hr = S_OK;
|
||||
psd->str.cStr[0] = 0x00;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
switch(iColumn) {
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* comment */
|
||||
_ILGetFileType(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
return hr;
|
||||
|
@ -731,7 +731,7 @@ HRESULT WINAPI CControlPanelFolder::GetClassID(CLSID *lpClassId)
|
|||
TRACE("(%p)\n", this);
|
||||
|
||||
if (!lpClassId)
|
||||
return E_POINTER;
|
||||
return E_POINTER;
|
||||
*lpClassId = CLSID_ControlPanel;
|
||||
|
||||
return S_OK;
|
||||
|
@ -759,7 +759,7 @@ HRESULT WINAPI CControlPanelFolder::GetCurFolder(LPITEMIDLIST * pidl)
|
|||
TRACE("(%p)->(%p)\n", this, pidl);
|
||||
|
||||
if (!pidl)
|
||||
return E_POINTER;
|
||||
return E_POINTER;
|
||||
*pidl = ILClone(pidlRoot);
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -769,7 +769,7 @@ HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST pidl, LPWSTR szIconFile, UINT cchM
|
|||
PIDLCPanelStruct* pcpanel = _ILGetCPanelPointer(pidl);
|
||||
|
||||
if (!pcpanel)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, pcpanel->szName, -1, szIconFile, cchMax);
|
||||
*piIndex = (int)pcpanel->iconIdx != -1 ? pcpanel->iconIdx : 0;
|
||||
|
@ -802,7 +802,7 @@ ExecuteAppletFromCLSID(LPOLESTR pOleStr)
|
|||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (!ExpandEnvironmentStringsW(szCmd, szExpCmd, sizeof(szExpCmd)/sizeof(WCHAR)))
|
||||
if (!ExpandEnvironmentStringsW(szCmd, szExpCmd, sizeof(szExpCmd) / sizeof(WCHAR)))
|
||||
return E_FAIL;
|
||||
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
|
@ -818,7 +818,7 @@ ExecuteAppletFromCLSID(LPOLESTR pOleStr)
|
|||
|
||||
HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOW psei)
|
||||
{
|
||||
static const WCHAR wCplopen[] = {'c','p','l','o','p','e','n','\0'};
|
||||
static const WCHAR wCplopen[] = {'c', 'p', 'l', 'o', 'p', 'e', 'n', '\0'};
|
||||
SHELLEXECUTEINFOW sei_tmp;
|
||||
PIDLCPanelStruct* pcpanel;
|
||||
WCHAR path[MAX_PATH];
|
||||
|
@ -853,13 +853,13 @@ HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOW psei)
|
|||
path[0] = '\"';
|
||||
/* Return value from MultiByteToWideChar includes terminating NUL, which
|
||||
* compensates for the starting double quote we just put in */
|
||||
l = MultiByteToWideChar(CP_ACP, 0, pcpanel->szName, -1, path+1, MAX_PATH);
|
||||
l = MultiByteToWideChar(CP_ACP, 0, pcpanel->szName, -1, path + 1, MAX_PATH);
|
||||
|
||||
/* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */
|
||||
path[l++] = '"';
|
||||
path[l] = '\0';
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, pcpanel->szName+pcpanel->offsDispName, -1, params, MAX_PATH);
|
||||
MultiByteToWideChar(CP_ACP, 0, pcpanel->szName + pcpanel->offsDispName, -1, params, MAX_PATH);
|
||||
|
||||
memcpy(&sei_tmp, psei, sizeof(sei_tmp));
|
||||
sei_tmp.lpFile = path;
|
||||
|
@ -888,19 +888,19 @@ HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOA psei)
|
|||
TRACE("(%p)->execute(%p)\n", this, psei);
|
||||
|
||||
if (!psei)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
pcpanel = _ILGetCPanelPointer(ILFindLastID((LPCITEMIDLIST)psei->lpIDList));
|
||||
|
||||
if (!pcpanel)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
path[0] = '\"';
|
||||
lstrcpyA(path+1, pcpanel->szName);
|
||||
lstrcpyA(path + 1, pcpanel->szName);
|
||||
|
||||
/* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */
|
||||
lstrcatA(path, "\" ");
|
||||
lstrcatA(path, pcpanel->szName+pcpanel->offsDispName);
|
||||
lstrcatA(path, pcpanel->szName + pcpanel->offsDispName);
|
||||
|
||||
memcpy(&sei_tmp, psei, sizeof(sei_tmp));
|
||||
sei_tmp.lpFile = path;
|
||||
|
@ -908,9 +908,9 @@ HRESULT WINAPI CControlPanelFolder::Execute(LPSHELLEXECUTEINFOA psei)
|
|||
|
||||
ret = ShellExecuteExA(&sei_tmp);
|
||||
if (ret)
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
else
|
||||
return S_FALSE;
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -933,14 +933,14 @@ HRESULT WINAPI CControlPanelFolder::QueryContextMenu(
|
|||
TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",
|
||||
this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_OPEN, MFT_STRING, szBuffer, MFS_DEFAULT); //FIXME identifier
|
||||
Count++;
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_CREATELINK, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_CREATELINK, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
if (Count)
|
||||
{
|
||||
|
@ -970,29 +970,29 @@ HRESULT WINAPI CControlPanelFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
CComPtr<IShellLinkA> isl;
|
||||
HRESULT hResult;
|
||||
|
||||
TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd);
|
||||
TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
|
||||
|
||||
if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_OPEN)) //FIXME
|
||||
{
|
||||
ZeroMemory(&sei, sizeof(sei));
|
||||
sei.cbSize = sizeof(sei);
|
||||
sei.fMask = SEE_MASK_INVOKEIDLIST;
|
||||
sei.lpIDList = ILCombine(pidlRoot, apidl[0]);
|
||||
sei.hwnd = lpcmi->hwnd;
|
||||
sei.nShow = SW_SHOWNORMAL;
|
||||
sei.lpVerb = L"open";
|
||||
ZeroMemory(&sei, sizeof(sei));
|
||||
sei.cbSize = sizeof(sei);
|
||||
sei.fMask = SEE_MASK_INVOKEIDLIST;
|
||||
sei.lpIDList = ILCombine(pidlRoot, apidl[0]);
|
||||
sei.hwnd = lpcmi->hwnd;
|
||||
sei.nShow = SW_SHOWNORMAL;
|
||||
sei.lpVerb = L"open";
|
||||
|
||||
if (ShellExecuteExW(&sei) == FALSE)
|
||||
if (ShellExecuteExW(&sei) == FALSE)
|
||||
return E_FAIL;
|
||||
}
|
||||
else if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_CREATELINK)) //FIXME
|
||||
{
|
||||
if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE))
|
||||
return E_FAIL;
|
||||
return E_FAIL;
|
||||
|
||||
pszPath = PathAddBackslashW(szPath);
|
||||
if (!pszPath)
|
||||
return E_FAIL;
|
||||
return E_FAIL;
|
||||
|
||||
if (GetDisplayNameOf(apidl[0], SHGDN_FORPARSING, &strret) != S_OK)
|
||||
return E_FAIL;
|
||||
|
@ -1025,12 +1025,12 @@ HRESULT WINAPI CControlPanelFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
pcpanel = _ILGetCPanelPointer(ILFindLastID(apidl[0]));
|
||||
if (pcpanel)
|
||||
{
|
||||
strncpy(szTarget, pcpanel->szName, MAX_PATH);
|
||||
strncpy(szTarget, pcpanel->szName, MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("Couldn't retrieve pointer to cpl structure\n");
|
||||
return E_FAIL;
|
||||
FIXME("Couldn't retrieve pointer to cpl structure\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
hResult = ShellLink::_CreatorClass::CreateInstance(NULL, IID_IShellLinkA, (void **)&isl);
|
||||
if (SUCCEEDED(hResult))
|
||||
|
@ -1055,7 +1055,7 @@ HRESULT WINAPI CControlPanelFolder::GetCommandString(
|
|||
LPSTR lpszName,
|
||||
UINT uMaxNameLen)
|
||||
{
|
||||
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
||||
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
||||
|
||||
FIXME("unknown command string\n");
|
||||
return E_FAIL;
|
||||
|
@ -1069,7 +1069,7 @@ HRESULT WINAPI CControlPanelFolder::HandleMenuMsg(
|
|||
WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
{
|
||||
TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam);
|
||||
TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
|
|
@ -53,17 +53,17 @@ class CDesktopFolder;
|
|||
class CDesktopFolderEnum :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
private:
|
||||
// CComPtr fDesktopEnumerator;
|
||||
// CComPtr fCommonDesktopEnumerator;
|
||||
public:
|
||||
CDesktopFolderEnum();
|
||||
~CDesktopFolderEnum();
|
||||
HRESULT WINAPI Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags);
|
||||
public:
|
||||
CDesktopFolderEnum();
|
||||
~CDesktopFolderEnum();
|
||||
HRESULT WINAPI Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CDesktopFolderEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CDesktopFolderEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls);
|
||||
|
@ -87,11 +87,12 @@ CDesktopFolderEnum::~CDesktopFolderEnum()
|
|||
{
|
||||
}
|
||||
|
||||
static const WCHAR ClassicStartMenuW[] = {'S','O','F','T','W','A','R','E','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r',
|
||||
'\\','H','i','d','e','D','e','s','k','t','o','p','I','c','o','n','s','\\',
|
||||
'C','l','a','s','s','i','c','S','t','a','r','t','M','e','n','u','\0' };
|
||||
static const WCHAR ClassicStartMenuW[] = {'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E', '\\',
|
||||
'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', 'o', 'w', 's', '\\',
|
||||
'C', 'u', 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\\', 'E', 'x', 'p', 'l', 'o', 'r', 'e', 'r',
|
||||
'\\', 'H', 'i', 'd', 'e', 'D', 'e', 's', 'k', 't', 'o', 'p', 'I', 'c', 'o', 'n', 's', '\\',
|
||||
'C', 'l', 'a', 's', 's', 'i', 'c', 'S', 't', 'a', 'r', 't', 'M', 'e', 'n', 'u', '\0'
|
||||
};
|
||||
|
||||
INT
|
||||
IsNamespaceExtensionHidden(WCHAR *iid)
|
||||
|
@ -107,9 +108,9 @@ IsNamespaceExtensionHidden(WCHAR *iid)
|
|||
&Result,
|
||||
&dwResult) != ERROR_SUCCESS)
|
||||
{
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -129,11 +130,12 @@ SetNamespaceExtensionVisibleStatus(const WCHAR * iid, DWORD dwStatus)
|
|||
/**************************************************************************
|
||||
* CreateDesktopEnumList()
|
||||
*/
|
||||
static const WCHAR Desktop_NameSpaceW[] = { 'S','O','F','T','W','A','R','E',
|
||||
'\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l',
|
||||
'o','r','e','r','\\','D','e','s','k','t','o','p','\\','N','a','m','e','s','p',
|
||||
'a','c','e','\0' };
|
||||
static const WCHAR Desktop_NameSpaceW[] = { 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E',
|
||||
'\\', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', 'o', 'w', 's', '\\',
|
||||
'C', 'u', 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\\', 'E', 'x', 'p', 'l',
|
||||
'o', 'r', 'e', 'r', '\\', 'D', 'e', 's', 'k', 't', 'o', 'p', '\\', 'N', 'a', 'm', 'e', 's', 'p',
|
||||
'a', 'c', 'e', '\0'
|
||||
};
|
||||
|
||||
HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags)
|
||||
{
|
||||
|
@ -162,14 +164,14 @@ HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWN
|
|||
{
|
||||
if (i == 0)
|
||||
dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, Desktop_NameSpaceW, 0, KEY_READ, &hkey);
|
||||
else
|
||||
else
|
||||
dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, Desktop_NameSpaceW, 0, KEY_READ, &hkey);
|
||||
|
||||
if (dwResult == ERROR_SUCCESS)
|
||||
{
|
||||
WCHAR iid[50];
|
||||
LPITEMIDLIST pidl;
|
||||
int i=0;
|
||||
int i = 0;
|
||||
|
||||
while (ret)
|
||||
{
|
||||
|
@ -182,19 +184,19 @@ HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWN
|
|||
{
|
||||
if (IsNamespaceExtensionHidden(iid) < 1)
|
||||
{
|
||||
pidl = _ILCreateGuidFromStrW(iid);
|
||||
pidl = _ILCreateGuidFromStrW(iid);
|
||||
if (pidl != NULL)
|
||||
{
|
||||
if (!HasItemWithCLSID(pidl))
|
||||
{
|
||||
ret = AddToEnumList(pidl);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!HasItemWithCLSID(pidl))
|
||||
{
|
||||
ret = AddToEnumList(pidl);
|
||||
}
|
||||
else
|
||||
{
|
||||
SHFree(pidl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (ERROR_NO_MORE_ITEMS == r)
|
||||
break;
|
||||
|
@ -209,7 +211,7 @@ HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWN
|
|||
{
|
||||
if (i == 0)
|
||||
dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, ClassicStartMenuW, 0, KEY_READ, &hkey);
|
||||
else
|
||||
else
|
||||
dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, ClassicStartMenuW, 0, KEY_READ, &hkey);
|
||||
|
||||
if (dwResult == ERROR_SUCCESS)
|
||||
|
@ -233,7 +235,7 @@ HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWN
|
|||
{
|
||||
if (!HasItemWithCLSID(pidl))
|
||||
{
|
||||
AddToEnumList(pidl);
|
||||
AddToEnumList(pidl);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -294,7 +296,7 @@ HRESULT WINAPI CDesktopFolder::FinalConstruct()
|
|||
* to MyComputer
|
||||
*/
|
||||
HRESULT WINAPI CDesktopFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||
DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes)
|
||||
DWORD *pchEaten, LPITEMIDLIST *ppidl, DWORD *pdwAttributes)
|
||||
{
|
||||
WCHAR szElement[MAX_PATH];
|
||||
LPCWSTR szNext = NULL;
|
||||
|
@ -351,11 +353,11 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLE
|
|||
if (urldata.nScheme == URL_SCHEME_SHELL) /* handle shell: urls */
|
||||
{
|
||||
TRACE ("-- shell url: %s\n", debugstr_w(urldata.pszSuffix));
|
||||
SHCLSIDFromStringW (urldata.pszSuffix+2, &clsid);
|
||||
SHCLSIDFromStringW (urldata.pszSuffix + 2, &clsid);
|
||||
pidlTemp = _ILCreateGuid (PT_GUID, clsid);
|
||||
}
|
||||
else
|
||||
return IEParseDisplayNameWithBCW(CP_ACP,lpszDisplayName,pbc,ppidl);
|
||||
return IEParseDisplayNameWithBCW(CP_ACP, lpszDisplayName, pbc, ppidl);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -391,7 +393,7 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLE
|
|||
if (szNext && *szNext)
|
||||
{
|
||||
hr = SHELL32_ParseNextElement(this, hwndOwner, pbc,
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -425,19 +427,19 @@ HRESULT WINAPI CDesktopFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUM
|
|||
if (ppEnumIDList == NULL)
|
||||
return E_POINTER;
|
||||
*ppEnumIDList = NULL;
|
||||
|
||||
|
||||
ATLTRY (theEnumerator = new CComObject<CDesktopFolderEnum>);
|
||||
|
||||
|
||||
if (theEnumerator == NULL)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
|
||||
hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result);
|
||||
if (FAILED (hResult))
|
||||
{
|
||||
delete theEnumerator;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
|
||||
hResult = theEnumerator->Initialize (this, hwndOwner, dwFlags);
|
||||
if (FAILED (hResult))
|
||||
return hResult;
|
||||
|
@ -581,14 +583,14 @@ HRESULT WINAPI CDesktopFolder::GetAttributesOf (UINT cidl, LPCITEMIDLIST *apidl,
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CDesktopFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl,
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -656,14 +658,14 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
if (!strRet)
|
||||
return E_INVALIDARG;
|
||||
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
||||
if (!pszPath)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
if (_ILIsDesktop (pidl))
|
||||
{
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
wcscpy(pszPath, sPathTarget);
|
||||
else
|
||||
HCR_GetClassNameW(CLSID_ShellDesktop, pszPath, MAX_PATH);
|
||||
|
@ -693,12 +695,13 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
{
|
||||
/* get the "WantsFORPARSING" flag from the registry */
|
||||
static const WCHAR clsidW[] =
|
||||
{ 'C','L','S','I','D','\\',0 };
|
||||
{ 'C', 'L', 'S', 'I', 'D', '\\', 0 };
|
||||
static const WCHAR shellfolderW[] =
|
||||
{ '\\','s','h','e','l','l','f','o','l','d','e','r',0 };
|
||||
{ '\\', 's', 'h', 'e', 'l', 'l', 'f', 'o', 'l', 'd', 'e', 'r', 0 };
|
||||
static const WCHAR wantsForParsingW[] =
|
||||
{ 'W','a','n','t','s','F','o','r','P','a','r','s','i','n',
|
||||
'g',0 };
|
||||
{ 'W', 'a', 'n', 't', 's', 'F', 'o', 'r', 'P', 'a', 'r', 's', 'i', 'n',
|
||||
'g', 0
|
||||
};
|
||||
WCHAR szRegPath[100];
|
||||
LONG r;
|
||||
|
||||
|
@ -714,7 +717,7 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
}
|
||||
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
bWantsForParsing)
|
||||
bWantsForParsing)
|
||||
{
|
||||
/*
|
||||
* we need the filesystem path to the destination folder.
|
||||
|
@ -744,7 +747,7 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
|
||||
/* file system folder or file rooted at the desktop */
|
||||
if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
{
|
||||
lstrcpynW(pszPath, sPathTarget, MAX_PATH - 1);
|
||||
PathAddBackslashW(pszPath);
|
||||
|
@ -759,7 +762,7 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
{
|
||||
/* file system folder or file rooted at the AllUsers desktop */
|
||||
if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
{
|
||||
SHGetSpecialFolderPathW(0, pszPath, CSIDL_COMMON_DESKTOPDIRECTORY, FALSE);
|
||||
PathAddBackslashW(pszPath);
|
||||
|
@ -769,7 +772,8 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
_ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen);
|
||||
if (!_ILIsFolder(pidl))
|
||||
SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
|
||||
} }
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -799,8 +803,8 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
CoTaskMemFree(pszPath);
|
||||
|
||||
TRACE ("-- (%p)->(%s,0x%08x)\n", this,
|
||||
strRet->uType == STRRET_CSTR ? strRet->cStr :
|
||||
debugstr_w(strRet->pOleStr), hr);
|
||||
strRet->uType == STRRET_CSTR ? strRet->cStr :
|
||||
debugstr_w(strRet->pOleStr), hr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
@ -817,7 +821,7 @@ HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CDesktopFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut)
|
||||
{
|
||||
CComPtr<IShellFolder2> psf;
|
||||
HRESULT hr;
|
||||
|
@ -860,7 +864,7 @@ HRESULT WINAPI CDesktopFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
|
|||
}
|
||||
}
|
||||
|
||||
if (!memcmp(szSrc, szDest, (wcslen(szDest)+1) * sizeof(WCHAR)))
|
||||
if (!memcmp(szSrc, szDest, (wcslen(szDest) + 1) * sizeof(WCHAR)))
|
||||
{
|
||||
/* src and destination is the same */
|
||||
hr = S_OK;
|
||||
|
@ -879,7 +883,7 @@ HRESULT WINAPI CDesktopFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
|
|||
hr = _ILCreateFromPathW(szDest, pPidlOut);
|
||||
|
||||
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM,
|
||||
SHCNF_PATHW, szSrc, szDest);
|
||||
SHCNF_PATHW, szSrc, szDest);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
@ -915,7 +919,7 @@ HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFla
|
|||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
*pcsFlags = DesktopSFHeader[iColumn].pcsFlags;
|
||||
|
||||
|
@ -952,22 +956,22 @@ HRESULT WINAPI CDesktopFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SH
|
|||
psd->str.uType = STRRET_CSTR;
|
||||
switch (iColumn)
|
||||
{
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
|
||||
return hr;
|
||||
|
@ -1013,19 +1017,19 @@ HRESULT WINAPI CDesktopFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
|
|||
HRESULT hr;
|
||||
WCHAR wszText[MAX_PATH];
|
||||
WCHAR wszNewFolder[25];
|
||||
const WCHAR wszFormat[] = {'%','s',' ','%','d',0 };
|
||||
const WCHAR wszFormat[] = {'%', 's', ' ', '%', 'd', 0 };
|
||||
|
||||
LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder)/sizeof(WCHAR));
|
||||
LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder) / sizeof(WCHAR));
|
||||
|
||||
TRACE ("(%p)(%p %u)\n", this, pwszName, uLen);
|
||||
|
||||
if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3)
|
||||
if (uLen < sizeof(wszNewFolder) / sizeof(WCHAR) + 3)
|
||||
return E_POINTER;
|
||||
|
||||
lstrcpynW (pwszName, wszNewFolder, uLen);
|
||||
|
||||
hr = EnumObjects(0,
|
||||
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
|
||||
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
|
||||
if (penum) {
|
||||
LPITEMIDLIST pidl;
|
||||
DWORD dwFetched;
|
||||
|
@ -1034,7 +1038,7 @@ HRESULT WINAPI CDesktopFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
|
|||
next:
|
||||
penum->Reset ();
|
||||
while (S_OK == penum->Next(1, &pidl, &dwFetched) &&
|
||||
dwFetched) {
|
||||
dwFetched) {
|
||||
_ILSimpleGetTextW (pidl, wszText, MAX_PATH);
|
||||
if (0 == lstrcmpiW (wszText, pwszName)) {
|
||||
_snwprintf (pwszName, uLen, wszFormat, wszNewFolder, i++);
|
||||
|
@ -1063,12 +1067,12 @@ HRESULT WINAPI CDesktopFolder::AddFolder(HWND hwnd, LPCWSTR pwszName, LPITEMIDLI
|
|||
lstrcpynW(wszNewDir, sPathTarget, MAX_PATH);
|
||||
PathAppendW(wszNewDir, pwszName);
|
||||
bRes = CreateDirectoryW (wszNewDir, NULL);
|
||||
if (bRes)
|
||||
if (bRes)
|
||||
{
|
||||
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHW, wszNewDir, NULL);
|
||||
hres = S_OK;
|
||||
if (ppidlOut)
|
||||
hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
|
||||
hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
|
||||
}
|
||||
|
||||
return hres;
|
||||
|
@ -1087,7 +1091,7 @@ HRESULT WINAPI CDesktopFolder::DeleteItems(UINT cidl, LPCITEMIDLIST *apidl)
|
|||
int res;
|
||||
|
||||
TRACE ("(%p)(%u %p)\n", this, cidl, apidl);
|
||||
if (cidl==0) return S_OK;
|
||||
if (cidl == 0) return S_OK;
|
||||
|
||||
for(i = 0; i < cidl; i++)
|
||||
{
|
||||
|
@ -1104,10 +1108,10 @@ HRESULT WINAPI CDesktopFolder::DeleteItems(UINT cidl, LPCITEMIDLIST *apidl)
|
|||
/* FIXME use FormatMessage
|
||||
* use a similar message resource as in windows
|
||||
*/
|
||||
LoadStringW(shell32_hInstance, IDS_DELETEMULTIPLE_TEXT, wszPath, sizeof(wszPath)/sizeof(WCHAR));
|
||||
LoadStringW(shell32_hInstance, IDS_DELETEMULTIPLE_TEXT, wszPath, sizeof(wszPath) / sizeof(WCHAR));
|
||||
wszPath[(sizeof(wszPath)/sizeof(WCHAR))-1] = 0;
|
||||
|
||||
LoadStringW(shell32_hInstance, IDS_DELETEITEM_CAPTION, wszCaption, sizeof(wszCaption)/sizeof(WCHAR));
|
||||
LoadStringW(shell32_hInstance, IDS_DELETEITEM_CAPTION, wszCaption, sizeof(wszCaption) / sizeof(WCHAR));
|
||||
wszCaption[(sizeof(wszCaption)/sizeof(WCHAR))-1] = 0;
|
||||
|
||||
res = SHELL_ConfirmMsgBox(GetActiveWindow(), wszPath, wszCaption, NULL, cidl > 1);
|
||||
|
@ -1166,7 +1170,7 @@ HRESULT WINAPI CDesktopFolder::DeleteItems(UINT cidl, LPCITEMIDLIST *apidl)
|
|||
SHFree(pidl);
|
||||
}
|
||||
|
||||
wszCurrentPath += wcslen(wszCurrentPath)+1;
|
||||
wszCurrentPath += wcslen(wszCurrentPath) + 1;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, wszPathsList);
|
||||
return ret;
|
||||
|
@ -1186,7 +1190,7 @@ HRESULT WINAPI CDesktopFolder::CopyItems(IShellFolder *pSFFrom, UINT cidl, LPCIT
|
|||
TRACE ("(%p)->(%p,%u,%p)\n", this, pSFFrom, cidl, apidl);
|
||||
|
||||
pSFFrom->QueryInterface(IID_IPersistFolder2, (LPVOID *)&ppf2);
|
||||
if (ppf2)
|
||||
if (ppf2)
|
||||
{
|
||||
if (FAILED(ppf2->GetCurFolder(&pidl)))
|
||||
return E_FAIL;
|
||||
|
|
|
@ -37,16 +37,16 @@ is what we normally see. However, the folder is a perfectly normal CFSFolder.
|
|||
class CDesktopFolderEnumZ :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CDesktopFolderEnumZ();
|
||||
~CDesktopFolderEnumZ();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
BOOL CreateFontsEnumList(DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CDesktopFolderEnumZ();
|
||||
~CDesktopFolderEnumZ();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
BOOL CreateFontsEnumList(DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CDesktopFolderEnumZ)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CDesktopFolderEnumZ)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
static shvheader FontsSFHeader[] = {
|
||||
|
@ -83,7 +83,7 @@ static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile)
|
|||
PIDLDATA tmp;
|
||||
LPITEMIDLIST pidl;
|
||||
PIDLFontStruct * p;
|
||||
int size0 = (char*)&tmp.u.cfont.szName-(char*)&tmp.u.cfont;
|
||||
int size0 = (char*)&tmp.u.cfont.szName - (char*)&tmp.u.cfont;
|
||||
int size = size0;
|
||||
|
||||
tmp.type = 0x00;
|
||||
|
@ -96,14 +96,14 @@ static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile)
|
|||
if (!pidl)
|
||||
return pidl;
|
||||
|
||||
pidl->mkid.cb = size+2;
|
||||
memcpy(pidl->mkid.abID, &tmp, 2+size0);
|
||||
pidl->mkid.cb = size + 2;
|
||||
memcpy(pidl->mkid.abID, &tmp, 2 + size0);
|
||||
|
||||
p = &((PIDLDATA*)pidl->mkid.abID)->u.cfont;
|
||||
wcscpy(p->szName, pszFont);
|
||||
wcscpy(p->szName + tmp.u.cfont.offsFile, pszFile);
|
||||
|
||||
*(WORD*)((char*)pidl+(size+2)) = 0;
|
||||
*(WORD*)((char*)pidl + (size + 2)) = 0;
|
||||
return pidl;
|
||||
}
|
||||
|
||||
|
@ -111,8 +111,8 @@ static PIDLFontStruct * _ILGetFontStruct(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
|
||||
if (pdata && pdata->type==0x00)
|
||||
return (PIDLFontStruct*)&(pdata->u.cfont);
|
||||
if (pdata && pdata->type == 0x00)
|
||||
return (PIDLFontStruct*) & (pdata->u.cfont);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -140,20 +140,20 @@ BOOL CDesktopFolderEnumZ::CreateFontsEnumList(DWORD dwFlags)
|
|||
pszPath = PathAddBackslashW(szPath);
|
||||
if (!pszPath)
|
||||
return FALSE;
|
||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
|
||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
|
||||
Length = pszPath - szPath;
|
||||
dwIndex = 0;
|
||||
do
|
||||
{
|
||||
dwName = sizeof(szName)/sizeof(WCHAR);
|
||||
dwFile = sizeof(szFile)/sizeof(WCHAR);
|
||||
dwName = sizeof(szName) / sizeof(WCHAR);
|
||||
dwFile = sizeof(szFile) / sizeof(WCHAR);
|
||||
ret = RegEnumValueW(hKey, dwIndex++, szName, &dwName, NULL, &dwType, (LPBYTE)szFile, &dwFile);
|
||||
if (ret == ERROR_SUCCESS)
|
||||
{
|
||||
szFile[(sizeof(szFile)/sizeof(WCHAR))-1] = L'\0';
|
||||
if (dwType == REG_SZ && wcslen(szFile) + Length + 1< (sizeof(szPath)/sizeof(WCHAR)))
|
||||
if (dwType == REG_SZ && wcslen(szFile) + Length + 1 < (sizeof(szPath) / sizeof(WCHAR)))
|
||||
{
|
||||
wcscpy(&szPath[Length], szFile);
|
||||
pidl = _ILCreateFontItem(szName, szPath);
|
||||
|
@ -165,7 +165,7 @@ BOOL CDesktopFolderEnumZ::CreateFontsEnumList(DWORD dwFlags)
|
|||
}
|
||||
}
|
||||
}
|
||||
}while(ret != ERROR_NO_MORE_ITEMS);
|
||||
} while(ret != ERROR_NO_MORE_ITEMS);
|
||||
RegCloseKey(hKey);
|
||||
|
||||
}
|
||||
|
@ -196,13 +196,13 @@ HRESULT WINAPI CFontsFolder::FinalConstruct()
|
|||
* ISF_Fonts_fnParseDisplayName
|
||||
*/
|
||||
HRESULT WINAPI CFontsFolder::ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
HRESULT hr = E_UNEXPECTED;
|
||||
|
||||
TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this,
|
||||
hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
|
||||
*ppidl = 0;
|
||||
if (pchEaten)
|
||||
|
@ -252,7 +252,7 @@ HRESULT WINAPI CFontsFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMID
|
|||
HRESULT WINAPI CFontsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut);
|
||||
}
|
||||
|
@ -263,7 +263,7 @@ HRESULT WINAPI CFontsFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved,
|
|||
HRESULT WINAPI CFontsFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
*ppvOut = NULL;
|
||||
return E_NOTIMPL;
|
||||
|
@ -292,7 +292,7 @@ HRESULT WINAPI CFontsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOI
|
|||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this,
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -327,7 +327,7 @@ HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DW
|
|||
HRESULT hr = S_OK;
|
||||
|
||||
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this,
|
||||
cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
|
||||
if (!rgfInOut)
|
||||
return E_INVALIDARG;
|
||||
|
@ -377,14 +377,14 @@ HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DW
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid,
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
CComPtr<IUnknown> pObj;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this,
|
||||
hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -447,7 +447,7 @@ HRESULT WINAPI CFontsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags,
|
|||
pFont = _ILGetFontStruct(pidl);
|
||||
if (pFont)
|
||||
{
|
||||
strRet->pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(pFont->szName)+1) * sizeof(WCHAR));
|
||||
strRet->pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(pFont->szName) + 1) * sizeof(WCHAR));
|
||||
if (!strRet->pOleStr)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
|
@ -459,7 +459,7 @@ HRESULT WINAPI CFontsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags,
|
|||
WCHAR wszPath[MAX_PATH];
|
||||
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
{
|
||||
if (!SHGetSpecialFolderPathW(NULL, wszPath, CSIDL_FONTS, FALSE))
|
||||
return E_FAIL;
|
||||
|
@ -493,10 +493,10 @@ HRESULT WINAPI CFontsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags,
|
|||
* ppidlOut [out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CFontsFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this,
|
||||
hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
@ -582,7 +582,7 @@ HRESULT WINAPI CFontsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHEL
|
|||
{
|
||||
if (SHGetFileInfoW(pfont->szName + pfont->offsFile, 0, &fi, sizeof(fi), SHGFI_TYPENAME))
|
||||
{
|
||||
psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(fi.szTypeName)+1) * sizeof(WCHAR));
|
||||
psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(fi.szTypeName) + 1) * sizeof(WCHAR));
|
||||
if (!psd->str.pOleStr)
|
||||
return E_OUTOFMEMORY;
|
||||
wcscpy(psd->str.pOleStr, fi.szTypeName);
|
||||
|
@ -600,7 +600,7 @@ HRESULT WINAPI CFontsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHEL
|
|||
{
|
||||
if (GetFileSizeEx(hFile, &FileSize))
|
||||
{
|
||||
if (StrFormatByteSizeW(FileSize.QuadPart, buffer, sizeof(buffer)/sizeof(WCHAR)))
|
||||
if (StrFormatByteSizeW(FileSize.QuadPart, buffer, sizeof(buffer) / sizeof(WCHAR)))
|
||||
{
|
||||
psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc(wcslen(buffer) + 1);
|
||||
if (!psd->str.pOleStr)
|
||||
|
@ -630,7 +630,7 @@ HRESULT WINAPI CFontsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHEL
|
|||
return E_OUTOFMEMORY;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
|
@ -699,34 +699,34 @@ HRESULT WINAPI CFontsFolder::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
|
|||
TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",
|
||||
this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT);
|
||||
Count++;
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_PRINT_VERB, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_PRINT_VERB, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED);
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_COPY, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_COPY, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED);
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED);
|
||||
}
|
||||
|
||||
if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)))
|
||||
{
|
||||
szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||
|
@ -745,7 +745,7 @@ HRESULT WINAPI CFontsFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
PIDLFontStruct * pfont;
|
||||
SHFILEOPSTRUCTW op;
|
||||
|
||||
TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd);
|
||||
TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
|
||||
|
||||
if (lpcmi->lpVerb == MAKEINTRESOURCEA(1) || lpcmi->lpVerb == MAKEINTRESOURCEA(2) || lpcmi->lpVerb == MAKEINTRESOURCEA(7))
|
||||
{
|
||||
|
@ -764,7 +764,7 @@ HRESULT WINAPI CFontsFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
sei.lpFile = pfont->szName + pfont->offsFile;
|
||||
|
||||
if (ShellExecuteExW(&sei) == FALSE)
|
||||
return E_FAIL;
|
||||
return E_FAIL;
|
||||
}
|
||||
else if (lpcmi->lpVerb == MAKEINTRESOURCEA(4))
|
||||
{
|
||||
|
@ -773,13 +773,13 @@ HRESULT WINAPI CFontsFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
}
|
||||
else if (lpcmi->lpVerb == MAKEINTRESOURCEA(6))
|
||||
{
|
||||
ZeroMemory(&op, sizeof(op));
|
||||
op.hwnd = lpcmi->hwnd;
|
||||
op.wFunc = FO_DELETE;
|
||||
op.fFlags = FOF_ALLOWUNDO;
|
||||
pfont = _ILGetFontStruct(apidl);
|
||||
op.pFrom = pfont->szName + pfont->offsFile;
|
||||
SHFileOperationW(&op);
|
||||
ZeroMemory(&op, sizeof(op));
|
||||
op.hwnd = lpcmi->hwnd;
|
||||
op.wFunc = FO_DELETE;
|
||||
op.fFlags = FOF_ALLOWUNDO;
|
||||
pfont = _ILGetFontStruct(apidl);
|
||||
op.pFrom = pfont->szName + pfont->offsFile;
|
||||
SHFileOperationW(&op);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
@ -789,9 +789,9 @@ HRESULT WINAPI CFontsFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
|
|||
* ISF_Fonts_IContextMenu_GetCommandString()
|
||||
*
|
||||
*/
|
||||
HRESULT WINAPI CFontsFolder::GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
|
||||
HRESULT WINAPI CFontsFolder::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
|
||||
{
|
||||
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
||||
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
|
||||
|
||||
return E_FAIL;
|
||||
}
|
||||
|
@ -801,7 +801,7 @@ HRESULT WINAPI CFontsFolder::GetCommandString(UINT_PTR idCommand,UINT uFlags, UI
|
|||
*/
|
||||
HRESULT WINAPI CFontsFolder::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
TRACE("ISF_Fonts_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam);
|
||||
TRACE("ISF_Fonts_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
|
|
@ -38,15 +38,15 @@ be inserted in a removable drive.
|
|||
class CFileSysEnum :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CFileSysEnum();
|
||||
~CFileSysEnum();
|
||||
HRESULT WINAPI Initialize(LPWSTR sPathTarget, DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CFileSysEnum();
|
||||
~CFileSysEnum();
|
||||
HRESULT WINAPI Initialize(LPWSTR sPathTarget, DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CFileSysEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CFileSysEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
CFileSysEnum::CFileSysEnum()
|
||||
|
@ -112,8 +112,9 @@ static const shvheader GenericSFHeader[] = {
|
|||
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
|
||||
{
|
||||
static WCHAR szfsbc[] = {
|
||||
'F','i','l','e',' ','S','y','s','t','e','m',' ',
|
||||
'B','i','n','d',' ','D','a','t','a',0 };
|
||||
'F', 'i', 'l', 'e', ' ', 'S', 'y', 's', 't', 'e', 'm', ' ',
|
||||
'B', 'i', 'n', 'd', ' ', 'D', 'a', 't', 'a', 0
|
||||
};
|
||||
IFileSystemBindData *fsbd = NULL;
|
||||
LPITEMIDLIST pidl = NULL;
|
||||
IUnknown *param = NULL;
|
||||
|
@ -131,7 +132,7 @@ LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
|
|||
return NULL;
|
||||
|
||||
r = param->QueryInterface(IID_IFileSystemBindData,
|
||||
(LPVOID*) &fsbd );
|
||||
(LPVOID*) &fsbd );
|
||||
if (SUCCEEDED(r))
|
||||
{
|
||||
r = fsbd->GetFindData(&wfd );
|
||||
|
@ -172,10 +173,10 @@ LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
|
|||
* pchEaten is not set like in windows
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner,
|
||||
LPBC pbc,
|
||||
LPOLESTR lpszDisplayName,
|
||||
DWORD *pchEaten, LPITEMIDLIST *ppidl,
|
||||
DWORD *pdwAttributes)
|
||||
LPBC pbc,
|
||||
LPOLESTR lpszDisplayName,
|
||||
DWORD *pchEaten, LPITEMIDLIST *ppidl,
|
||||
DWORD *pdwAttributes)
|
||||
{
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
LPCWSTR szNext = NULL;
|
||||
|
@ -185,8 +186,8 @@ HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner,
|
|||
DWORD len;
|
||||
|
||||
TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
|
||||
if (!ppidl)
|
||||
return E_INVALIDARG;
|
||||
|
@ -221,12 +222,12 @@ HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner,
|
|||
if (szNext && *szNext) {
|
||||
/* try to analyse the next element */
|
||||
hr = SHELL32_ParseNextElement (this, hwndOwner, pbc,
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
} else {
|
||||
/* it's the last element */
|
||||
if (pdwAttributes && *pdwAttributes) {
|
||||
hr = SHELL32_GetItemAttributes (this,
|
||||
pidlTemp, pdwAttributes);
|
||||
pidlTemp, pdwAttributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -250,7 +251,7 @@ HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner,
|
|||
* LPENUMIDLIST* ppenumIDList //[out] IEnumIDList interface
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::EnumObjects (HWND hwndOwner,
|
||||
DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
|
||||
DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
|
||||
{
|
||||
CComObject<CFileSysEnum> *theEnumerator;
|
||||
CComPtr<IEnumIDList> result;
|
||||
|
@ -289,13 +290,13 @@ HRESULT WINAPI CFSFolder::EnumObjects (HWND hwndOwner,
|
|||
* LPVOID* ppvObject //[out] Interface*
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::BindToObject(LPCITEMIDLIST pidl,
|
||||
LPBC pbc, REFIID riid, LPVOID * ppvOut)
|
||||
LPBC pbc, REFIID riid, LPVOID * ppvOut)
|
||||
{
|
||||
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this, pidl, pbc,
|
||||
shdebugstr_guid (&riid), ppvOut);
|
||||
shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
return SHELL32_BindToChild (pidlRoot, sPathTarget, pidl, riid,
|
||||
ppvOut);
|
||||
ppvOut);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -307,10 +308,10 @@ HRESULT WINAPI CFSFolder::BindToObject(LPCITEMIDLIST pidl,
|
|||
* LPVOID* ppvObject //[out] Interface* returned
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::BindToStorage(LPCITEMIDLIST pidl,
|
||||
LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
|
||||
LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
|
||||
{
|
||||
FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this, pidl, pbcReserved,
|
||||
shdebugstr_guid (&riid), ppvOut);
|
||||
shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
*ppvOut = NULL;
|
||||
return E_NOTIMPL;
|
||||
|
@ -321,7 +322,7 @@ HRESULT WINAPI CFSFolder::BindToStorage(LPCITEMIDLIST pidl,
|
|||
*/
|
||||
|
||||
HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam,
|
||||
LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||
LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||
{
|
||||
int nReturn;
|
||||
|
||||
|
@ -335,13 +336,13 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam,
|
|||
* IShellFolder_fnCreateViewObject
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner,
|
||||
REFIID riid, LPVOID * ppvOut)
|
||||
REFIID riid, LPVOID * ppvOut)
|
||||
{
|
||||
LPSHELLVIEW pShellView;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid (&riid),
|
||||
ppvOut);
|
||||
ppvOut);
|
||||
|
||||
if (ppvOut) {
|
||||
*ppvOut = NULL;
|
||||
|
@ -373,12 +374,12 @@ HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner,
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl,
|
||||
LPCITEMIDLIST * apidl, DWORD * rgfInOut)
|
||||
LPCITEMIDLIST * apidl, DWORD * rgfInOut)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, cidl, apidl,
|
||||
rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
|
||||
if (!rgfInOut)
|
||||
return E_INVALIDARG;
|
||||
|
@ -388,7 +389,7 @@ HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl,
|
|||
if (*rgfInOut == 0)
|
||||
*rgfInOut = ~0;
|
||||
|
||||
if(cidl == 0){
|
||||
if(cidl == 0) {
|
||||
IShellFolder *psfParent = NULL;
|
||||
LPCITEMIDLIST rpidl = NULL;
|
||||
|
||||
|
@ -438,24 +439,24 @@ HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl,
|
|||
* needs the positions.
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::GetUIObjectOf(HWND hwndOwner,
|
||||
UINT cidl, LPCITEMIDLIST * apidl, REFIID riid,
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
UINT cidl, LPCITEMIDLIST * apidl, REFIID riid,
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (ppvOut) {
|
||||
*ppvOut = NULL;
|
||||
|
||||
if (IsEqualIID (riid, IID_IContextMenu) && (cidl >= 1)) {
|
||||
hr = CDefFolderMenu_Create2(pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)this, NULL, 0, NULL, (IContextMenu**)&pObj);
|
||||
} else if (IsEqualIID (riid, IID_IDataObject)){
|
||||
} else if (IsEqualIID (riid, IID_IDataObject)) {
|
||||
if (cidl >= 1) {
|
||||
hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
hr = IDataObject_Constructor (hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -473,9 +474,9 @@ HRESULT WINAPI CFSFolder::GetUIObjectOf(HWND hwndOwner,
|
|||
hr = S_OK;
|
||||
} else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1)) {
|
||||
hr = this->QueryInterface(IID_IDropTarget,
|
||||
(LPVOID *) & pObj);
|
||||
} else if ((IsEqualIID(riid,IID_IShellLinkW) ||
|
||||
IsEqualIID(riid,IID_IShellLinkA)) && (cidl == 1)) {
|
||||
(LPVOID *) & pObj);
|
||||
} else if ((IsEqualIID(riid, IID_IShellLinkW) ||
|
||||
IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1)) {
|
||||
pidl = ILCombine (pidlRoot, apidl[0]);
|
||||
hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj);
|
||||
SHFree (pidl);
|
||||
|
@ -492,14 +493,17 @@ HRESULT WINAPI CFSFolder::GetUIObjectOf(HWND hwndOwner,
|
|||
return hr;
|
||||
}
|
||||
|
||||
static const WCHAR AdvancedW[] = { 'S','O','F','T','W','A','R','E',
|
||||
'\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l',
|
||||
'o','r','e','r','\\','A','d','v','a','n','c','e','d',0 };
|
||||
static const WCHAR HideFileExtW[] = { 'H','i','d','e','F','i','l','e','E','x',
|
||||
't',0 };
|
||||
static const WCHAR NeverShowExtW[] = { 'N','e','v','e','r','S','h','o','w','E',
|
||||
'x','t',0 };
|
||||
static const WCHAR AdvancedW[] = { 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E',
|
||||
'\\', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', 'o', 'w', 's', '\\',
|
||||
'C', 'u', 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\\', 'E', 'x', 'p', 'l',
|
||||
'o', 'r', 'e', 'r', '\\', 'A', 'd', 'v', 'a', 'n', 'c', 'e', 'd', 0
|
||||
};
|
||||
static const WCHAR HideFileExtW[] = { 'H', 'i', 'd', 'e', 'F', 'i', 'l', 'e', 'E', 'x',
|
||||
't', 0
|
||||
};
|
||||
static const WCHAR NeverShowExtW[] = { 'N', 'e', 'v', 'e', 'r', 'S', 'h', 'o', 'w', 'E',
|
||||
'x', 't', 0
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SHELL_FS_HideExtension [Internal]
|
||||
|
@ -549,7 +553,7 @@ void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
|
|||
{
|
||||
/*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
|
||||
if (!(dwFlags & SHGDN_FORPARSING) &&
|
||||
((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
|
||||
((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
|
||||
if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
|
||||
PathRemoveExtensionW(szPath);
|
||||
}
|
||||
|
@ -569,7 +573,7 @@ void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
|
|||
*/
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl,
|
||||
DWORD dwFlags, LPSTRRET strRet)
|
||||
DWORD dwFlags, LPSTRRET strRet)
|
||||
{
|
||||
LPWSTR pszPath;
|
||||
|
||||
|
@ -588,7 +592,7 @@ HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl,
|
|||
|
||||
if (_ILIsDesktop(pidl)) { /* empty pidl */
|
||||
if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
{
|
||||
if (sPathTarget)
|
||||
lstrcpynW(pszPath, sPathTarget, MAX_PATH);
|
||||
|
@ -598,8 +602,8 @@ HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl,
|
|||
}
|
||||
} else if (_ILIsPidlSimple(pidl)) {
|
||||
if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
|
||||
sPathTarget)
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
|
||||
sPathTarget)
|
||||
{
|
||||
lstrcpynW(pszPath, sPathTarget, MAX_PATH);
|
||||
PathAddBackslashW(pszPath);
|
||||
|
@ -616,7 +620,7 @@ HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl,
|
|||
if (GetVersion() & 0x80000000) {
|
||||
strRet->uType = STRRET_CSTR;
|
||||
if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->cStr, MAX_PATH,
|
||||
NULL, NULL))
|
||||
NULL, NULL))
|
||||
strRet->cStr[0] = '\0';
|
||||
CoTaskMemFree(pszPath);
|
||||
} else {
|
||||
|
@ -643,17 +647,17 @@ HRESULT WINAPI CFSFolder::GetDisplayNameOf(LPCITEMIDLIST pidl,
|
|||
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::SetNameOf (HWND hwndOwner,
|
||||
LPCITEMIDLIST pidl,
|
||||
LPCOLESTR lpName,
|
||||
DWORD dwFlags,
|
||||
LPITEMIDLIST * pPidlOut)
|
||||
LPCITEMIDLIST pidl,
|
||||
LPCOLESTR lpName,
|
||||
DWORD dwFlags,
|
||||
LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1];
|
||||
LPWSTR ptr;
|
||||
BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl));
|
||||
|
||||
TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl,
|
||||
debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
|
||||
/* build source path */
|
||||
lstrcpynW(szSrc, sPathTarget, MAX_PATH);
|
||||
|
@ -679,7 +683,7 @@ HRESULT WINAPI CFSFolder::SetNameOf (HWND hwndOwner,
|
|||
}
|
||||
|
||||
TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest));
|
||||
if (!memcmp(szSrc, szDest, (wcslen(szDest)+1) * sizeof(WCHAR)))
|
||||
if (!memcmp(szSrc, szDest, (wcslen(szDest) + 1) * sizeof(WCHAR)))
|
||||
{
|
||||
/* src and destination is the same */
|
||||
HRESULT hr = S_OK;
|
||||
|
@ -697,7 +701,7 @@ HRESULT WINAPI CFSFolder::SetNameOf (HWND hwndOwner,
|
|||
hr = _ILCreateFromPathW(szDest, pPidlOut);
|
||||
|
||||
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM,
|
||||
SHCNF_PATHW, szSrc, szDest);
|
||||
SHCNF_PATHW, szSrc, szDest);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
@ -718,7 +722,7 @@ HRESULT WINAPI CFSFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDefaultColumn(DWORD dwRes,
|
||||
ULONG * pSort, ULONG * pDisplay)
|
||||
ULONG * pSort, ULONG * pDisplay)
|
||||
{
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
|
@ -731,7 +735,7 @@ HRESULT WINAPI CFSFolder::GetDefaultColumn(DWORD dwRes,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDefaultColumnState(UINT iColumn,
|
||||
DWORD * pcsFlags)
|
||||
DWORD * pcsFlags)
|
||||
{
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
|
@ -744,7 +748,7 @@ HRESULT WINAPI CFSFolder::GetDefaultColumnState(UINT iColumn,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDetailsEx(LPCITEMIDLIST pidl,
|
||||
const SHCOLUMNID * pscid, VARIANT * pv)
|
||||
const SHCOLUMNID * pscid, VARIANT * pv)
|
||||
{
|
||||
FIXME ("(%p)\n", this);
|
||||
|
||||
|
@ -752,7 +756,7 @@ HRESULT WINAPI CFSFolder::GetDetailsEx(LPCITEMIDLIST pidl,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDetailsOf(LPCITEMIDLIST pidl,
|
||||
UINT iColumn, SHELLDETAILS * psd)
|
||||
UINT iColumn, SHELLDETAILS * psd)
|
||||
{
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
|
@ -767,29 +771,29 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(LPCITEMIDLIST pidl,
|
|||
psd->cxChar = GenericSFHeader[iColumn].cxChar;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
LoadStringA (shell32_hInstance, GenericSFHeader[iColumn].colnameid,
|
||||
psd->str.cStr, MAX_PATH);
|
||||
psd->str.cStr, MAX_PATH);
|
||||
return S_OK;
|
||||
} else {
|
||||
hr = S_OK;
|
||||
psd->str.uType = STRRET_CSTR;
|
||||
/* the data from the pidl */
|
||||
switch (iColumn) {
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf (pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf (pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -797,7 +801,7 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(LPCITEMIDLIST pidl,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::MapColumnToSCID (UINT column,
|
||||
SHCOLUMNID * pscid)
|
||||
SHCOLUMNID * pscid)
|
||||
{
|
||||
FIXME ("(%p)\n", this);
|
||||
return E_NOTIMPL;
|
||||
|
@ -819,19 +823,19 @@ HRESULT WINAPI CFSFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
|
|||
HRESULT hr;
|
||||
WCHAR wszText[MAX_PATH];
|
||||
WCHAR wszNewFolder[25];
|
||||
const WCHAR wszFormat[] = {'%','s',' ','%','d',0 };
|
||||
const WCHAR wszFormat[] = {'%', 's', ' ', '%', 'd', 0 };
|
||||
|
||||
LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder)/sizeof(WCHAR));
|
||||
LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, sizeof(wszNewFolder) / sizeof(WCHAR));
|
||||
|
||||
TRACE ("(%p)(%p %u)\n", this, pwszName, uLen);
|
||||
|
||||
if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3)
|
||||
if (uLen < sizeof(wszNewFolder) / sizeof(WCHAR) + 3)
|
||||
return E_POINTER;
|
||||
|
||||
lstrcpynW (pwszName, wszNewFolder, uLen);
|
||||
|
||||
hr = EnumObjects(0,
|
||||
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
|
||||
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
|
||||
if (penum) {
|
||||
LPITEMIDLIST pidl;
|
||||
DWORD dwFetched;
|
||||
|
@ -840,7 +844,7 @@ HRESULT WINAPI CFSFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
|
|||
next:
|
||||
penum->Reset ();
|
||||
while (S_OK == penum->Next(1, &pidl, &dwFetched) &&
|
||||
dwFetched) {
|
||||
dwFetched) {
|
||||
_ILSimpleGetTextW (pidl, wszText, MAX_PATH);
|
||||
if (0 == lstrcmpiW (wszText, pwszName)) {
|
||||
_snwprintf (pwszName, uLen, wszFormat, wszNewFolder, i++);
|
||||
|
@ -864,7 +868,7 @@ next:
|
|||
*/
|
||||
|
||||
HRESULT WINAPI CFSFolder::AddFolder(HWND hwnd, LPCWSTR pwszName,
|
||||
LPITEMIDLIST * ppidlOut)
|
||||
LPITEMIDLIST * ppidlOut)
|
||||
{
|
||||
WCHAR wszNewDir[MAX_PATH];
|
||||
DWORD bRes;
|
||||
|
@ -884,7 +888,7 @@ HRESULT WINAPI CFSFolder::AddFolder(HWND hwnd, LPCWSTR pwszName,
|
|||
hres = S_OK;
|
||||
|
||||
if (ppidlOut)
|
||||
hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
|
||||
hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
|
||||
} else {
|
||||
WCHAR wszText[128 + MAX_PATH];
|
||||
WCHAR wszTempText[128];
|
||||
|
@ -892,9 +896,9 @@ HRESULT WINAPI CFSFolder::AddFolder(HWND hwnd, LPCWSTR pwszName,
|
|||
|
||||
/* Cannot Create folder because of permissions */
|
||||
LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_DENIED, wszTempText,
|
||||
sizeof (wszTempText));
|
||||
sizeof (wszTempText));
|
||||
LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, wszCaption,
|
||||
sizeof (wszCaption));
|
||||
sizeof (wszCaption));
|
||||
swprintf (wszText, wszTempText, wszNewDir);
|
||||
MessageBoxW (hwnd, wszText, wszCaption, MB_OK | MB_ICONEXCLAMATION);
|
||||
}
|
||||
|
@ -916,7 +920,7 @@ WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls)
|
|||
int i;
|
||||
|
||||
iPathLen = wcslen(wszBasePath);
|
||||
wszPathsList = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, MAX_PATH*sizeof(WCHAR)*cidl+1);
|
||||
wszPathsList = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) * cidl + 1);
|
||||
wszListPos = wszPathsList;
|
||||
|
||||
for (i = 0; i < cidl; i++) {
|
||||
|
@ -925,10 +929,10 @@ WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls)
|
|||
|
||||
lstrcpynW(wszListPos, wszBasePath, MAX_PATH);
|
||||
/* FIXME: abort if path too long */
|
||||
_ILSimpleGetTextW(pidls[i], wszListPos+iPathLen, MAX_PATH-iPathLen);
|
||||
wszListPos += wcslen(wszListPos)+1;
|
||||
_ILSimpleGetTextW(pidls[i], wszListPos + iPathLen, MAX_PATH - iPathLen);
|
||||
wszListPos += wcslen(wszListPos) + 1;
|
||||
}
|
||||
*wszListPos=0;
|
||||
*wszListPos = 0;
|
||||
return wszPathsList;
|
||||
}
|
||||
|
||||
|
@ -947,7 +951,7 @@ HRESULT WINAPI CFSFolder::DeleteItems(UINT cidl, LPCITEMIDLIST * apidl)
|
|||
WCHAR *wszCurrentPath;
|
||||
|
||||
TRACE ("(%p)(%u %p)\n", this, cidl, apidl);
|
||||
if (cidl==0) return S_OK;
|
||||
if (cidl == 0) return S_OK;
|
||||
|
||||
if (sPathTarget)
|
||||
lstrcpynW(wszPath, sPathTarget, MAX_PATH);
|
||||
|
@ -990,7 +994,7 @@ HRESULT WINAPI CFSFolder::DeleteItems(UINT cidl, LPCITEMIDLIST * apidl)
|
|||
SHFree(pidl);
|
||||
}
|
||||
|
||||
wszCurrentPath += wcslen(wszCurrentPath)+1;
|
||||
wszCurrentPath += wcslen(wszCurrentPath) + 1;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, wszPathsList);
|
||||
return ret;
|
||||
|
@ -1002,7 +1006,7 @@ HRESULT WINAPI CFSFolder::DeleteItems(UINT cidl, LPCITEMIDLIST * apidl)
|
|||
* copies items to this folder
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::CopyItems(IShellFolder * pSFFrom, UINT cidl,
|
||||
LPCITEMIDLIST * apidl)
|
||||
LPCITEMIDLIST * apidl)
|
||||
{
|
||||
IPersistFolder2 *ppf2 = NULL;
|
||||
WCHAR szSrcPath[MAX_PATH];
|
||||
|
@ -1189,16 +1193,16 @@ HRESULT WINAPI CFSFolder::GetCurFolder(LPITEMIDLIST * pidl)
|
|||
* FIXME: error handling
|
||||
*/
|
||||
HRESULT WINAPI CFSFolder::InitializeEx(IBindCtx * pbc, LPCITEMIDLIST pidlRootx,
|
||||
const PERSIST_FOLDER_TARGET_INFO * ppfti)
|
||||
const PERSIST_FOLDER_TARGET_INFO * ppfti)
|
||||
{
|
||||
WCHAR wszTemp[MAX_PATH];
|
||||
|
||||
TRACE ("(%p)->(%p,%p,%p)\n", this, pbc, pidlRootx, ppfti);
|
||||
if (ppfti)
|
||||
TRACE ("--%p %s %s 0x%08x 0x%08x\n",
|
||||
ppfti->pidlTargetFolder, debugstr_w (ppfti->szTargetParsingName),
|
||||
debugstr_w (ppfti->szNetworkProvider), ppfti->dwAttributes,
|
||||
ppfti->csidl);
|
||||
ppfti->pidlTargetFolder, debugstr_w (ppfti->szTargetParsingName),
|
||||
debugstr_w (ppfti->szNetworkProvider), ppfti->dwAttributes,
|
||||
ppfti->csidl);
|
||||
|
||||
pdump (pidlRootx);
|
||||
if (ppfti && ppfti->pidlTargetFolder)
|
||||
|
@ -1221,7 +1225,7 @@ HRESULT WINAPI CFSFolder::InitializeEx(IBindCtx * pbc, LPCITEMIDLIST pidlRootx,
|
|||
if (ppfti) {
|
||||
if (ppfti->csidl != -1) {
|
||||
if (SHGetSpecialFolderPathW (0, wszTemp, ppfti->csidl,
|
||||
ppfti->csidl & CSIDL_FLAG_CREATE)) {
|
||||
ppfti->csidl & CSIDL_FLAG_CREATE)) {
|
||||
int len = wcslen(wszTemp);
|
||||
sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR));
|
||||
if (!sPathTarget)
|
||||
|
@ -1262,7 +1266,7 @@ HRESULT WINAPI CFSFolder::GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO * ppfti
|
|||
* ISFDropTarget implementation
|
||||
*/
|
||||
BOOL CFSFolder::QueryDrop (DWORD dwKeyState,
|
||||
LPDWORD pdwEffect)
|
||||
LPDWORD pdwEffect)
|
||||
{
|
||||
DWORD dwEffect = *pdwEffect;
|
||||
|
||||
|
@ -1280,7 +1284,7 @@ BOOL CFSFolder::QueryDrop (DWORD dwKeyState,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::DragEnter (IDataObject * pDataObject,
|
||||
DWORD dwKeyState, POINTL pt, DWORD * pdwEffect)
|
||||
DWORD dwKeyState, POINTL pt, DWORD * pdwEffect)
|
||||
{
|
||||
FORMATETC fmt;
|
||||
|
||||
|
@ -1289,7 +1293,7 @@ HRESULT WINAPI CFSFolder::DragEnter (IDataObject * pDataObject,
|
|||
InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL);
|
||||
|
||||
fAcceptFmt = (S_OK == pDataObject->QueryGetData(&fmt)) ?
|
||||
TRUE : FALSE;
|
||||
TRUE : FALSE;
|
||||
|
||||
QueryDrop(dwKeyState, pdwEffect);
|
||||
|
||||
|
@ -1297,7 +1301,7 @@ HRESULT WINAPI CFSFolder::DragEnter (IDataObject * pDataObject,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::DragOver (DWORD dwKeyState, POINTL pt,
|
||||
DWORD * pdwEffect)
|
||||
DWORD * pdwEffect)
|
||||
{
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
|
@ -1319,7 +1323,7 @@ HRESULT WINAPI CFSFolder::DragLeave ()
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::Drop (IDataObject * pDataObject,
|
||||
DWORD dwKeyState, POINTL pt, DWORD * pdwEffect)
|
||||
DWORD dwKeyState, POINTL pt, DWORD * pdwEffect)
|
||||
{
|
||||
FIXME ("(%p) object dropped\n", this);
|
||||
|
||||
|
|
|
@ -42,16 +42,16 @@ CDrivesFolderEnum is only responsible for returning the physical items.
|
|||
class CDrivesFolderEnum :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CDrivesFolderEnum();
|
||||
~CDrivesFolderEnum();
|
||||
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags);
|
||||
BOOL CreateMyCompEnumList(DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CDrivesFolderEnum();
|
||||
~CDrivesFolderEnum();
|
||||
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags);
|
||||
BOOL CreateMyCompEnumList(DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CDrivesFolderEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CDrivesFolderEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -85,11 +85,12 @@ HRESULT WINAPI CDrivesFolderEnum::Initialize(HWND hwndOwner, DWORD dwFlags)
|
|||
/**************************************************************************
|
||||
* CreateMyCompEnumList()
|
||||
*/
|
||||
static const WCHAR MyComputer_NameSpaceW[] = { 'S','O','F','T','W','A','R','E',
|
||||
'\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l',
|
||||
'o','r','e','r','\\','M','y','C','o','m','p','u','t','e','r','\\','N','a','m',
|
||||
'e','s','p','a','c','e','\0' };
|
||||
static const WCHAR MyComputer_NameSpaceW[] = { 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E',
|
||||
'\\', 'M', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '\\', 'W', 'i', 'n', 'd', 'o', 'w', 's', '\\',
|
||||
'C', 'u', 'r', 'r', 'e', 'n', 't', 'V', 'e', 'r', 's', 'i', 'o', 'n', '\\', 'E', 'x', 'p', 'l',
|
||||
'o', 'r', 'e', 'r', '\\', 'M', 'y', 'C', 'o', 'm', 'p', 'u', 't', 'e', 'r', '\\', 'N', 'a', 'm',
|
||||
'e', 's', 'p', 'a', 'c', 'e', '\0'
|
||||
};
|
||||
|
||||
BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags)
|
||||
{
|
||||
|
@ -105,7 +106,7 @@ BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags)
|
|||
HKEY hKey;
|
||||
UINT i;
|
||||
|
||||
while (bRet && wszDriveName[0]<='Z')
|
||||
while (bRet && wszDriveName[0] <= 'Z')
|
||||
{
|
||||
if(dwDrivemap & 0x00000001L)
|
||||
bRet = AddToEnumList(_ILCreateDrive(wszDriveName));
|
||||
|
@ -117,7 +118,7 @@ BOOL CDrivesFolderEnum::CreateMyCompEnumList(DWORD dwFlags)
|
|||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
if (bRet && ERROR_SUCCESS == RegOpenKeyExW(i == 0 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER,
|
||||
MyComputer_NameSpaceW, 0, KEY_READ, &hKey))
|
||||
MyComputer_NameSpaceW, 0, KEY_READ, &hKey))
|
||||
{
|
||||
WCHAR wszBuf[50];
|
||||
DWORD dwSize, j = 0;
|
||||
|
@ -180,7 +181,7 @@ HRESULT WINAPI CDrivesFolder::FinalConstruct()
|
|||
return E_OUTOFMEMORY;
|
||||
|
||||
i = swprintf(wszMyCompKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\");
|
||||
StringFromGUID2(CLSID_MyComputer, wszMyCompKey + i, sizeof(wszMyCompKey)/sizeof(wszMyCompKey[0]) - i);
|
||||
StringFromGUID2(CLSID_MyComputer, wszMyCompKey + i, sizeof(wszMyCompKey) / sizeof(wszMyCompKey[0]) - i);
|
||||
dwSize = sizeof(szName);
|
||||
if (RegGetValueW(HKEY_CURRENT_USER, wszMyCompKey,
|
||||
NULL, RRF_RT_REG_SZ, NULL, szName, &dwSize) == ERROR_SUCCESS)
|
||||
|
@ -199,7 +200,7 @@ HRESULT WINAPI CDrivesFolder::FinalConstruct()
|
|||
* ISF_MyComputer_fnParseDisplayName
|
||||
*/
|
||||
HRESULT WINAPI CDrivesFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
LPCWSTR szNext = NULL;
|
||||
|
@ -225,7 +226,7 @@ HRESULT WINAPI CDrivesFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLES
|
|||
}
|
||||
/* do we have an absolute path name ? */
|
||||
else if (PathGetDriveNumberW (lpszDisplayName) >= 0 &&
|
||||
lpszDisplayName[2] == (WCHAR) '\\')
|
||||
lpszDisplayName[2] == (WCHAR) '\\')
|
||||
{
|
||||
szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH);
|
||||
/* make drive letter uppercase to enable PIDL comparison */
|
||||
|
@ -236,7 +237,7 @@ HRESULT WINAPI CDrivesFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLES
|
|||
if (szNext && *szNext)
|
||||
{
|
||||
hr = SHELL32_ParseNextElement (this, hwndOwner, pbc, &pidlTemp,
|
||||
(LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
(LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -266,13 +267,13 @@ HRESULT WINAPI CDrivesFolder::EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUM
|
|||
|
||||
if (ppEnumIDList == NULL)
|
||||
return E_POINTER;
|
||||
|
||||
|
||||
*ppEnumIDList = NULL;
|
||||
ATLTRY (theEnumerator = new CComObject<CDrivesFolderEnum>);
|
||||
|
||||
|
||||
if (theEnumerator == NULL)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
|
||||
hResult = theEnumerator->QueryInterface (IID_IEnumIDList, (void **)&result);
|
||||
if (FAILED (hResult))
|
||||
{
|
||||
|
@ -419,7 +420,7 @@ HRESULT WINAPI CDrivesFolder::GetAttributesOf (UINT cidl, LPCITEMIDLIST * apidl,
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CDrivesFolder::GetUIObjectOf (HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid,
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
|
@ -440,7 +441,7 @@ HRESULT WINAPI CDrivesFolder::GetUIObjectOf (HWND hwndOwner, UINT cidl, LPCITEMI
|
|||
else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
|
||||
{
|
||||
hr = IDataObject_Constructor (hwndOwner,
|
||||
pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
}
|
||||
else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1))
|
||||
{
|
||||
|
@ -459,10 +460,10 @@ HRESULT WINAPI CDrivesFolder::GetUIObjectOf (HWND hwndOwner, UINT cidl, LPCITEMI
|
|||
else if (IsEqualIID (riid, IID_IDropTarget) && (cidl >= 1))
|
||||
{
|
||||
hr = this->QueryInterface(IID_IDropTarget,
|
||||
(LPVOID *) &pObj);
|
||||
(LPVOID *) &pObj);
|
||||
}
|
||||
else if ((IsEqualIID(riid,IID_IShellLinkW) ||
|
||||
IsEqualIID(riid,IID_IShellLinkA)) && (cidl == 1))
|
||||
else if ((IsEqualIID(riid, IID_IShellLinkW) ||
|
||||
IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1))
|
||||
{
|
||||
pidl = ILCombine (pidlRoot, apidl[0]);
|
||||
hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*) &pObj);
|
||||
|
@ -493,7 +494,7 @@ HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
if (!strRet)
|
||||
return E_INVALIDARG;
|
||||
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
||||
if (!pszPath)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
|
@ -519,12 +520,13 @@ HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)
|
||||
{
|
||||
static const WCHAR clsidW[] =
|
||||
{ 'C','L','S','I','D','\\',0 };
|
||||
{ 'C', 'L', 'S', 'I', 'D', '\\', 0 };
|
||||
static const WCHAR shellfolderW[] =
|
||||
{ '\\','s','h','e','l','l','f','o','l','d','e','r',0 };
|
||||
{ '\\', 's', 'h', 'e', 'l', 'l', 'f', 'o', 'l', 'd', 'e', 'r', 0 };
|
||||
static const WCHAR wantsForParsingW[] =
|
||||
{ 'W','a','n','t','s','F','o','r','P','a','r','s','i','n',
|
||||
'g',0 };
|
||||
{ 'W', 'a', 'n', 't', 's', 'F', 'o', 'r', 'P', 'a', 'r', 's', 'i', 'n',
|
||||
'g', 0
|
||||
};
|
||||
int bWantsForParsing = FALSE;
|
||||
WCHAR szRegPath[100];
|
||||
LONG r;
|
||||
|
@ -549,14 +551,14 @@ HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
bWantsForParsing = TRUE;
|
||||
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
bWantsForParsing)
|
||||
bWantsForParsing)
|
||||
{
|
||||
/*
|
||||
* We need the filesystem path to the destination folder
|
||||
* Only the folder itself can know it
|
||||
*/
|
||||
hr = SHELL32_GetDisplayNameOfChild (this, pidl,
|
||||
dwFlags, pszPath, MAX_PATH);
|
||||
dwFlags, pszPath, MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -603,15 +605,15 @@ HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
{
|
||||
WCHAR wszDrive[18] = {0};
|
||||
DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags;
|
||||
static const WCHAR wszOpenBracket[] = {' ','(',0};
|
||||
static const WCHAR wszCloseBracket[] = {')',0};
|
||||
static const WCHAR wszOpenBracket[] = {' ', '(', 0};
|
||||
static const WCHAR wszCloseBracket[] = {')', 0};
|
||||
|
||||
lstrcpynW(wszDrive, pszPath, 4);
|
||||
pszPath[0] = L'\0';
|
||||
GetVolumeInformationW (wszDrive, pszPath,
|
||||
MAX_PATH - 7,
|
||||
&dwVolumeSerialNumber,
|
||||
&dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0);
|
||||
MAX_PATH - 7,
|
||||
&dwVolumeSerialNumber,
|
||||
&dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0);
|
||||
pszPath[MAX_PATH-1] = L'\0';
|
||||
if (!wcslen(pszPath))
|
||||
{
|
||||
|
@ -683,7 +685,7 @@ HRESULT WINAPI CDrivesFolder::GetDisplayNameOf (LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
* ppidlOut [out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CDrivesFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
LPWSTR sName;
|
||||
HKEY hKey;
|
||||
|
@ -695,13 +697,13 @@ HRESULT WINAPI CDrivesFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
|
|||
|
||||
if (_ILIsDrive(pidl))
|
||||
{
|
||||
if (_ILSimpleGetTextW(pidl, szName, sizeof(szName)/sizeof(WCHAR)))
|
||||
{
|
||||
SetVolumeLabelW(szName, lpName);
|
||||
}
|
||||
if (pPidlOut)
|
||||
*pPidlOut = _ILCreateDrive(szName);
|
||||
return S_OK;
|
||||
if (_ILSimpleGetTextW(pidl, szName, sizeof(szName) / sizeof(WCHAR)))
|
||||
{
|
||||
SetVolumeLabelW(szName, lpName);
|
||||
}
|
||||
if (pPidlOut)
|
||||
*pPidlOut = _ILCreateDrive(szName);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -717,7 +719,7 @@ HRESULT WINAPI CDrivesFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
|
|||
{
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
|
||||
if (RegOpenKeyExW(HKEY_CURRENT_USER,
|
||||
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",
|
||||
0,
|
||||
|
@ -756,7 +758,7 @@ HRESULT WINAPI CDrivesFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG
|
|||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (pSort)
|
||||
*pSort = 0;
|
||||
*pSort = 0;
|
||||
if (pDisplay)
|
||||
*pDisplay = 0;
|
||||
return S_OK;
|
||||
|
@ -806,29 +808,29 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHE
|
|||
psd->str.uType = STRRET_CSTR;
|
||||
switch (iColumn)
|
||||
{
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* total size */
|
||||
if (_ILIsDrive (pidl))
|
||||
{
|
||||
_ILSimpleGetText (pidl, szPath, MAX_PATH);
|
||||
GetDiskFreeSpaceExA (szPath, NULL, &ulBytes, NULL);
|
||||
StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH);
|
||||
}
|
||||
break;
|
||||
case 3: /* free size */
|
||||
if (_ILIsDrive (pidl))
|
||||
{
|
||||
_ILSimpleGetText (pidl, szPath, MAX_PATH);
|
||||
GetDiskFreeSpaceExA (szPath, &ulBytes, NULL, NULL);
|
||||
StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH);
|
||||
}
|
||||
break;
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* total size */
|
||||
if (_ILIsDrive (pidl))
|
||||
{
|
||||
_ILSimpleGetText (pidl, szPath, MAX_PATH);
|
||||
GetDiskFreeSpaceExA (szPath, NULL, &ulBytes, NULL);
|
||||
StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH);
|
||||
}
|
||||
break;
|
||||
case 3: /* free size */
|
||||
if (_ILIsDrive (pidl))
|
||||
{
|
||||
_ILSimpleGetText (pidl, szPath, MAX_PATH);
|
||||
GetDiskFreeSpaceExA (szPath, &ulBytes, NULL, NULL);
|
||||
StrFormatByteSizeA (ulBytes.LowPart, psd->str.cStr, MAX_PATH);
|
||||
}
|
||||
break;
|
||||
}
|
||||
hr = S_OK;
|
||||
}
|
||||
|
@ -850,7 +852,7 @@ HRESULT WINAPI CDrivesFolder::GetClassID(CLSID *lpClassId)
|
|||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (!lpClassId)
|
||||
return E_POINTER;
|
||||
return E_POINTER;
|
||||
*lpClassId = CLSID_MyComputer;
|
||||
|
||||
return S_OK;
|
||||
|
|
|
@ -36,15 +36,15 @@ CFSFolder::EnumObjects.
|
|||
class CFileSysEnumX :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CFileSysEnumX();
|
||||
~CFileSysEnumX();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CFileSysEnumX();
|
||||
~CFileSysEnumX();
|
||||
HRESULT WINAPI Initialize(DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CFileSysEnumX)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CFileSysEnumX)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
static const shvheader MyDocumentsSFHeader[] = {
|
||||
|
@ -102,7 +102,7 @@ HRESULT WINAPI CMyDocsFolder::FinalConstruct()
|
|||
}
|
||||
|
||||
HRESULT WINAPI CMyDocsFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
WCHAR szElement[MAX_PATH];
|
||||
LPCWSTR szNext = NULL;
|
||||
|
@ -168,7 +168,7 @@ HRESULT WINAPI CMyDocsFolder::ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLES
|
|||
if (szNext && *szNext)
|
||||
{
|
||||
hr = SHELL32_ParseNextElement(this, hwndOwner, pbc,
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
&pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -349,14 +349,14 @@ HRESULT WINAPI CMyDocsFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, D
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl,
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -370,7 +370,7 @@ HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMID
|
|||
else if (IsEqualIID (riid, IID_IDataObject) && (cidl >= 1))
|
||||
{
|
||||
hr = IDataObject_Constructor( hwndOwner,
|
||||
pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
pidlRoot, apidl, cidl, (IDataObject **)&pObj);
|
||||
}
|
||||
else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1))
|
||||
{
|
||||
|
@ -419,16 +419,16 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
if (!strRet)
|
||||
return E_INVALIDARG;
|
||||
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
|
||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
||||
if (!pszPath)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR));
|
||||
ZeroMemory(pszPath, (MAX_PATH + 1) * sizeof(WCHAR));
|
||||
|
||||
if (_ILIsMyDocuments (pidl))
|
||||
{
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||
wcscpy(pszPath, sPathTarget);
|
||||
else
|
||||
HCR_GetClassNameW(CLSID_MyDocuments, pszPath, MAX_PATH);
|
||||
|
@ -459,12 +459,13 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
{
|
||||
/* get the "WantsFORPARSING" flag from the registry */
|
||||
static const WCHAR clsidW[] =
|
||||
{ 'C','L','S','I','D','\\',0 };
|
||||
{ 'C', 'L', 'S', 'I', 'D', '\\', 0 };
|
||||
static const WCHAR shellfolderW[] =
|
||||
{ '\\','s','h','e','l','l','f','o','l','d','e','r',0 };
|
||||
{ '\\', 's', 'h', 'e', 'l', 'l', 'f', 'o', 'l', 'd', 'e', 'r', 0 };
|
||||
static const WCHAR wantsForParsingW[] =
|
||||
{ 'W','a','n','t','s','F','o','r','P','a','r','s','i','n',
|
||||
'g',0 };
|
||||
{ 'W', 'a', 'n', 't', 's', 'F', 'o', 'r', 'P', 'a', 'r', 's', 'i', 'n',
|
||||
'g', 0
|
||||
};
|
||||
WCHAR szRegPath[100];
|
||||
LONG r;
|
||||
|
||||
|
@ -480,7 +481,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
}
|
||||
|
||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||
bWantsForParsing)
|
||||
bWantsForParsing)
|
||||
{
|
||||
/*
|
||||
* we need the filesystem path to the destination folder.
|
||||
|
@ -489,7 +490,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags,
|
||||
pszPath,
|
||||
MAX_PATH);
|
||||
TRACE("CP\n");
|
||||
TRACE("CP\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -497,14 +498,14 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
pszPath[0] = ':';
|
||||
pszPath[1] = ':';
|
||||
SHELL32_GUIDToStringW (*clsid, &pszPath[2]);
|
||||
TRACE("CP\n");
|
||||
TRACE("CP\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* user friendly name */
|
||||
HCR_GetClassNameW (*clsid, pszPath, MAX_PATH);
|
||||
TRACE("CP\n");
|
||||
TRACE("CP\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -513,7 +514,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
|
||||
/* file system folder or file rooted at the desktop */
|
||||
if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) &&
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
|
||||
{
|
||||
lstrcpynW(pszPath, sPathTarget, MAX_PATH - 1);
|
||||
TRACE("CP %s\n", debugstr_w(pszPath));
|
||||
|
@ -527,7 +528,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
if (!_ILIsFolder(pidl))
|
||||
{
|
||||
SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
|
||||
TRACE("CP\n");
|
||||
TRACE("CP\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -537,7 +538,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
/* a complex pidl, let the subfolder do the work */
|
||||
hr = SHELL32_GetDisplayNameOfChild (this, pidl, dwFlags,
|
||||
pszPath, MAX_PATH);
|
||||
TRACE("CP\n");
|
||||
TRACE("CP\n");
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
@ -553,7 +554,7 @@ HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags
|
|||
}
|
||||
|
||||
HRESULT WINAPI CMyDocsFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl,
|
||||
debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
|
@ -590,7 +591,7 @@ HRESULT WINAPI CMyDocsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlag
|
|||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= MYDOCUMENTSSHELLVIEWCOLUMNS)
|
||||
return E_INVALIDARG;
|
||||
return E_INVALIDARG;
|
||||
|
||||
*pcsFlags = MyDocumentsSFHeader[iColumn].pcsFlags;
|
||||
|
||||
|
@ -627,22 +628,22 @@ HRESULT WINAPI CMyDocsFolder::GetDetailsOf(LPCITEMIDLIST pidl, UINT iColumn, SHE
|
|||
psd->str.uType = STRRET_CSTR;
|
||||
switch (iColumn)
|
||||
{
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 0: /* name */
|
||||
hr = GetDisplayNameOf(pidl,
|
||||
SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* size */
|
||||
_ILGetFileSize (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* type */
|
||||
_ILGetFileType (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
_ILGetFileDate (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
_ILGetFileAttributes (pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
}
|
||||
|
||||
return hr;
|
||||
|
@ -656,8 +657,8 @@ HRESULT WINAPI CMyDocsFolder::MapColumnToSCID (UINT column, SHCOLUMNID *pscid)
|
|||
|
||||
HRESULT WINAPI CMyDocsFolder::GetClassID(CLSID *lpClassId)
|
||||
{
|
||||
static GUID const CLSID_MyDocuments =
|
||||
{ 0x450d8fba, 0xad25, 0x11d0, {0x98,0xa8,0x08,0x00,0x36,0x1b,0x11,0x03} };
|
||||
static GUID const CLSID_MyDocuments =
|
||||
{ 0x450d8fba, 0xad25, 0x11d0, {0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03} };
|
||||
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
|
|
|
@ -66,13 +66,13 @@ HRESULT WINAPI CNetFolder::FinalConstruct()
|
|||
* ISF_NetworkPlaces_fnParseDisplayName
|
||||
*/
|
||||
HRESULT WINAPI CNetFolder::ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
HRESULT hr = E_UNEXPECTED;
|
||||
|
||||
TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this,
|
||||
hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
|
||||
*ppidl = 0;
|
||||
if (pchEaten)
|
||||
|
@ -89,13 +89,13 @@ HRESULT WINAPI CNetFolder::ParseDisplayName(HWND hwndOwner, LPBC pbcReserved, LP
|
|||
HRESULT WINAPI CNetFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
|
||||
{
|
||||
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this,
|
||||
hwndOwner, dwFlags, ppEnumIDList);
|
||||
hwndOwner, dwFlags, ppEnumIDList);
|
||||
|
||||
*ppEnumIDList = NULL; //IEnumIDList_Constructor();
|
||||
|
||||
TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList);
|
||||
return S_FALSE;
|
||||
// return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
|
||||
return S_FALSE;
|
||||
// return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -104,7 +104,7 @@ HRESULT WINAPI CNetFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLI
|
|||
HRESULT WINAPI CNetFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut);
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ HRESULT WINAPI CNetFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, RE
|
|||
HRESULT WINAPI CNetFolder::BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
*ppvOut = NULL;
|
||||
return E_NOTIMPL;
|
||||
|
@ -180,12 +180,12 @@ HRESULT WINAPI CNetFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID
|
|||
HRESULT WINAPI CNetFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWORD *rgfInOut)
|
||||
{
|
||||
static const DWORD dwNethoodAttributes =
|
||||
SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR |
|
||||
SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR |
|
||||
SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this,
|
||||
cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
|
||||
|
||||
if (!rgfInOut)
|
||||
return E_INVALIDARG;
|
||||
|
@ -229,14 +229,14 @@ HRESULT WINAPI CNetFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl, DWOR
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CNetFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, REFIID riid,
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
LPITEMIDLIST pidl;
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", this,
|
||||
hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -308,10 +308,10 @@ HRESULT WINAPI CNetFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, L
|
|||
* ppidlOut [out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CNetFolder::SetNameOf (HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this,
|
||||
hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,25 +33,25 @@ class IExtractIconWImpl :
|
|||
public IExtractIconW,
|
||||
public IExtractIconA
|
||||
{
|
||||
private:
|
||||
LPITEMIDLIST pidl;
|
||||
public:
|
||||
IExtractIconWImpl();
|
||||
~IExtractIconWImpl();
|
||||
HRESULT WINAPI Initialize(LPCITEMIDLIST pidl);
|
||||
private:
|
||||
LPITEMIDLIST pidl;
|
||||
public:
|
||||
IExtractIconWImpl();
|
||||
~IExtractIconWImpl();
|
||||
HRESULT WINAPI Initialize(LPCITEMIDLIST pidl);
|
||||
|
||||
// IExtractIconW
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags);
|
||||
virtual HRESULT STDMETHODCALLTYPE Extract(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
|
||||
// IExtractIconW
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags);
|
||||
virtual HRESULT STDMETHODCALLTYPE Extract(LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
|
||||
|
||||
// IExtractIconA
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags);
|
||||
virtual HRESULT STDMETHODCALLTYPE Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
|
||||
// IExtractIconA
|
||||
virtual HRESULT STDMETHODCALLTYPE GetIconLocation(UINT uFlags, LPSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags);
|
||||
virtual HRESULT STDMETHODCALLTYPE Extract(LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
|
||||
|
||||
BEGIN_COM_MAP(IExtractIconWImpl)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IExtractIconW, IExtractIconW)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IExtractIconA, IExtractIconA)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(IExtractIconWImpl)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IExtractIconW, IExtractIconW)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IExtractIconA, IExtractIconA)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
static shvheader PrinterSFHeader[] = {
|
||||
|
@ -119,8 +119,8 @@ HRESULT WINAPI IExtractIconWImpl::GetIconLocation(UINT uFlags, /* GIL_ fl
|
|||
* IExtractIconW_Extract
|
||||
*/
|
||||
HRESULT WINAPI IExtractIconWImpl::Extract(LPCWSTR pszFile,
|
||||
UINT nIconIndex, HICON *phiconLarge,
|
||||
HICON *phiconSmall, UINT nIconSize)
|
||||
UINT nIconIndex, HICON *phiconLarge,
|
||||
HICON *phiconSmall, UINT nIconSize)
|
||||
{
|
||||
int index;
|
||||
|
||||
|
@ -142,10 +142,10 @@ HRESULT WINAPI IExtractIconWImpl::Extract(LPCWSTR pszFile,
|
|||
* IExtractIconA_GetIconLocation
|
||||
*/
|
||||
HRESULT WINAPI IExtractIconWImpl::GetIconLocation(UINT uFlags,
|
||||
LPSTR szIconFile,
|
||||
UINT cchMax,
|
||||
int * piIndex,
|
||||
UINT * pwFlags)
|
||||
LPSTR szIconFile,
|
||||
UINT cchMax,
|
||||
int * piIndex,
|
||||
UINT * pwFlags)
|
||||
{
|
||||
HRESULT ret;
|
||||
LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cchMax * sizeof(WCHAR));
|
||||
|
@ -163,8 +163,8 @@ HRESULT WINAPI IExtractIconWImpl::GetIconLocation(UINT uFlags,
|
|||
* IExtractIconA_Extract
|
||||
*/
|
||||
HRESULT WINAPI IExtractIconWImpl::Extract(LPCSTR pszFile,
|
||||
UINT nIconIndex, HICON *phiconLarge,
|
||||
HICON *phiconSmall, UINT nIconSize)
|
||||
UINT nIconIndex, HICON *phiconLarge,
|
||||
HICON *phiconSmall, UINT nIconSize)
|
||||
{
|
||||
HRESULT ret;
|
||||
INT len = MultiByteToWideChar(CP_ACP, 0, pszFile, -1, NULL, 0);
|
||||
|
@ -213,16 +213,16 @@ static HRESULT WINAPI IEI_Printers_Constructor(LPCITEMIDLIST pidl, REFIID riid,
|
|||
class CPrintersEnum :
|
||||
public IEnumIDListImpl
|
||||
{
|
||||
private:
|
||||
public:
|
||||
CPrintersEnum();
|
||||
~CPrintersEnum();
|
||||
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags);
|
||||
BOOL CreatePrintersEnumList(DWORD dwFlags);
|
||||
private:
|
||||
public:
|
||||
CPrintersEnum();
|
||||
~CPrintersEnum();
|
||||
HRESULT WINAPI Initialize(HWND hwndOwner, DWORD dwFlags);
|
||||
BOOL CreatePrintersEnumList(DWORD dwFlags);
|
||||
|
||||
BEGIN_COM_MAP(CPrintersEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(CPrintersEnum)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
CPrintersEnum::CPrintersEnum()
|
||||
|
@ -245,7 +245,7 @@ static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
|
|||
PIDLDATA tmp;
|
||||
LPITEMIDLIST pidl;
|
||||
PIDLPrinterStruct * p;
|
||||
int size0 = (char*)&tmp.u.cprinter.szName-(char*)&tmp.u.cprinter;
|
||||
int size0 = (char*)&tmp.u.cprinter.szName - (char*)&tmp.u.cprinter;
|
||||
int size = size0;
|
||||
|
||||
tmp.type = 0x00;
|
||||
|
@ -265,8 +265,8 @@ static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
|
|||
if (!pidl)
|
||||
return pidl;
|
||||
|
||||
pidl->mkid.cb = size+2;
|
||||
memcpy(pidl->mkid.abID, &tmp, 2+size0);
|
||||
pidl->mkid.cb = size + 2;
|
||||
memcpy(pidl->mkid.abID, &tmp, 2 + size0);
|
||||
|
||||
p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter;
|
||||
|
||||
|
@ -281,7 +281,7 @@ static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi)
|
|||
else
|
||||
p->szName[p->offsServer] = L'\0';
|
||||
|
||||
*(WORD*)((char*)pidl+(size+2)) = 0;
|
||||
*(WORD*)((char*)pidl + (size + 2)) = 0;
|
||||
return pidl;
|
||||
}
|
||||
|
||||
|
@ -351,11 +351,11 @@ HRESULT WINAPI CPrinterFolder::FinalConstruct()
|
|||
* This is E_NOTIMPL in Windows too.
|
||||
*/
|
||||
HRESULT WINAPI CPrinterFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
|
||||
{
|
||||
TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
|
||||
pchEaten, ppidl, pdwAttributes);
|
||||
|
||||
*ppidl = 0;
|
||||
if (pchEaten)
|
||||
|
@ -368,8 +368,8 @@ static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl)
|
|||
{
|
||||
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
|
||||
|
||||
if (pdata && pdata->type==0x00)
|
||||
return (PIDLPrinterStruct*)&(pdata->u.cfont);
|
||||
if (pdata && pdata->type == 0x00)
|
||||
return (PIDLPrinterStruct*) & (pdata->u.cfont);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -413,7 +413,7 @@ HRESULT WINAPI CPrinterFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUM
|
|||
HRESULT WINAPI CPrinterFolder::BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
|
||||
{
|
||||
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this,
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
return SHELL32_BindToChild (pidlRoot, NULL, pidl, riid, ppvOut);
|
||||
}
|
||||
|
@ -452,7 +452,7 @@ HRESULT WINAPI CPrinterFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPV
|
|||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this,
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
hwndOwner, shdebugstr_guid (&riid), ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -515,13 +515,13 @@ HRESULT WINAPI CPrinterFolder::GetAttributesOf(UINT cidl, LPCITEMIDLIST *apidl,
|
|||
*
|
||||
*/
|
||||
HRESULT WINAPI CPrinterFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl,
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
|
||||
{
|
||||
IUnknown *pObj = NULL;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
this, hwndOwner, cidl, apidl, shdebugstr_guid (&riid), prgfInOut, ppvOut);
|
||||
|
||||
if (!ppvOut)
|
||||
return hr;
|
||||
|
@ -607,7 +607,7 @@ HRESULT WINAPI CPrinterFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlag
|
|||
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
|
||||
*/
|
||||
HRESULT WINAPI CPrinterFolder::SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
|
||||
{
|
||||
FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", this, hwndOwner, pidl,
|
||||
debugstr_w (lpName), dwFlags, pPidlOut);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* UNIXFS - Shell namespace extension for the unix filesystem
|
||||
*
|
||||
* Copyright (C) 2005 Michael Jung
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* Placeholder in ReactOS, we don't need this */
|
|
@ -26,14 +26,14 @@ typedef struct _DynamicShellEntry_
|
|||
CLSID ClassID;
|
||||
IContextMenu * CMenu;
|
||||
struct _DynamicShellEntry_ * Next;
|
||||
}DynamicShellEntry, *PDynamicShellEntry;
|
||||
} DynamicShellEntry, *PDynamicShellEntry;
|
||||
|
||||
typedef struct _StaticShellEntry_
|
||||
{
|
||||
LPWSTR szVerb;
|
||||
LPWSTR szClass;
|
||||
struct _StaticShellEntry_ * Next;
|
||||
}StaticShellEntry, *PStaticShellEntry;
|
||||
LPWSTR szVerb;
|
||||
LPWSTR szClass;
|
||||
struct _StaticShellEntry_ * Next;
|
||||
} StaticShellEntry, *PStaticShellEntry;
|
||||
|
||||
WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls);
|
||||
|
||||
|
@ -41,53 +41,53 @@ class IDefaultContextMenuImpl :
|
|||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IContextMenu2
|
||||
{
|
||||
private:
|
||||
DEFCONTEXTMENU dcm;
|
||||
IDataObject * pDataObj;
|
||||
DWORD bGroupPolicyActive;
|
||||
PDynamicShellEntry dhead; /* first dynamic shell extension entry */
|
||||
UINT iIdSHEFirst; /* first used id */
|
||||
UINT iIdSHELast; /* last used id */
|
||||
PStaticShellEntry shead; /* first static shell extension entry */
|
||||
UINT iIdSCMFirst; /* first static used id */
|
||||
UINT iIdSCMLast; /* last static used id */
|
||||
public:
|
||||
IDefaultContextMenuImpl();
|
||||
~IDefaultContextMenuImpl();
|
||||
HRESULT WINAPI Initialize(const DEFCONTEXTMENU *pdcm);
|
||||
void SH_AddStaticEntry(const WCHAR *szVerb, const WCHAR *szClass);
|
||||
void SH_AddStaticEntryForKey(HKEY hKey, const WCHAR *szClass);
|
||||
void SH_AddStaticEntryForFileClass(const WCHAR *szExt);
|
||||
BOOL IsShellExtensionAlreadyLoaded(const CLSID *szClass);
|
||||
HRESULT SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *szClass, BOOL bExternalInit);
|
||||
UINT EnumerateDynamicContextHandlerForKey(HKEY hRootKey);
|
||||
UINT InsertMenuItemsOfDynamicContextMenuExtension(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast);
|
||||
UINT BuildBackgroundContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags);
|
||||
UINT AddStaticContextMenusToMenu(HMENU hMenu, UINT indexMenu);
|
||||
UINT BuildShellItemContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags);
|
||||
HRESULT DoPaste(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoOpenOrExplore(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoCreateLink(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoDelete(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoCopyOrCut(LPCMINVOKECOMMANDINFO lpcmi, BOOL bCopy);
|
||||
HRESULT DoRename(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoProperties(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoFormat(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoDynamicShellExtensions(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoStaticShellExtensions(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
private:
|
||||
DEFCONTEXTMENU dcm;
|
||||
IDataObject * pDataObj;
|
||||
DWORD bGroupPolicyActive;
|
||||
PDynamicShellEntry dhead; /* first dynamic shell extension entry */
|
||||
UINT iIdSHEFirst; /* first used id */
|
||||
UINT iIdSHELast; /* last used id */
|
||||
PStaticShellEntry shead; /* first static shell extension entry */
|
||||
UINT iIdSCMFirst; /* first static used id */
|
||||
UINT iIdSCMLast; /* last static used id */
|
||||
public:
|
||||
IDefaultContextMenuImpl();
|
||||
~IDefaultContextMenuImpl();
|
||||
HRESULT WINAPI Initialize(const DEFCONTEXTMENU *pdcm);
|
||||
void SH_AddStaticEntry(const WCHAR *szVerb, const WCHAR *szClass);
|
||||
void SH_AddStaticEntryForKey(HKEY hKey, const WCHAR *szClass);
|
||||
void SH_AddStaticEntryForFileClass(const WCHAR *szExt);
|
||||
BOOL IsShellExtensionAlreadyLoaded(const CLSID *szClass);
|
||||
HRESULT SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *szClass, BOOL bExternalInit);
|
||||
UINT EnumerateDynamicContextHandlerForKey(HKEY hRootKey);
|
||||
UINT InsertMenuItemsOfDynamicContextMenuExtension(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast);
|
||||
UINT BuildBackgroundContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags);
|
||||
UINT AddStaticContextMenusToMenu(HMENU hMenu, UINT indexMenu);
|
||||
UINT BuildShellItemContextMenu(HMENU hMenu, UINT iIdCmdFirst, UINT iIdCmdLast, UINT uFlags);
|
||||
HRESULT DoPaste(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoOpenOrExplore(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoCreateLink(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoDelete(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoCopyOrCut(LPCMINVOKECOMMANDINFO lpcmi, BOOL bCopy);
|
||||
HRESULT DoRename(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoProperties(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoFormat(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoDynamicShellExtensions(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
HRESULT DoStaticShellExtensions(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
|
||||
// IContextMenu
|
||||
virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
|
||||
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand,UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen);
|
||||
// IContextMenu
|
||||
virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
|
||||
virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
|
||||
virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen);
|
||||
|
||||
// IContextMenu2
|
||||
virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
// IContextMenu2
|
||||
virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
BEGIN_COM_MAP(IDefaultContextMenuImpl)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2)
|
||||
END_COM_MAP()
|
||||
BEGIN_COM_MAP(IDefaultContextMenuImpl)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
||||
IDefaultContextMenuImpl::IDefaultContextMenuImpl()
|
||||
|
@ -126,18 +126,18 @@ IDefaultContextMenuImpl::~IDefaultContextMenuImpl()
|
|||
HeapFree(GetProcessHeap(), 0, sEntry->szVerb);
|
||||
HeapFree(GetProcessHeap(), 0, sEntry);
|
||||
sEntry = sNext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HRESULT WINAPI IDefaultContextMenuImpl::Initialize(const DEFCONTEXTMENU *pdcm)
|
||||
{
|
||||
IDataObject *newDataObj;
|
||||
IDataObject *newDataObj;
|
||||
|
||||
TRACE("cidl %u\n", dcm.cidl);
|
||||
if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, IID_IDataObject, (void**)&newDataObj)))
|
||||
TRACE("cidl %u\n", dcm.cidl);
|
||||
if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, IID_IDataObject, (void**)&newDataObj)))
|
||||
pDataObj = newDataObj;
|
||||
CopyMemory(&dcm, pdcm, sizeof(DEFCONTEXTMENU));
|
||||
return S_OK;
|
||||
CopyMemory(&dcm, pdcm, sizeof(DEFCONTEXTMENU));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -157,17 +157,17 @@ IDefaultContextMenuImpl::SH_AddStaticEntry(const WCHAR *szVerb, const WCHAR * sz
|
|||
lastEntry = curEntry;
|
||||
curEntry = curEntry->Next;
|
||||
}
|
||||
|
||||
|
||||
TRACE("adding verb %s szClass %s\n", debugstr_w(szVerb), debugstr_w(szClass));
|
||||
|
||||
curEntry = (StaticShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(StaticShellEntry));
|
||||
if (curEntry)
|
||||
{
|
||||
curEntry->Next = NULL;
|
||||
curEntry->szVerb = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szVerb)+1) * sizeof(WCHAR));
|
||||
curEntry->szVerb = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szVerb) + 1) * sizeof(WCHAR));
|
||||
if (curEntry->szVerb)
|
||||
wcscpy(curEntry->szVerb, szVerb);
|
||||
curEntry->szClass = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szClass)+1) * sizeof(WCHAR));
|
||||
curEntry->szClass = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (wcslen(szClass) + 1) * sizeof(WCHAR));
|
||||
if (curEntry->szClass)
|
||||
wcscpy(curEntry->szClass, szClass);
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ IDefaultContextMenuImpl::SH_AddStaticEntryForKey(HKEY hKey, const WCHAR * szClas
|
|||
SH_AddStaticEntry(szName, szClass);
|
||||
}
|
||||
dwIndex++;
|
||||
}while(result == ERROR_SUCCESS);
|
||||
} while(result == ERROR_SUCCESS);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -229,7 +229,7 @@ IDefaultContextMenuImpl::SH_AddStaticEntryForFileClass(const WCHAR * szExt)
|
|||
TRACE("SH_AddStaticEntryForFileClass entered with %s\n", debugstr_w(szExt));
|
||||
|
||||
Length = wcslen(szExt);
|
||||
if (Length + (sizeof(szShell)/sizeof(WCHAR)) + 1 < sizeof(szBuffer)/sizeof(WCHAR))
|
||||
if (Length + (sizeof(szShell) / sizeof(WCHAR)) + 1 < sizeof(szBuffer) / sizeof(WCHAR))
|
||||
{
|
||||
wcscpy(szBuffer, szExt);
|
||||
wcscpy(&szBuffer[Length], szShell);
|
||||
|
@ -247,7 +247,7 @@ IDefaultContextMenuImpl::SH_AddStaticEntryForFileClass(const WCHAR * szExt)
|
|||
if (result == ERROR_SUCCESS)
|
||||
{
|
||||
Length = wcslen(szBuffer);
|
||||
if (Length + (sizeof(szShell)/sizeof(WCHAR)) + 1 < sizeof(szBuffer)/sizeof(WCHAR))
|
||||
if (Length + (sizeof(szShell) / sizeof(WCHAR)) + 1 < sizeof(szBuffer) / sizeof(WCHAR))
|
||||
{
|
||||
wcscpy(&szBuffer[Length], szShell);
|
||||
TRACE("szBuffer %s\n", debugstr_w(szBuffer));
|
||||
|
@ -274,15 +274,15 @@ IDefaultContextMenuImpl::SH_AddStaticEntryForFileClass(const WCHAR * szExt)
|
|||
result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey);
|
||||
if (result == ERROR_SUCCESS)
|
||||
{
|
||||
szBuffer[Length] = 0;
|
||||
SH_AddStaticEntryForKey(hKey, szBuffer);
|
||||
RegCloseKey(hKey);
|
||||
szBuffer[Length] = 0;
|
||||
SH_AddStaticEntryForKey(hKey, szBuffer);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
BOOL
|
||||
BOOL
|
||||
HasClipboardData()
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
|
@ -290,20 +290,20 @@ HasClipboardData()
|
|||
|
||||
if(SUCCEEDED(OleGetClipboard(&pda)))
|
||||
{
|
||||
STGMEDIUM medium;
|
||||
FORMATETC formatetc;
|
||||
STGMEDIUM medium;
|
||||
FORMATETC formatetc;
|
||||
|
||||
TRACE("pda=%p\n", pda);
|
||||
TRACE("pda=%p\n", pda);
|
||||
|
||||
/* Set the FORMATETC structure*/
|
||||
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
|
||||
if(SUCCEEDED(pda->GetData(&formatetc,&medium)))
|
||||
{
|
||||
ret = TRUE;
|
||||
ReleaseStgMedium(&medium);
|
||||
}
|
||||
/* Set the FORMATETC structure*/
|
||||
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
|
||||
if(SUCCEEDED(pda->GetData(&formatetc, &medium)))
|
||||
{
|
||||
ret = TRUE;
|
||||
ReleaseStgMedium(&medium);
|
||||
}
|
||||
|
||||
pda->Release();
|
||||
pda->Release();
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -341,140 +341,140 @@ IDefaultContextMenuImpl::IsShellExtensionAlreadyLoaded(const CLSID * szClass)
|
|||
HRESULT
|
||||
IDefaultContextMenuImpl::SH_LoadDynamicContextMenuHandler(HKEY hKey, const CLSID * pClass, BOOL bExternalInit)
|
||||
{
|
||||
HRESULT hr;
|
||||
IContextMenu * cmobj;
|
||||
IShellExtInit *shext;
|
||||
PDynamicShellEntry curEntry;
|
||||
LPOLESTR pstr;
|
||||
HRESULT hr;
|
||||
IContextMenu * cmobj;
|
||||
IShellExtInit *shext;
|
||||
PDynamicShellEntry curEntry;
|
||||
LPOLESTR pstr;
|
||||
|
||||
StringFromCLSID(*pClass, &pstr);
|
||||
StringFromCLSID(*pClass, &pstr);
|
||||
|
||||
TRACE("SH_LoadDynamicContextMenuHandler entered with This %p hKey %p pClass %s bExternalInit %u\n", this, hKey, wine_dbgstr_guid(pClass), bExternalInit);
|
||||
TRACE("SH_LoadDynamicContextMenuHandler entered with This %p hKey %p pClass %s bExternalInit %u\n", this, hKey, wine_dbgstr_guid(pClass), bExternalInit);
|
||||
|
||||
if (IsShellExtensionAlreadyLoaded(pClass))
|
||||
return S_OK;
|
||||
if (IsShellExtensionAlreadyLoaded(pClass))
|
||||
return S_OK;
|
||||
|
||||
hr = SHCoCreateInstance(NULL, pClass, NULL, IID_IContextMenu, (void**)&cmobj);
|
||||
if (hr != S_OK)
|
||||
{
|
||||
ERR("SHCoCreateInstance failed %x\n", GetLastError());
|
||||
return hr;
|
||||
}
|
||||
|
||||
if (bExternalInit)
|
||||
{
|
||||
hr = cmobj->QueryInterface(IID_IShellExtInit, (void**)&shext);
|
||||
if (hr != S_OK)
|
||||
{
|
||||
ERR("Failed to query for interface IID_IShellExtInit hr %x pClass %s\n", hr, wine_dbgstr_guid(pClass));
|
||||
cmobj->Release();
|
||||
return FALSE;
|
||||
}
|
||||
hr = shext->Initialize(NULL, pDataObj, hKey);
|
||||
shext->Release();
|
||||
if (hr != S_OK)
|
||||
{
|
||||
TRACE("Failed to initialize shell extension error %x pClass %s\n", hr, wine_dbgstr_guid(pClass));
|
||||
cmobj->Release();
|
||||
hr = SHCoCreateInstance(NULL, pClass, NULL, IID_IContextMenu, (void**)&cmobj);
|
||||
if (hr != S_OK)
|
||||
{
|
||||
ERR("SHCoCreateInstance failed %x\n", GetLastError());
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
curEntry = (DynamicShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(DynamicShellEntry));
|
||||
if(!curEntry)
|
||||
{
|
||||
cmobj->Release();
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
if (bExternalInit)
|
||||
{
|
||||
hr = cmobj->QueryInterface(IID_IShellExtInit, (void**)&shext);
|
||||
if (hr != S_OK)
|
||||
{
|
||||
ERR("Failed to query for interface IID_IShellExtInit hr %x pClass %s\n", hr, wine_dbgstr_guid(pClass));
|
||||
cmobj->Release();
|
||||
return FALSE;
|
||||
}
|
||||
hr = shext->Initialize(NULL, pDataObj, hKey);
|
||||
shext->Release();
|
||||
if (hr != S_OK)
|
||||
{
|
||||
TRACE("Failed to initialize shell extension error %x pClass %s\n", hr, wine_dbgstr_guid(pClass));
|
||||
cmobj->Release();
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
|
||||
curEntry->iIdCmdFirst = 0;
|
||||
curEntry->Next = NULL;
|
||||
curEntry->NumIds = 0;
|
||||
curEntry->CMenu = cmobj;
|
||||
memcpy(&curEntry->ClassID, pClass, sizeof(CLSID));
|
||||
curEntry = (DynamicShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(DynamicShellEntry));
|
||||
if(!curEntry)
|
||||
{
|
||||
cmobj->Release();
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (dhead)
|
||||
{
|
||||
PDynamicShellEntry pEntry = dhead;
|
||||
curEntry->iIdCmdFirst = 0;
|
||||
curEntry->Next = NULL;
|
||||
curEntry->NumIds = 0;
|
||||
curEntry->CMenu = cmobj;
|
||||
memcpy(&curEntry->ClassID, pClass, sizeof(CLSID));
|
||||
|
||||
while(pEntry->Next)
|
||||
{
|
||||
pEntry = pEntry->Next;
|
||||
}
|
||||
if (dhead)
|
||||
{
|
||||
PDynamicShellEntry pEntry = dhead;
|
||||
|
||||
pEntry->Next = curEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
dhead = curEntry;
|
||||
}
|
||||
while(pEntry->Next)
|
||||
{
|
||||
pEntry = pEntry->Next;
|
||||
}
|
||||
|
||||
return hr;
|
||||
pEntry->Next = curEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
dhead = curEntry;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
UINT
|
||||
IDefaultContextMenuImpl::EnumerateDynamicContextHandlerForKey(HKEY hRootKey)
|
||||
{
|
||||
WCHAR szKey[MAX_PATH] = {0};
|
||||
WCHAR szName[MAX_PATH] = {0};
|
||||
DWORD dwIndex, dwName;
|
||||
LONG res;
|
||||
HRESULT hResult;
|
||||
UINT index;
|
||||
CLSID clsid;
|
||||
HKEY hKey;
|
||||
WCHAR szKey[MAX_PATH] = {0};
|
||||
WCHAR szName[MAX_PATH] = {0};
|
||||
DWORD dwIndex, dwName;
|
||||
LONG res;
|
||||
HRESULT hResult;
|
||||
UINT index;
|
||||
CLSID clsid;
|
||||
HKEY hKey;
|
||||
|
||||
static const WCHAR szShellEx[] = { 's','h','e','l','l','e','x','\\','C','o','n','t','e','x','t','M','e','n','u','H','a','n','d','l','e','r','s',0 };
|
||||
static const WCHAR szShellEx[] = { 's', 'h', 'e', 'l', 'l', 'e', 'x', '\\', 'C', 'o', 'n', 't', 'e', 'x', 't', 'M', 'e', 'n', 'u', 'H', 'a', 'n', 'd', 'l', 'e', 'r', 's', 0 };
|
||||
|
||||
if (RegOpenKeyExW(hRootKey, szShellEx, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
{
|
||||
TRACE("RegOpenKeyExW failed for key %s\n", debugstr_w(szKey));
|
||||
return 0;
|
||||
}
|
||||
if (RegOpenKeyExW(hRootKey, szShellEx, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
{
|
||||
TRACE("RegOpenKeyExW failed for key %s\n", debugstr_w(szKey));
|
||||
return 0;
|
||||
}
|
||||
|
||||
dwIndex = 0;
|
||||
index = 0;
|
||||
do
|
||||
{
|
||||
dwName = MAX_PATH;
|
||||
res = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL);
|
||||
if (res == ERROR_SUCCESS)
|
||||
{
|
||||
hResult = CLSIDFromString(szName, &clsid);
|
||||
if (hResult != S_OK)
|
||||
{
|
||||
dwName = MAX_PATH;
|
||||
if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szKey, &dwName) == ERROR_SUCCESS)
|
||||
{
|
||||
hResult = CLSIDFromString(szKey, &clsid);
|
||||
}
|
||||
}
|
||||
if (SUCCEEDED(hResult))
|
||||
{
|
||||
if (bGroupPolicyActive)
|
||||
{
|
||||
if (RegGetValueW(HKEY_LOCAL_MACHINE,
|
||||
L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
|
||||
szKey,
|
||||
RRF_RT_REG_SZ,
|
||||
NULL,
|
||||
NULL,
|
||||
&dwName) == ERROR_SUCCESS)
|
||||
{
|
||||
SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
dwIndex++;
|
||||
}while(res == ERROR_SUCCESS);
|
||||
dwIndex = 0;
|
||||
index = 0;
|
||||
do
|
||||
{
|
||||
dwName = MAX_PATH;
|
||||
res = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL);
|
||||
if (res == ERROR_SUCCESS)
|
||||
{
|
||||
hResult = CLSIDFromString(szName, &clsid);
|
||||
if (hResult != S_OK)
|
||||
{
|
||||
dwName = MAX_PATH;
|
||||
if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szKey, &dwName) == ERROR_SUCCESS)
|
||||
{
|
||||
hResult = CLSIDFromString(szKey, &clsid);
|
||||
}
|
||||
}
|
||||
if (SUCCEEDED(hResult))
|
||||
{
|
||||
if (bGroupPolicyActive)
|
||||
{
|
||||
if (RegGetValueW(HKEY_LOCAL_MACHINE,
|
||||
L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
|
||||
szKey,
|
||||
RRF_RT_REG_SZ,
|
||||
NULL,
|
||||
NULL,
|
||||
&dwName) == ERROR_SUCCESS)
|
||||
{
|
||||
SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SH_LoadDynamicContextMenuHandler(hKey, &clsid, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
dwIndex++;
|
||||
} while(res == ERROR_SUCCESS);
|
||||
|
||||
RegCloseKey(hKey);
|
||||
return index;
|
||||
RegCloseKey(hKey);
|
||||
return index;
|
||||
}
|
||||
|
||||
UINT
|
||||
|
@ -506,7 +506,7 @@ IDefaultContextMenuImpl::InsertMenuItemsOfDynamicContextMenuExtension(HMENU hMen
|
|||
}
|
||||
TRACE("curEntry %p hresult %x contextmenu %p cmdfirst %x num ids %x\n", curEntry, hResult, curEntry->CMenu, curEntry->iIdCmdFirst, curEntry->NumIds);
|
||||
curEntry = curEntry->Next;
|
||||
}while(curEntry);
|
||||
} while(curEntry);
|
||||
|
||||
iIdSHELast = idCmdFirst;
|
||||
TRACE("SH_LoadContextMenuHandlers first %x last %x\n", iIdSHEFirst, iIdSHELast);
|
||||
|
@ -539,7 +539,7 @@ IDefaultContextMenuImpl::BuildBackgroundContextMenu(
|
|||
szBuffer[0] = 0;
|
||||
LoadStringW(shell32_hInstance, FCIDM_SHVIEW_VIEW, szBuffer, MAX_PATH);
|
||||
szBuffer[MAX_PATH-1] = 0;
|
||||
|
||||
|
||||
TRACE("szBuffer %s\n", debugstr_w(szBuffer));
|
||||
|
||||
mii.cbSize = sizeof(mii);
|
||||
|
@ -569,10 +569,10 @@ IDefaultContextMenuImpl::BuildBackgroundContextMenu(
|
|||
}
|
||||
/* load extensions from HKCR\* key */
|
||||
if (RegOpenKeyExW(HKEY_CLASSES_ROOT,
|
||||
L"*",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
L"*",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
EnumerateDynamicContextHandlerForKey(hKey);
|
||||
RegCloseKey(hKey);
|
||||
|
@ -580,19 +580,19 @@ IDefaultContextMenuImpl::BuildBackgroundContextMenu(
|
|||
|
||||
/* load create new shell extension */
|
||||
if (RegOpenKeyExW(HKEY_CLASSES_ROOT,
|
||||
L"CLSID\\{D969A300-E7FF-11d0-A93B-00A0C90F2719}",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
L"CLSID\\{D969A300-E7FF-11d0-A93B-00A0C90F2719}",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
SH_LoadDynamicContextMenuHandler(hKey, &CLSID_NewMenu, TRUE);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
if (InsertMenuItemsOfDynamicContextMenuExtension(hMenu, GetMenuItemCount(hMenu)-1, iIdCmdFirst, iIdCmdLast))
|
||||
|
||||
if (InsertMenuItemsOfDynamicContextMenuExtension(hMenu, GetMenuItemCount(hMenu) - 1, iIdCmdFirst, iIdCmdLast))
|
||||
{
|
||||
/* seperate dynamic context menu items */
|
||||
_InsertMenuItemW(hMenu, GetMenuItemCount(hMenu)-1, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||
_InsertMenuItemW(hMenu, GetMenuItemCount(hMenu) - 1, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||
}
|
||||
|
||||
return iIdCmdLast;
|
||||
|
@ -627,30 +627,30 @@ IDefaultContextMenuImpl::AddStaticContextMenusToMenu(
|
|||
fState = MFS_ENABLED;
|
||||
if (!wcsicmp(curEntry->szVerb, L"open"))
|
||||
{
|
||||
fState |= MFS_DEFAULT;
|
||||
idResource = IDS_OPEN_VERB;
|
||||
fState |= MFS_DEFAULT;
|
||||
idResource = IDS_OPEN_VERB;
|
||||
}
|
||||
else if (!wcsicmp(curEntry->szVerb, L"explore"))
|
||||
idResource = IDS_EXPLORE_VERB;
|
||||
idResource = IDS_EXPLORE_VERB;
|
||||
else if (!wcsicmp(curEntry->szVerb, L"runas"))
|
||||
idResource = IDS_RUNAS_VERB;
|
||||
idResource = IDS_RUNAS_VERB;
|
||||
else if (!wcsicmp(curEntry->szVerb, L"edit"))
|
||||
idResource = IDS_EDIT_VERB;
|
||||
idResource = IDS_EDIT_VERB;
|
||||
else if (!wcsicmp(curEntry->szVerb, L"find"))
|
||||
idResource = IDS_FIND_VERB;
|
||||
idResource = IDS_FIND_VERB;
|
||||
else if (!wcsicmp(curEntry->szVerb, L"print"))
|
||||
idResource = IDS_PRINT_VERB;
|
||||
idResource = IDS_PRINT_VERB;
|
||||
else if (!wcsicmp(curEntry->szVerb, L"printto"))
|
||||
{
|
||||
curEntry = curEntry->Next;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
idResource = 0;
|
||||
idResource = 0;
|
||||
|
||||
if (idResource > 0)
|
||||
{
|
||||
if (LoadStringW(shell32_hInstance, idResource, szVerb, sizeof(szVerb)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, idResource, szVerb, sizeof(szVerb) / sizeof(WCHAR)))
|
||||
{
|
||||
/* use translated verb */
|
||||
szVerb[(sizeof(szVerb)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
@ -664,7 +664,7 @@ IDefaultContextMenuImpl::AddStaticContextMenusToMenu(
|
|||
else
|
||||
{
|
||||
Length = wcslen(curEntry->szClass) + wcslen(curEntry->szVerb) + 8;
|
||||
if (Length < sizeof(szTemp)/sizeof(WCHAR))
|
||||
if (Length < sizeof(szTemp) / sizeof(WCHAR))
|
||||
{
|
||||
wcscpy(szTemp, curEntry->szClass);
|
||||
wcscat(szTemp, L"\\shell\\");
|
||||
|
@ -682,7 +682,7 @@ IDefaultContextMenuImpl::AddStaticContextMenusToMenu(
|
|||
mii.dwTypeData = curEntry->szVerb;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
mii.cch = wcslen(mii.dwTypeData);
|
||||
|
@ -691,9 +691,9 @@ IDefaultContextMenuImpl::AddStaticContextMenusToMenu(
|
|||
|
||||
mii.wID++;
|
||||
curEntry = curEntry->Next;
|
||||
}
|
||||
iIdSCMLast = mii.wID - 1;
|
||||
return indexMenu;
|
||||
}
|
||||
iIdSCMLast = mii.wID - 1;
|
||||
return indexMenu;
|
||||
}
|
||||
|
||||
void WINAPI _InsertMenuItemW (
|
||||
|
@ -719,7 +719,7 @@ void WINAPI _InsertMenuItemW (
|
|||
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
|
||||
if ((ULONG_PTR)HIWORD((ULONG_PTR)dwTypeData) == 0)
|
||||
{
|
||||
if (LoadStringW(shell32_hInstance, LOWORD((ULONG_PTR)dwTypeData), szText, sizeof(szText)/sizeof(WCHAR)))
|
||||
if (LoadStringW(shell32_hInstance, LOWORD((ULONG_PTR)dwTypeData), szText, sizeof(szText) / sizeof(WCHAR)))
|
||||
{
|
||||
szText[(sizeof(szText)/sizeof(WCHAR))-1] = 0;
|
||||
mii.dwTypeData = szText;
|
||||
|
@ -792,7 +792,7 @@ IDefaultContextMenuImpl::BuildShellItemContextMenu(
|
|||
/* load dynamic extensions from progid key */
|
||||
EnumerateDynamicContextHandlerForKey(hKey);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"*", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||||
|
@ -885,8 +885,8 @@ IDefaultContextMenuImpl::BuildShellItemContextMenu(
|
|||
|
||||
if (_ILIsDrive(dcm.apidl[0]))
|
||||
{
|
||||
/* The 'Format' option must be always available,
|
||||
* thus it is not registered as a static shell extension
|
||||
/* The 'Format' option must be always available,
|
||||
* thus it is not registered as a static shell extension
|
||||
*/
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, 0x7ABC, MFT_STRING, MAKEINTRESOURCEW(IDS_FORMATDRIVE), MFS_ENABLED);
|
||||
|
@ -896,15 +896,15 @@ IDefaultContextMenuImpl::BuildShellItemContextMenu(
|
|||
bClipboardData = (HasClipboardData() && (rfg & SFGAO_FILESYSTEM));
|
||||
if (rfg & (SFGAO_CANCOPY | SFGAO_CANMOVE) || bClipboardData)
|
||||
{
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
|
||||
if (rfg & SFGAO_CANMOVE)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CUT, MFT_STRING, MAKEINTRESOURCEW(IDS_CUT), MFS_ENABLED);
|
||||
if (rfg & SFGAO_CANCOPY)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_COPY, MFT_STRING, MAKEINTRESOURCEW(IDS_COPY), MFS_ENABLED);
|
||||
if (bClipboardData)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_INSERT, MFT_STRING, MAKEINTRESOURCEW(IDS_INSERT), MFS_ENABLED);
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
|
||||
if (rfg & SFGAO_CANMOVE)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CUT, MFT_STRING, MAKEINTRESOURCEW(IDS_CUT), MFS_ENABLED);
|
||||
if (rfg & SFGAO_CANCOPY)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_COPY, MFT_STRING, MAKEINTRESOURCEW(IDS_COPY), MFS_ENABLED);
|
||||
if (bClipboardData)
|
||||
_InsertMenuItemW(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_INSERT, MFT_STRING, MAKEINTRESOURCEW(IDS_INSERT), MFS_ENABLED);
|
||||
|
||||
bAddSep = TRUE;
|
||||
bAddSep = TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -974,7 +974,7 @@ NotifyShellViewWindow(LPCMINVOKECOMMANDINFO lpcmi, BOOL bRefresh)
|
|||
LPSHELLVIEW lpSV = NULL;
|
||||
HWND hwndSV = NULL;
|
||||
|
||||
if((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0)))
|
||||
if((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0)))
|
||||
{
|
||||
if(SUCCEEDED(lpSB->QueryActiveShellView(&lpSV)))
|
||||
{
|
||||
|
@ -1013,7 +1013,7 @@ IDefaultContextMenuImpl::DoPaste(
|
|||
return E_FAIL;
|
||||
|
||||
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
|
||||
hr = pda->GetData(&formatetc,&medium);
|
||||
hr = pda->GetData(&formatetc, &medium);
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
|
@ -1149,11 +1149,11 @@ IDefaultContextMenuImpl::DoPaste(
|
|||
psfhlpsrc->Release();
|
||||
psfFrom->Release();
|
||||
psfTarget->Release();
|
||||
SHFree(pidl);
|
||||
SHFree(pidl);
|
||||
_ILFreeaPidl(apidl, lpcida->cidl);
|
||||
ReleaseStgMedium(&medium);
|
||||
pda->Release();
|
||||
TRACE("CP result %x\n",hr);
|
||||
TRACE("CP result %x\n", hr);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -1174,7 +1174,7 @@ GetUniqueFileName(LPWSTR szBasePath, LPWSTR szExt, LPWSTR szTarget, BOOL bShortc
|
|||
|
||||
if (!bShortcut)
|
||||
{
|
||||
Length = LoadStringW(shell32_hInstance, IDS_LNK_FILE, szLnk, sizeof(szLnk)/sizeof(WCHAR));
|
||||
Length = LoadStringW(shell32_hInstance, IDS_LNK_FILE, szLnk, sizeof(szLnk) / sizeof(WCHAR));
|
||||
}
|
||||
|
||||
do
|
||||
|
@ -1201,7 +1201,7 @@ GetUniqueFileName(LPWSTR szBasePath, LPWSTR szExt, LPWSTR szTarget, BOOL bShortc
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
}while(RetryCount++ < 100);
|
||||
} while(RetryCount++ < 100);
|
||||
|
||||
return FALSE;
|
||||
|
||||
|
@ -1263,7 +1263,7 @@ IDefaultContextMenuImpl::DoCreateLink(
|
|||
if (pszFile) pszFile[0] = 0;
|
||||
|
||||
if (SUCCEEDED(nLink->SetPath(szPath)) &&
|
||||
SUCCEEDED(nLink->SetWorkingDirectory(szDirPath)))
|
||||
SUCCEEDED(nLink->SetWorkingDirectory(szDirPath)))
|
||||
{
|
||||
if (SUCCEEDED(nLink->QueryInterface(IID_IPersistFile, (LPVOID*)&ipf)))
|
||||
{
|
||||
|
@ -1294,8 +1294,8 @@ IDefaultContextMenuImpl::DoDelete(
|
|||
hr = dcm.psf->GetDisplayNameOf(dcm.apidl[0], SHGDN_FORPARSING, &strTemp);
|
||||
if(hr != S_OK)
|
||||
{
|
||||
ERR("IShellFolder_GetDisplayNameOf failed with %x\n", hr);
|
||||
return hr;
|
||||
ERR("IShellFolder_GetDisplayNameOf failed with %x\n", hr);
|
||||
return hr;
|
||||
}
|
||||
ZeroMemory(szPath, sizeof(szPath));
|
||||
hr = StrRetToBufW(&strTemp, dcm.apidl[0], szPath, MAX_PATH);
|
||||
|
@ -1328,7 +1328,7 @@ IDefaultContextMenuImpl::DoDelete(
|
|||
}
|
||||
|
||||
/* get the active IShellView */
|
||||
if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0)))
|
||||
if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0)))
|
||||
{
|
||||
/* is the treeview focused */
|
||||
if (SUCCEEDED(lpSB->GetControlWindow(FCW_TREE, &hwnd)))
|
||||
|
@ -1364,7 +1364,7 @@ IDefaultContextMenuImpl::DoCopyOrCut(
|
|||
return hr;
|
||||
}
|
||||
|
||||
lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0);
|
||||
lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0);
|
||||
if (!lpSB)
|
||||
{
|
||||
TRACE("failed to get shellbrowser\n");
|
||||
|
@ -1404,7 +1404,7 @@ IDefaultContextMenuImpl::DoRename(
|
|||
HWND hwnd;
|
||||
|
||||
/* get the active IShellView */
|
||||
if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0)))
|
||||
if ((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0)))
|
||||
{
|
||||
/* is the treeview focused */
|
||||
if (SUCCEEDED(lpSB->GetControlWindow(FCW_TREE, &hwnd)))
|
||||
|
@ -1419,7 +1419,7 @@ IDefaultContextMenuImpl::DoRename(
|
|||
if(SUCCEEDED(lpSB->QueryActiveShellView(&lpSV)))
|
||||
{
|
||||
lpSV->SelectItem(dcm.apidl[0],
|
||||
SVSI_DESELECTOTHERS|SVSI_EDIT|SVSI_ENSUREVISIBLE|SVSI_FOCUSED|SVSI_SELECT);
|
||||
SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
|
||||
lpSV->Release();
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -1434,10 +1434,10 @@ IDefaultContextMenuImpl::DoProperties(
|
|||
WCHAR szDrive[MAX_PATH];
|
||||
STRRET strFile;
|
||||
|
||||
if (dcm.cidl &&_ILIsMyComputer(dcm.apidl[0]))
|
||||
if (dcm.cidl && _ILIsMyComputer(dcm.apidl[0]))
|
||||
{
|
||||
ShellExecuteW(lpcmi->hwnd, L"open", L"rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", NULL, NULL, SW_SHOWNORMAL);
|
||||
return S_OK;
|
||||
ShellExecuteW(lpcmi->hwnd, L"open", L"rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", NULL, NULL, SW_SHOWNORMAL);
|
||||
return S_OK;
|
||||
}
|
||||
else if (dcm.cidl == 0 && dcm.pidlFolder != NULL && _ILIsDesktop(dcm.pidlFolder))
|
||||
{
|
||||
|
@ -1454,7 +1454,7 @@ IDefaultContextMenuImpl::DoProperties(
|
|||
{
|
||||
//FIXME path!
|
||||
ShellExecuteW(NULL, L"open", L"explorer.exe",
|
||||
L"::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
|
||||
L"::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
|
||||
NULL, SW_SHOWDEFAULT);
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -1464,8 +1464,8 @@ IDefaultContextMenuImpl::DoProperties(
|
|||
* detect the drive path of bitbucket if appropiate
|
||||
*/
|
||||
|
||||
SH_ShowRecycleBinProperties(L'C');
|
||||
return S_OK;
|
||||
SH_ShowRecycleBinProperties(L'C');
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (dcm.cidl > 1)
|
||||
|
@ -1536,9 +1536,9 @@ IDefaultContextMenuImpl::DoStaticShellExtensions(
|
|||
PStaticShellEntry pCurrent = shead;
|
||||
int verb = LOWORD(lpcmi->lpVerb) - iIdSCMFirst;
|
||||
|
||||
|
||||
|
||||
while(pCurrent && verb-- > 0)
|
||||
pCurrent = pCurrent->Next;
|
||||
pCurrent = pCurrent->Next;
|
||||
|
||||
if (verb > 0)
|
||||
return E_FAIL;
|
||||
|
@ -1626,7 +1626,7 @@ IDefaultContextMenuImpl::InvokeCommand(
|
|||
}
|
||||
}
|
||||
|
||||
FIXME("Unhandled Verb %xl\n",LOWORD(lpcmi->lpVerb));
|
||||
FIXME("Unhandled Verb %xl\n", LOWORD(lpcmi->lpVerb));
|
||||
return E_UNEXPECTED;
|
||||
}
|
||||
|
||||
|
@ -1654,9 +1654,9 @@ IDefaultContextMenuImpl::HandleMenuMsg(
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static
|
||||
static
|
||||
HRESULT
|
||||
IDefaultContextMenu_Constructor(
|
||||
IDefaultContextMenu_Constructor(
|
||||
const DEFCONTEXTMENU *pdcm,
|
||||
REFIID riid,
|
||||
void **ppv)
|
||||
|
@ -1697,13 +1697,13 @@ SHCreateDefaultContextMenu(
|
|||
REFIID riid,
|
||||
void **ppv)
|
||||
{
|
||||
HRESULT hr = E_FAIL;
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
*ppv = NULL;
|
||||
hr = IDefaultContextMenu_Constructor( pdcm, riid, ppv );
|
||||
if (FAILED(hr)) WARN("IDefaultContextMenu_Constructor failed: %x\n", hr);
|
||||
TRACE("pcm %p hr %x\n", pdcm, hr);
|
||||
return hr;
|
||||
*ppv = NULL;
|
||||
hr = IDefaultContextMenu_Constructor( pdcm, riid, ppv );
|
||||
if (FAILED(hr)) WARN("IDefaultContextMenu_Constructor failed: %x\n", hr);
|
||||
TRACE("pcm %p hr %x\n", pdcm, hr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -1724,20 +1724,20 @@ CDefFolderMenu_Create2(
|
|||
const HKEY *ahkeyClsKeys,
|
||||
IContextMenu **ppcm)
|
||||
{
|
||||
DEFCONTEXTMENU pdcm;
|
||||
HRESULT hr;
|
||||
DEFCONTEXTMENU pdcm;
|
||||
HRESULT hr;
|
||||
|
||||
pdcm.hwnd = hwnd;
|
||||
pdcm.pcmcb = NULL;
|
||||
pdcm.pidlFolder = pidlFolder;
|
||||
pdcm.psf = psf;
|
||||
pdcm.cidl = cidl;
|
||||
pdcm.apidl = apidl;
|
||||
pdcm.punkAssociationInfo = NULL;
|
||||
pdcm.cKeys = nKeys;
|
||||
pdcm.aKeys = ahkeyClsKeys;
|
||||
pdcm.hwnd = hwnd;
|
||||
pdcm.pcmcb = NULL;
|
||||
pdcm.pidlFolder = pidlFolder;
|
||||
pdcm.psf = psf;
|
||||
pdcm.cidl = cidl;
|
||||
pdcm.apidl = apidl;
|
||||
pdcm.punkAssociationInfo = NULL;
|
||||
pdcm.cKeys = nKeys;
|
||||
pdcm.aKeys = ahkeyClsKeys;
|
||||
|
||||
hr = SHCreateDefaultContextMenu(&pdcm, IID_IContextMenu, (void**)ppcm);
|
||||
return hr;
|
||||
hr = SHCreateDefaultContextMenu(&pdcm, IID_IContextMenu, (void**)ppcm);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue