Browse Source

Added experimental option for custom primary taskbar placement

pull/277/head
Valentin Radu 4 years ago
parent
commit
f115b4b9f5
  1. 50
      ExplorerPatcher/dllmain.c

50
ExplorerPatcher/dllmain.c

@ -63,6 +63,7 @@ DWORD bDisableImmersiveContextMenu = FALSE;
DWORD bClassicThemeMitigations = FALSE; DWORD bClassicThemeMitigations = FALSE;
DWORD bHookStartMenu = TRUE; DWORD bHookStartMenu = TRUE;
DWORD bNoMenuAccelerator = FALSE; DWORD bNoMenuAccelerator = FALSE;
DWORD bTaskbarMonitorOverride = 0;
HMODULE hModule = NULL; HMODULE hModule = NULL;
HANDLE hSettingsMonitorThread = NULL; HANDLE hSettingsMonitorThread = NULL;
HANDLE hDelayedInjectionThread = NULL; HANDLE hDelayedInjectionThread = NULL;
@ -2723,28 +2724,28 @@ void WINAPI LoadSettings(BOOL bIsExplorer)
dwSize = sizeof(DWORD); dwSize = sizeof(DWORD);
RegQueryValueExW( RegQueryValueExW(
hKey, hKey,
TEXT("ClassicThemeMitigations"), TEXT("HookStartMenu"),
0, 0,
NULL, NULL,
&bClassicThemeMitigations, &bHookStartMenu,
&dwSize &dwSize
); );
dwSize = sizeof(DWORD); dwSize = sizeof(DWORD);
RegQueryValueExW( RegQueryValueExW(
hKey, hKey,
TEXT("HookStartMenu"), TEXT("NoMenuAccelerator"),
0, 0,
NULL, NULL,
&bHookStartMenu, &bNoMenuAccelerator,
&dwSize &dwSize
); );
dwSize = sizeof(DWORD); dwSize = sizeof(DWORD);
RegQueryValueExW( RegQueryValueExW(
hKey, hKey,
TEXT("NoMenuAccelerator"), TEXT("TaskbarMonitorOverride"),
0, 0,
NULL, NULL,
&bNoMenuAccelerator, &bTaskbarMonitorOverride,
&dwSize &dwSize
); );
RegCloseKey(hKey); RegCloseKey(hKey);
@ -3549,6 +3550,42 @@ LSTATUS explorer_RegGetValueW(
return lRes; return lRes;
} }
BOOL CALLBACK GetMonitorByIndex(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, RECT* rc)
{
//printf(">> %d %d %d %d\n", lprcMonitor->left, lprcMonitor->top, lprcMonitor->right, lprcMonitor->bottom);
if (--rc->left < 0)
{
*rc = *lprcMonitor;
return FALSE;
}
return TRUE;
}
HMONITOR explorer_MonitorFromRect(LPCRECT lprc, DWORD dwFlags)
{
/*printf("%d %d %d %d\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
return MonitorFromRect(lprc, dwFlags);
//}*/
if (bTaskbarMonitorOverride)
{
RECT rc;
ZeroMemory(&rc, sizeof(RECT));
rc.left = bTaskbarMonitorOverride - 1;
EnumDisplayMonitors(
NULL,
NULL,
GetMonitorByIndex,
&rc
);
if (rc.top != rc.bottom)
{
return MonitorFromRect(&rc, dwFlags);
}
}
return MonitorFromRect(lprc, dwFlags);
}
HRESULT (*explorer_SHCreateStreamOnModuleResourceWFunc)( HRESULT (*explorer_SHCreateStreamOnModuleResourceWFunc)(
HMODULE hModule, HMODULE hModule,
LPCWSTR pwszName, LPCWSTR pwszName,
@ -3854,6 +3891,7 @@ __declspec(dllexport) DWORD WINAPI main(
if (bOldTaskbar) if (bOldTaskbar)
{ {
VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "GetProcAddress", explorer_GetProcAddressHook); VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "GetProcAddress", explorer_GetProcAddressHook);
VnPatchIAT(hExplorer, "user32.dll", "MonitorFromRect", explorer_MonitorFromRect);
} }
VnPatchIAT(hExplorer, "user32.dll", "TrackPopupMenuEx", explorer_TrackPopupMenuExHook); VnPatchIAT(hExplorer, "user32.dll", "TrackPopupMenuEx", explorer_TrackPopupMenuExHook);
if (bClassicThemeMitigations) if (bClassicThemeMitigations)

Loading…
Cancel
Save