Commit 40cb9826 authored by Ge van Geldorp's avatar Ge van Geldorp Committed by Alexandre Julliard

Overlay icons for .lnk files with a small arrow in the lower left

corner.
parent aeea9833
......@@ -15,5 +15,6 @@ printer.ico
ramdisk.ico
shell.spec.c
shell32.dll.dbg.c
shortcut.ico
shres.res
version16.res
......@@ -64,7 +64,8 @@ RC_BINARIES = \
netdrive.ico \
netdrive2.ico \
printer.ico \
ramdisk.ico
ramdisk.ico \
shortcut.ico
C_SRCS16 = shell.c
RC_SRCS16 = version16.rc
......
......@@ -385,7 +385,7 @@ static HRESULT WINAPI IExtractIconW_fnExtract(IExtractIconW * iface, LPCWSTR psz
FIXME("(%p) (file=%p index=%d %p %p size=%08x) semi-stub\n", This, debugstr_w(pszFile), (signed)nIconIndex,
phiconLarge, phiconSmall, nIconSize);
index = SIC_GetIconIndex(pszFile, nIconIndex);
index = SIC_GetIconIndex(pszFile, nIconIndex, 0);
if (phiconLarge)
*phiconLarge = ImageList_GetIcon(ShellBigIconList, index, ILD_TRANSPARENT);
......
......@@ -43,6 +43,7 @@
#include "pidl.h"
#include "shell32_main.h"
#include "undocshell.h"
#include "shresdef.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
......@@ -79,7 +80,8 @@ static CRITICAL_SECTION SHELL32_SicCS = { &critsect_debug, -1, 0, 0, 0, 0 };
static INT CALLBACK SIC_CompareEntries( LPVOID p1, LPVOID p2, LPARAM lparam)
{ TRACE("%p %p %8lx\n", p1, p2, lparam);
if (((LPSIC_ENTRY)p1)->dwSourceIndex != ((LPSIC_ENTRY)p2)->dwSourceIndex) /* first the faster one*/
if (((LPSIC_ENTRY)p1)->dwSourceIndex != ((LPSIC_ENTRY)p2)->dwSourceIndex ||
((LPSIC_ENTRY)p1)->dwFlags != ((LPSIC_ENTRY)p2)->dwFlags) /* first the faster one*/
return 1;
if (strcmpiW(((LPSIC_ENTRY)p1)->sSourceFile,((LPSIC_ENTRY)p2)->sSourceFile))
......@@ -87,13 +89,148 @@ static INT CALLBACK SIC_CompareEntries( LPVOID p1, LPVOID p2, LPARAM lparam)
return 0;
}
/*****************************************************************************
* SIC_OverlayShortcutImage [internal]
*
* NOTES
* Creates a new icon as a copy of the passed-in icon, overlayed with a
* shortcut image.
*/
static HICON SIC_OverlayShortcutImage(HICON SourceIcon)
{ ICONINFO SourceIconInfo, ShortcutIconInfo, TargetIconInfo;
HICON ShortcutIcon, TargetIcon;
BITMAP SourceBitmapInfo, ShortcutBitmapInfo;
HDC SourceDC = NULL,
ShortcutDC = NULL,
TargetDC = NULL,
ScreenDC = NULL;
HBITMAP OldSourceBitmap = NULL,
OldShortcutBitmap = NULL,
OldTargetBitmap = NULL;
/* Get information about the source icon and shortcut overlay */
if (! GetIconInfo(SourceIcon, &SourceIconInfo)
|| 0 == GetObjectW(SourceIconInfo.hbmColor, sizeof(BITMAP), &SourceBitmapInfo))
{
return NULL;
}
ShortcutIcon = LoadImageW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_SHORTCUT),
IMAGE_ICON, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmWidth,
LR_SHARED);
if (NULL == ShortcutIcon
|| ! GetIconInfo(ShortcutIcon, &ShortcutIconInfo)
|| 0 == GetObjectW(ShortcutIconInfo.hbmColor, sizeof(BITMAP), &ShortcutBitmapInfo))
{
return NULL;
}
TargetIconInfo = SourceIconInfo;
TargetIconInfo.hbmMask = NULL;
TargetIconInfo.hbmColor = NULL;
/* Setup the source, shortcut and target masks */
SourceDC = CreateCompatibleDC(NULL);
if (NULL == SourceDC) goto fail;
OldSourceBitmap = SelectObject(SourceDC, SourceIconInfo.hbmMask);
if (NULL == OldSourceBitmap) goto fail;
ShortcutDC = CreateCompatibleDC(NULL);
if (NULL == ShortcutDC) goto fail;
OldShortcutBitmap = SelectObject(ShortcutDC, ShortcutIconInfo.hbmMask);
if (NULL == OldShortcutBitmap) goto fail;
TargetDC = CreateCompatibleDC(NULL);
if (NULL == TargetDC) goto fail;
TargetIconInfo.hbmMask = CreateCompatibleBitmap(TargetDC, SourceBitmapInfo.bmWidth,
SourceBitmapInfo.bmHeight);
if (NULL == TargetIconInfo.hbmMask) goto fail;
ScreenDC = GetDC(NULL);
if (NULL == ScreenDC) goto fail;
TargetIconInfo.hbmColor = CreateCompatibleBitmap(ScreenDC, SourceBitmapInfo.bmWidth,
SourceBitmapInfo.bmHeight);
ReleaseDC(NULL, ScreenDC);
if (NULL == TargetIconInfo.hbmColor) goto fail;
OldTargetBitmap = SelectObject(TargetDC, TargetIconInfo.hbmMask);
if (NULL == OldTargetBitmap) goto fail;
/* Create the target mask by ANDing the source and shortcut masks */
if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight,
SourceDC, 0, 0, SRCCOPY) ||
! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCAND))
{
goto fail;
}
/* Setup the source and target xor bitmap */
if (NULL == SelectObject(SourceDC, SourceIconInfo.hbmColor) ||
NULL == SelectObject(TargetDC, TargetIconInfo.hbmColor))
{
goto fail;
}
/* Copy the source xor bitmap to the target and clear out part of it by using
the shortcut mask */
if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight,
SourceDC, 0, 0, SRCCOPY) ||
! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCAND))
{
goto fail;
}
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
/* Now put in the shortcut xor mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCINVERT))
{
goto fail;
}
/* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set
handles to NULL */
SelectObject(TargetDC, OldTargetBitmap);
DeleteObject(TargetDC);
SelectObject(ShortcutDC, OldShortcutBitmap);
DeleteObject(ShortcutDC);
SelectObject(SourceDC, OldSourceBitmap);
DeleteObject(SourceDC);
/* Create the icon using the bitmaps prepared earlier */
TargetIcon = CreateIconIndirect(&TargetIconInfo);
/* CreateIconIndirect copies the bitmaps, so we can release our bitmaps now */
DeleteObject(TargetIconInfo.hbmColor);
DeleteObject(TargetIconInfo.hbmMask);
return TargetIcon;
fail:
/* Clean up scratch resources we created */
if (NULL != OldTargetBitmap) SelectObject(TargetDC, OldTargetBitmap);
if (NULL != TargetIconInfo.hbmColor) DeleteObject(TargetIconInfo.hbmColor);
if (NULL != TargetIconInfo.hbmMask) DeleteObject(TargetIconInfo.hbmMask);
if (NULL != TargetDC) DeleteObject(TargetDC);
if (NULL != OldShortcutBitmap) SelectObject(ShortcutDC, OldShortcutBitmap);
if (NULL != ShortcutDC) DeleteObject(ShortcutDC);
if (NULL != OldSourceBitmap) SelectObject(SourceDC, OldSourceBitmap);
if (NULL != SourceDC) DeleteObject(SourceDC);
return NULL;
}
/*****************************************************************************
* SIC_IconAppend [internal]
*
* NOTES
* appends an icon pair to the end of the cache
*/
static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon)
static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon, DWORD dwFlags)
{ LPSIC_ENTRY lpsice;
INT ret, index, index1;
WCHAR path[MAX_PATH];
......@@ -106,6 +243,7 @@ static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallI
strcpyW( lpsice->sSourceFile, path );
lpsice->dwSourceIndex = dwSourceIndex;
lpsice->dwFlags = dwFlags;
EnterCriticalSection(&SHELL32_SicCS);
......@@ -138,9 +276,11 @@ static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallI
* NOTES
* gets small/big icon by number from a file
*/
static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex)
static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags)
{ HICON hiconLarge=0;
HICON hiconSmall=0;
HICON hiconLargeShortcut;
HICON hiconSmallShortcut;
PrivateExtractIconsW( sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, 0, 1, 0 );
PrivateExtractIconsW( sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, 0, 1, 0 );
......@@ -150,7 +290,26 @@ static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex)
WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall);
return -1;
}
return SIC_IconAppend (sSourceFile, dwSourceIndex, hiconSmall, hiconLarge);
if (0 != (dwFlags & GIL_FORSHORTCUT))
{
hiconLargeShortcut = SIC_OverlayShortcutImage(hiconLarge);
hiconSmallShortcut = SIC_OverlayShortcutImage(hiconSmall);
if (NULL != hiconLargeShortcut && NULL != hiconSmallShortcut)
{
hiconLarge = hiconLargeShortcut;
hiconSmall = hiconSmallShortcut;
}
else
{
WARN("Failed to create shortcut overlayed icons\n");
if (NULL != hiconLargeShortcut) DestroyIcon(hiconLargeShortcut);
if (NULL != hiconSmallShortcut) DestroyIcon(hiconSmallShortcut);
dwFlags &= ~ GIL_FORSHORTCUT;
}
}
return SIC_IconAppend (sSourceFile, dwSourceIndex, hiconSmall, hiconLarge, dwFlags);
}
/*****************************************************************************
* SIC_GetIconIndex [internal]
......@@ -163,7 +322,7 @@ static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex)
* look in the cache for a proper icon. if not available the icon is taken
* from the file and cached
*/
INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex )
INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags )
{
SIC_ENTRY sice;
INT ret, index = INVALID_INDEX;
......@@ -174,6 +333,7 @@ INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex )
GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL);
sice.sSourceFile = path;
sice.dwSourceIndex = dwSourceIndex;
sice.dwFlags = dwFlags;
EnterCriticalSection(&SHELL32_SicCS);
......@@ -185,7 +345,7 @@ INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex )
if ( INVALID_INDEX == index )
{
ret = SIC_LoadIcon (sSourceFile, dwSourceIndex);
ret = SIC_LoadIcon (sSourceFile, dwSourceIndex, dwFlags);
}
else
{
......@@ -243,8 +403,8 @@ BOOL SIC_Initialize(void)
hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_small, cy_small, LR_SHARED);
hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_large, cy_large, LR_SHARED);
}
SIC_IconAppend (swShell32Name, index - 1, hSm, hLg);
SIC_IconAppend (swShell32Name, -index, hSm, hLg);
SIC_IconAppend (swShell32Name, index - 1, hSm, hLg, 0);
SIC_IconAppend (swShell32Name, -index, hSm, hLg, 0);
}
TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
......@@ -319,24 +479,52 @@ BOOL PidlToSicIndex (
{
IExtractIconW *ei;
WCHAR szIconFile[MAX_PATH]; /* file containing the icon */
char szTemp[MAX_PATH];
INT iSourceIndex; /* index or resID(negated) in this file */
BOOL ret = FALSE;
UINT dwFlags = 0;
HKEY keyCls;
int iShortcutDefaultIndex = INVALID_INDEX;
TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small");
if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconW, 0, (void **)&ei)))
{
if (_ILGetExtension(pidl, szTemp, MAX_PATH) &&
HCR_MapTypeToValueA(szTemp, szTemp, MAX_PATH, TRUE))
{
if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls))
{
if (ERROR_SUCCESS == RegQueryValueExA(keyCls, "IsShortcut", NULL, NULL, NULL, NULL))
{
uFlags |= GIL_FORSHORTCUT;
}
RegCloseKey(keyCls);
}
}
if (SUCCEEDED(IExtractIconW_GetIconLocation(ei, uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
{
*pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex);
*pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex, uFlags);
ret = TRUE;
}
IExtractIconW_Release(ei);
}
if (INVALID_INDEX == *pIndex) /* default icon when failed */
{
if (0 == (uFlags & GIL_FORSHORTCUT))
{
*pIndex = 0;
}
else
{
if (INVALID_INDEX == iShortcutDefaultIndex)
{
iShortcutDefaultIndex = SIC_LoadIcon(swShell32Name, 0, GIL_FORSHORTCUT);
}
*pIndex = (INVALID_INDEX != iShortcutDefaultIndex ? iShortcutDefaultIndex : 0);
}
}
return ret;
......@@ -382,7 +570,7 @@ INT WINAPI Shell_GetCachedImageIndexA(LPCSTR szPath, INT nIndex, BOOL bSimulateD
szTemp = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
MultiByteToWideChar( CP_ACP, 0, szPath, -1, szTemp, len );
ret = SIC_GetIconIndex( szTemp, nIndex );
ret = SIC_GetIconIndex( szTemp, nIndex, 0 );
HeapFree( GetProcessHeap(), 0, szTemp );
......@@ -393,7 +581,7 @@ INT WINAPI Shell_GetCachedImageIndexW(LPCWSTR szPath, INT nIndex, BOOL bSimulate
{
WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_w(szPath), nIndex, bSimulateDoc);
return SIC_GetIconIndex(szPath, nIndex);
return SIC_GetIconIndex(szPath, nIndex, 0);
}
INT WINAPI Shell_GetCachedImageIndexAW(LPCVOID szPath, INT nIndex, BOOL bSimulateDoc)
......
......@@ -506,7 +506,7 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
lstrcpynW(sTemp, szFullPath, MAX_PATH);
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER);
psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER, 0);
else
{
static const WCHAR p1W[] = {'%','1',0};
......@@ -522,7 +522,7 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
if (flags & SHGFI_SYSICONINDEX)
{
psfi->iIcon = SIC_GetIconIndex(sTemp,dwNr);
psfi->iIcon = SIC_GetIconIndex(sTemp,dwNr,0);
if (psfi->iIcon == -1)
psfi->iIcon = 0;
}
......
......@@ -53,7 +53,7 @@ BOOL WINAPI Shell_GetImageList(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList)
BOOL SIC_Initialize(void);
void SIC_Destroy(void);
BOOL PidlToSicIndex (IShellFolder * sh, LPCITEMIDLIST pidl, BOOL bBigIcon, UINT uFlags, int * pIndex);
INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex );
INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags );
/* Classes Root */
BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, DWORD len, BOOL bPrependDot);
......
......@@ -10053,6 +10053,171 @@ IDI_SHELL_PRINTER ICON printer.ico
'00 00 FF FF 00 00'
} */
/* BINRES shortcut.ico */
IDI_SHELL_SHORTCUT ICON shortcut.ico
/* {
'00 00 01 00 02 00 20 20 00 00 00 00 00 00 A8 08'
'00 00 26 00 00 00 10 10 10 00 00 00 00 00 28 01'
'00 00 CE 08 00 00 28 00 00 00 20 00 00 00 40 00'
'00 00 01 00 08 00 00 00 00 00 00 04 00 00 00 00'
'00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 C0 DC'
'C0 00 F0 CA A6 00 04 04 04 00 08 08 08 00 0C 0C'
'0C 00 11 11 11 00 16 16 16 00 1C 1C 1C 00 22 22'
'22 00 29 29 29 00 55 55 55 00 4D 4D 4D 00 42 42'
'42 00 39 39 39 00 80 7C FF 00 50 50 FF 00 93 00'
'D6 00 FF EC CC 00 C6 D6 EF 00 D6 E7 E7 00 90 A9'
'AD 00 00 00 33 00 00 00 66 00 00 00 99 00 00 00'
'CC 00 00 33 00 00 00 33 33 00 00 33 66 00 00 33'
'99 00 00 33 CC 00 00 33 FF 00 00 66 00 00 00 66'
'33 00 00 66 66 00 00 66 99 00 00 66 CC 00 00 66'
'FF 00 00 99 00 00 00 99 33 00 00 99 66 00 00 99'
'99 00 00 99 CC 00 00 99 FF 00 00 CC 00 00 00 CC'
'33 00 00 CC 66 00 00 CC 99 00 00 CC CC 00 00 CC'
'FF 00 00 FF 66 00 00 FF 99 00 00 FF CC 00 33 00'
'00 00 33 00 33 00 33 00 66 00 33 00 99 00 33 00'
'CC 00 33 00 FF 00 33 33 00 00 33 33 33 00 33 33'
'66 00 33 33 99 00 33 33 CC 00 33 33 FF 00 33 66'
'00 00 33 66 33 00 33 66 66 00 33 66 99 00 33 66'
'CC 00 33 66 FF 00 33 99 00 00 33 99 33 00 33 99'
'66 00 33 99 99 00 33 99 CC 00 33 99 FF 00 33 CC'
'00 00 33 CC 33 00 33 CC 66 00 33 CC 99 00 33 CC'
'CC 00 33 CC FF 00 33 FF 33 00 33 FF 66 00 33 FF'
'99 00 33 FF CC 00 33 FF FF 00 66 00 00 00 66 00'
'33 00 66 00 66 00 66 00 99 00 66 00 CC 00 66 00'
'FF 00 66 33 00 00 66 33 33 00 66 33 66 00 66 33'
'99 00 66 33 CC 00 66 33 FF 00 66 66 00 00 66 66'
'33 00 66 66 66 00 66 66 99 00 66 66 CC 00 66 99'
'00 00 66 99 33 00 66 99 66 00 66 99 99 00 66 99'
'CC 00 66 99 FF 00 66 CC 00 00 66 CC 33 00 66 CC'
'99 00 66 CC CC 00 66 CC FF 00 66 FF 00 00 66 FF'
'33 00 66 FF 99 00 66 FF CC 00 CC 00 FF 00 FF 00'
'CC 00 99 99 00 00 99 33 99 00 99 00 99 00 99 00'
'CC 00 99 00 00 00 99 33 33 00 99 00 66 00 99 33'
'CC 00 99 00 FF 00 99 66 00 00 99 66 33 00 99 33'
'66 00 99 66 99 00 99 66 CC 00 99 33 FF 00 99 99'
'33 00 99 99 66 00 99 99 99 00 99 99 CC 00 99 99'
'FF 00 99 CC 00 00 99 CC 33 00 66 CC 66 00 99 CC'
'99 00 99 CC CC 00 99 CC FF 00 99 FF 00 00 99 FF'
'33 00 99 CC 66 00 99 FF 99 00 99 FF CC 00 99 FF'
'FF 00 CC 00 00 00 99 00 33 00 CC 00 66 00 CC 00'
'99 00 CC 00 CC 00 99 33 00 00 CC 33 33 00 CC 33'
'66 00 CC 33 99 00 CC 33 CC 00 CC 33 FF 00 CC 66'
'00 00 CC 66 33 00 99 66 66 00 CC 66 99 00 CC 66'
'CC 00 99 66 FF 00 CC 99 00 00 CC 99 33 00 CC 99'
'66 00 CC 99 99 00 CC 99 CC 00 CC 99 FF 00 CC CC'
'00 00 CC CC 33 00 CC CC 66 00 CC CC 99 00 CC CC'
'CC 00 CC CC FF 00 CC FF 00 00 CC FF 33 00 99 FF'
'66 00 CC FF 99 00 CC FF CC 00 CC FF FF 00 CC 00'
'33 00 FF 00 66 00 FF 00 99 00 CC 33 00 00 FF 33'
'33 00 FF 33 66 00 FF 33 99 00 FF 33 CC 00 FF 33'
'FF 00 FF 66 00 00 FF 66 33 00 CC 66 66 00 FF 66'
'99 00 FF 66 CC 00 CC 66 FF 00 FF 99 00 00 FF 99'
'33 00 FF 99 66 00 FF 99 99 00 FF 99 CC 00 FF 99'
'FF 00 FF CC 00 00 FF CC 33 00 FF CC 66 00 FF CC'
'99 00 FF CC CC 00 FF CC FF 00 FF FF 33 00 CC FF'
'66 00 FF FF 99 00 FF FF CC 00 66 66 FF 00 66 FF'
'66 00 66 FF FF 00 FF 66 66 00 FF 66 FF 00 FF FF'
'66 00 21 00 A5 00 5F 5F 5F 00 77 77 77 00 86 86'
'86 00 96 96 96 00 CB CB CB 00 B2 B2 B2 00 D7 D7'
'D7 00 DD DD DD 00 E3 E3 E3 00 EA EA EA 00 F1 F1'
'F1 00 F8 F8 F8 00 F0 FB FF 00 A4 A0 A0 00 80 80'
'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF FF FF FF FF FF FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'0A FF FF FF FF FF FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'0A 0A FF FF FF FF FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF 0A 0A FF FF FF FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF 0A 0A 0A FF 0A FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF FF 0A 0A 0A 0A FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF FF FF 0A 0A 0A FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF FF 0A 0A 0A 0A FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 FF'
'FF FF FF FF FF FF FF FF 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 07 07'
'07 07 07 07 07 07 07 07 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A'
'0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 00 1F'
'FF FF 00 1F FF FF 00 1F FF FF 00 1F FF FF 00 1F'
'FF FF 00 1F FF FF 00 1F FF FF 00 1F FF FF 00 1F'
'FF FF 00 1F FF FF 00 1F FF FF FF FF FF FF FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF'
'FF FF FF FF FF FF FF FF FF FF FF FF FF FF 28 00'
'00 00 10 00 00 00 20 00 00 00 01 00 04 00 00 00'
'00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 7F FF'
'FF 00 00 00 00 00 70 FF FF 00 00 00 00 00 7F 00'
'FF 00 00 00 00 00 7F 00 FF 00 00 00 00 00 7F FF'
'FF 00 00 00 00 00 77 77 77 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 01 FF 00 00 01 FF 00 00 01 FF'
'00 00 01 FF 00 00 01 FF 00 00 01 FF 00 00 01 FF'
'00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF'
'00 00 FF FF 00 00 FF FF 00 00 FF FF 00 00 FF FF'
'00 00 FF FF 00 00'
} */
/* BINRES desktop.ico */
IDI_SHELL_DESKTOP ICON desktop.ico
/* {
......@@ -10127,8 +10292,6 @@ IDI_SHELL_DESKTOP ICON desktop.ico
} */
/*--------------------- END FIXME ------------------------*/
/*
......
......@@ -110,6 +110,7 @@
#define IDI_SHELL_COMPUTERS_NEAR_ME 19
#define IDI_SHELL_SEARCH 23
#define IDI_SHELL_HELP 24
#define IDI_SHELL_SHORTCUT 30
#define IDI_SHELL_EMPTY_RECYCLE_BIN 32
#define IDI_SHELL_FULL_RECYCLE_BIN 33
#define IDI_SHELL_DESKTOP 35
......
......@@ -69,6 +69,7 @@ HKCR,.jfif,"Content Type",,"image/jpeg"
HKCR,.jpe,"Content Type",,"image/jpeg"
HKCR,.jpeg,"Content Type",,"image/jpeg"
HKCR,.jpg,"Content Type",,"image/jpeg"
HKCR,.lnk,,,"lnkfile"
HKCR,.msi,,,"Msi.Package"
HKCR,.png,"Content Type",,"image/png"
HKCR,.tif,"Content Type",,"image/tiff"
......@@ -84,6 +85,10 @@ HKCR,folder\shell\open\ddeexec,,,"[ViewFolder("%l", %I, %S)]"
HKCR,folder\shell\open\ddeexec,"NoActivateHandler",,""
HKCR,folder\shell\open\ddeexec\application,,,"Folders"
HKCR,htmlfile\shell\open\command,,,"winebrowser %1"
HKCR,lnkfile,"NeverShowExt",,""
HKCR,lnkfile,"IsShortcut",,"yes"
HKCR,lnkfile\CLSID,,,"{00021401-0000-0000-C000-000000000046}"
HKCR,lnkfile\shellex\IconHandler,,,"{00021401-0000-0000-C000-000000000046}"
HKCR,Msi.Package\DefaultIcon,,,"msiexec.exe"
HKCR,Msi.Package\shell\Open\command,,,"msiexec /i %1"
HKCR,Msi.Package\shell\Repair\command,,,"msiexec /f %1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment