[EXPLORER][SHELL32][SHELL32_APITEST][SDK] AppBar Part 2 (#7946)

Follow-up of #7778.
JIRA issue: CORE-7237
- Rename APPBARDATA3264 structure
  as APPBARDATAINTEROP.
- Fix structures for WoW64.
- Use trace instead of DPRINT1.
- Add CAppBarManager::
  RecomputeAllWorkareas function.
- Fix WM_DISPLAYCHANGE handling
  to re-compute the work areas.
This commit is contained in:
Katayama Hirofumi MZ 2025-05-05 12:48:02 +09:00 committed by GitHub
parent 24c2e4433b
commit 7073bdfead
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 71 additions and 30 deletions

View file

@ -1222,32 +1222,44 @@ typedef struct SFVM_CUSTOMVIEWINFO_DATA
#include <poppack.h>
#if defined(_WIN64) || defined(BUILD_WOW6432)
typedef UINT64 APPBAR_OUTPUT;
#else
typedef HANDLE APPBAR_OUTPUT;
#endif
/*
* Private structures for internal AppBar messaging.
* These structures can be sent from 32-bit shell32 to 64-bit Explorer.
* See also: https://learn.microsoft.com/en-us/windows/win32/winprog64/interprocess-communication
* > ... only the lower 32 bits are significant, so it is safe to truncate the handle
* See also: https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-duplicatehandle
* > DuplicateHandle can be used to duplicate a handle between a 32-bit process and a 64-bit process.
*/
#include <pshpack8.h>
typedef struct tagAPPBARDATA3264
typedef struct tagAPPBARDATAINTEROP
{
DWORD cbSize; /* == sizeof(APPBARDATA3264) */
DWORD cbSize; /* == sizeof(APPBARDATAINTEROP) */
UINT32 hWnd32;
UINT uCallbackMessage;
UINT uEdge;
RECT rc;
LONGLONG lParam64;
} APPBARDATA3264, *PAPPBARDATA3264;
} APPBARDATAINTEROP, *PAPPBARDATAINTEROP;
typedef struct tagAPPBAR_COMMAND
{
APPBARDATA3264 abd;
APPBARDATAINTEROP abd;
DWORD dwMessage;
UINT32 hOutput32; /* For shlwapi!SHAllocShared */
APPBAR_OUTPUT hOutput; /* For shlwapi!SHAllocShared */
DWORD dwProcessId;
} APPBAR_COMMAND, *PAPPBAR_COMMAND;
#include <poppack.h>
#if defined(_WIN64) || defined(BUILD_WOW6432)
C_ASSERT(sizeof(APPBAR_COMMAND) == 0x40);
#else
C_ASSERT(sizeof(APPBAR_COMMAND) == 0x38);
#endif
#ifdef __cplusplus
} /* extern "C" */