mirror of
https://github.com/reactos/reactos.git
synced 2024-09-29 22:16:01 +00:00
[SHLWAPI] Implement SHAreIconsEqual
CORE-14425
This commit is contained in:
parent
754a2fa872
commit
173b79095c
|
@ -37,3 +37,60 @@ HRESULT WINAPI SHForwardContextMenuMsg(IUnknown* pUnk, UINT uMsg, WPARAM wParam,
|
|||
IContextMenu2_Release(pcmenu2);
|
||||
return hr;
|
||||
}
|
||||
|
||||
/* http://undoc.airesoft.co.uk/shlwapi.dll/SHAreIconsEqual.php */
|
||||
|
||||
BOOL WINAPI SHAreIconsEqual(HICON hIcon1, HICON hIcon2)
|
||||
{
|
||||
ICONINFO iconInfo1, iconInfo2;
|
||||
BITMAP bm1, bm2;
|
||||
BOOL bSame = FALSE;
|
||||
|
||||
if (!hIcon1 || !hIcon2)
|
||||
return FALSE;
|
||||
|
||||
if (!GetIconInfo(hIcon1, &iconInfo1))
|
||||
return FALSE;
|
||||
|
||||
if (!GetIconInfo(hIcon2, &iconInfo2))
|
||||
{
|
||||
DeleteObject(iconInfo1.hbmColor);
|
||||
DeleteObject(iconInfo1.hbmMask);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GetObjectW(iconInfo1.hbmColor, sizeof(bm1), &bm1);
|
||||
GetObjectW(iconInfo2.hbmColor, sizeof(bm2), &bm2);
|
||||
|
||||
if (bm1.bmWidth == bm2.bmWidth && bm1.bmHeight == bm2.bmHeight)
|
||||
{
|
||||
BITMAPINFO bmi = { { sizeof(bmi), bm1.bmWidth, bm1.bmHeight, 1, 32 } };
|
||||
HDC hdc = GetDC(0);
|
||||
SIZE_T size = bm1.bmWidth * bm1.bmHeight * 4;
|
||||
BYTE *data1, *data2;
|
||||
|
||||
data1 = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
data2 = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
|
||||
if (data1 && data2)
|
||||
{
|
||||
if (GetDIBits(hdc, iconInfo1.hbmColor, 0, bm1.bmHeight, data1, &bmi, DIB_RGB_COLORS) &&
|
||||
GetDIBits(hdc, iconInfo2.hbmColor, 0, bm2.bmHeight, data2, &bmi, DIB_RGB_COLORS))
|
||||
{
|
||||
bSame = memcmp(data1, data2, size) == 0;
|
||||
}
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, data1);
|
||||
HeapFree(GetProcessHeap(), 0, data2);
|
||||
|
||||
ReleaseDC(NULL, hdc);
|
||||
}
|
||||
|
||||
DeleteObject(iconInfo1.hbmColor);
|
||||
DeleteObject(iconInfo1.hbmMask);
|
||||
|
||||
DeleteObject(iconInfo2.hbmColor);
|
||||
DeleteObject(iconInfo2.hbmMask);
|
||||
|
||||
return bSame;
|
||||
}
|
||||
|
|
|
@ -545,7 +545,7 @@
|
|||
545 stdcall -noname SHForwardContextMenuMsg(ptr long long long ptr long)
|
||||
546 stub -noname IUnknown_DoContextMenuPopup
|
||||
547 stdcall DelayLoadFailureHook(str str) kernel32.DelayLoadFailureHook
|
||||
548 stub -noname SHAreIconsEqual
|
||||
548 stdcall -noname SHAreIconsEqual(ptr ptr)
|
||||
549 stdcall -noname SHCoCreateInstanceAC(ptr ptr long ptr ptr)
|
||||
550 stub -noname GetTemplateInfoFromHandle
|
||||
551 stub -noname IShellFolder_CompareIDs
|
||||
|
|
Loading…
Reference in a new issue