Browse Source

Taskbar10: Implemented option to treat pinned items as quick launch toolbar

pull/886/head
Valentin Radu 4 years ago
parent
commit
214b26ec28
  1. 132
      ExplorerPatcher/dllmain.c
  2. 4
      ExplorerPatcher/settings.reg

132
ExplorerPatcher/dllmain.c

@ -115,6 +115,8 @@ WCHAR* wszWeatherTerm = NULL;
WCHAR* wszWeatherLanguage = NULL; WCHAR* wszWeatherLanguage = NULL;
WCHAR* wszEPWeatherKillswitch = NULL; WCHAR* wszEPWeatherKillswitch = NULL;
HANDLE hEPWeatherKillswitch = NULL; HANDLE hEPWeatherKillswitch = NULL;
DWORD bWasPinnedItemsActAsQuickLaunch = FALSE;
DWORD bPinnedItemsActAsQuickLaunch = FALSE;
int Code = 0; int Code = 0;
HRESULT InjectStartFromExplorer(); HRESULT InjectStartFromExplorer();
void InvokeClockFlyout(); void InvokeClockFlyout();
@ -1350,6 +1352,106 @@ finalize:
#pragma endregion #pragma endregion
#ifdef _WIN64
#pragma region "Disable taskbar pinned items grouping"
DEFINE_GUID(IID_ITaskGroup,
0x3af85589, 0x678f, 0x4fb5, 0x89, 0x25, 0x5a, 0x13, 0x4e, 0xbf, 0x57, 0x2c);
typedef interface ITaskGroup ITaskGroup;
typedef struct ITaskGroupVtbl
{
BEGIN_INTERFACE
HRESULT(STDMETHODCALLTYPE* QueryInterface)(
ITaskGroup* This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void** ppvObject);
ULONG(STDMETHODCALLTYPE* AddRef)(
ITaskGroup* This);
ULONG(STDMETHODCALLTYPE* Release)(
ITaskGroup* This);
HRESULT(STDMETHODCALLTYPE* Initialize)(
ITaskGroup* This);
HRESULT(STDMETHODCALLTYPE* AddTaskItem)(
ITaskGroup* This);
HRESULT(STDMETHODCALLTYPE* RemoveTaskItem)(
ITaskGroup* This);
HRESULT(STDMETHODCALLTYPE* EnumTaskItems)(
ITaskGroup* This);
HRESULT(STDMETHODCALLTYPE* DoesWindowMatch)(
ITaskGroup* This,
HWND hCompareWnd,
ITEMIDLIST* pCompareItemIdList,
WCHAR* pCompareAppId,
int* pnMatch,
LONG** p_task_item);
// ...
END_INTERFACE
} ITaskGroupVtbl;
interface ITaskGroup
{
CONST_VTBL struct ITaskGroupVtbl* lpVtbl;
};
// credits: https://github.com/m417z/7-Taskbar-Tweaker
HRESULT(*CTaskGroup_DoesWindowMatchFunc)(LONG_PTR* task_group, HWND hCompareWnd, ITEMIDLIST* pCompareItemIdList,
WCHAR* pCompareAppId, int* pnMatch, LONG_PTR** p_task_item) = NULL;
HRESULT __stdcall CTaskGroup_DoesWindowMatchHook(LONG_PTR* task_group, HWND hCompareWnd, ITEMIDLIST* pCompareItemIdList,
WCHAR* pCompareAppId, int* pnMatch, LONG_PTR** p_task_item)
{
HRESULT hr = CTaskGroup_DoesWindowMatchFunc(task_group, hCompareWnd, pCompareItemIdList, pCompareAppId, pnMatch, p_task_item);
BOOL bDontGroup = FALSE;
BOOL bPinned = FALSE;
if (bPinnedItemsActAsQuickLaunch && SUCCEEDED(hr) && *pnMatch >= 1 && *pnMatch <= 3) // itemlist or appid match
{
bDontGroup = FALSE;
bPinned = (!task_group[4] || (int)((LONG_PTR*)task_group[4])[0] == 0);
if (bPinned)
{
bDontGroup = TRUE;
}
if (bDontGroup)
{
hr = E_FAIL;
}
}
return hr;
}
void explorer_QISearch(void* that, LPCQITAB pqit, REFIID riid, void** ppv)
{
HRESULT hr = QISearch(that, pqit, riid, ppv);
if (SUCCEEDED(hr) && IsEqualGUID(pqit[0].piid, &IID_ITaskGroup))
{
ITaskGroup* pTaskGroup = *ppv;
DWORD flOldProtect = 0;
if (VirtualProtect(pTaskGroup->lpVtbl, sizeof(ITaskGroupVtbl), PAGE_EXECUTE_READWRITE, &flOldProtect))
{
if (!CTaskGroup_DoesWindowMatchFunc)
{
CTaskGroup_DoesWindowMatchFunc = pTaskGroup->lpVtbl->DoesWindowMatch;
}
pTaskGroup->lpVtbl->DoesWindowMatch = CTaskGroup_DoesWindowMatchHook;
VirtualProtect(pTaskGroup->lpVtbl, sizeof(ITaskGroupVtbl), flOldProtect, &flOldProtect);
}
}
return hr;
}
#pragma endregion
#endif
#pragma region "Show Start in correct location according to TaskbarAl" #pragma region "Show Start in correct location according to TaskbarAl"
#ifdef _WIN64 #ifdef _WIN64
void UpdateStartMenuPositioning(LPARAM loIsShouldInitializeArray_hiIsShouldRoInitialize) void UpdateStartMenuPositioning(LPARAM loIsShouldInitializeArray_hiIsShouldRoInitialize)
@ -4889,10 +4991,11 @@ DWORD WindowSwitcher(DWORD unused)
#pragma region "Load Settings from registry" #pragma region "Load Settings from registry"
#define REFRESHUI_NONE 0b000 #define REFRESHUI_NONE 0b0000
#define REFRESHUI_GLOM 0b001 #define REFRESHUI_GLOM 0b0001
#define REFRESHUI_ORB 0b010 #define REFRESHUI_ORB 0b0010
#define REFRESHUI_PEOPLE 0b100 #define REFRESHUI_PEOPLE 0b0100
#define REFRESHUI_TASKBAR 0b1000
void WINAPI LoadSettings(LPARAM lParam) void WINAPI LoadSettings(LPARAM lParam)
{ {
BOOL bIsExplorer = LOWORD(lParam); BOOL bIsExplorer = LOWORD(lParam);
@ -5429,6 +5532,22 @@ void WINAPI LoadSettings(LPARAM lParam)
&bDisableOfficeHotkeys, &bDisableOfficeHotkeys,
&dwSize &dwSize
); );
dwTemp = FALSE;
dwSize = sizeof(DWORD);
RegQueryValueExW(
hKey,
TEXT("PinnedItemsActAsQuickLaunch"),
0,
NULL,
&dwTemp,
&dwSize
);
if (!bWasPinnedItemsActAsQuickLaunch)
{
bPinnedItemsActAsQuickLaunch = dwTemp;
bWasPinnedItemsActAsQuickLaunch = TRUE;
dwRefreshUIMask |= REFRESHUI_TASKBAR;
}
#ifdef _WIN64 #ifdef _WIN64
AcquireSRWLockShared(&lock_epw); AcquireSRWLockShared(&lock_epw);
@ -5864,6 +5983,10 @@ void WINAPI LoadSettings(LPARAM lParam)
#endif #endif
} }
} }
if (dwRefreshUIMask & REFRESHUI_TASKBAR)
{
// not implemented
}
} }
} }
@ -7872,6 +7995,7 @@ DWORD Inject(BOOL bIsExplorer)
VnPatchIAT(hExplorer, "uxtheme.dll", "OpenThemeDataForDpi", explorer_OpenThemeDataForDpi); VnPatchIAT(hExplorer, "uxtheme.dll", "OpenThemeDataForDpi", explorer_OpenThemeDataForDpi);
VnPatchIAT(hExplorer, "uxtheme.dll", "DrawThemeBackground", explorer_DrawThemeBackground); VnPatchIAT(hExplorer, "uxtheme.dll", "DrawThemeBackground", explorer_DrawThemeBackground);
VnPatchIAT(hExplorer, "uxtheme.dll", "CloseThemeData", explorer_CloseThemeData); VnPatchIAT(hExplorer, "uxtheme.dll", "CloseThemeData", explorer_CloseThemeData);
VnPatchIAT(hExplorer, "api-ms-win-core-shlwapi-obsolete-l1-1-0.dll", "QISearch", explorer_QISearch);
//VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "LoadStringW", explorer_LoadStringWHook); //VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "LoadStringW", explorer_LoadStringWHook);
if (bClassicThemeMitigations) if (bClassicThemeMitigations)
{ {

4
ExplorerPatcher/settings.reg

@ -68,7 +68,9 @@
;x 1 Small ;x 1 Small
;x 0 Large (default) ;x 0 Large (default)
"TaskbarSmallIcons"=dword:00000000 "TaskbarSmallIcons"=dword:00000000
;e [HKEY_CURRENT_USER\Software\ExplorerPatcher]
;b Pinned items act as quick launch (don't group pinned items with active apps) *
"PinnedItemsActAsQuickLaunch"=dword:00000000
;T System tray ;T System tray

Loading…
Cancel
Save