mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-23 15:11:07 +01:00
Tons of bug fixes, quality improvements, proper startup, avoid double patching
This commit is contained in:
parent
d6bef028da
commit
2f8b33be5e
@ -51,8 +51,8 @@ END
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 22000,258,31,1
|
||||
PRODUCTVERSION 22000,258,31,1
|
||||
FILEVERSION 22000,258,32,0
|
||||
PRODUCTVERSION 22000,258,32,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@ -69,12 +69,12 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "VALINET Solutions SRL"
|
||||
VALUE "FileDescription", "ExplorerPatcher"
|
||||
VALUE "FileVersion", "22000.258.31.1"
|
||||
VALUE "FileVersion", "22000.258.32.0"
|
||||
VALUE "InternalName", "ExplorerPatcher.dll"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
|
||||
VALUE "OriginalFilename", "ExplorerPatcher.dll"
|
||||
VALUE "ProductName", "ExplorerPatcher"
|
||||
VALUE "ProductVersion", "22000.258.31.1"
|
||||
VALUE "ProductVersion", "22000.258.32.0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
@ -157,6 +157,7 @@
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)libs\funchook\include;$(SolutionDir)libs\libvalinet;$(SolutionDir)libs\funchook\distorm\include;$(SolutionDir)libs\Detours\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
<ForcedIncludeFiles>$(SolutionDir)debug.h</ForcedIncludeFiles>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
@ -211,6 +212,7 @@
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_window.c" />
|
||||
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowHelpers.c">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
@ -270,6 +272,7 @@
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_error.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_RegistryMonitor.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_vector.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_window.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowHelpers.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowSwitcher.h" />
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_WindowSwitcherLayout.h" />
|
||||
|
@ -25,6 +25,9 @@
|
||||
<Filter Include="Source Files\internal">
|
||||
<UniqueIdentifier>{08cd1a6f-9a8f-45ef-a50b-142a1725c106}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Settings">
|
||||
<UniqueIdentifier>{190d08ad-4a1d-4b58-81a1-6403eeb3cd2a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="resource.h">
|
||||
@ -96,6 +99,9 @@
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_RegistryMonitor.h">
|
||||
<Filter>Header Files\sws</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\libs\sws\SimpleWindowSwitcher\sws_window.h">
|
||||
<Filter>Header Files\sws</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="ExplorerPatcher.rc">
|
||||
@ -160,8 +166,13 @@
|
||||
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_RegistryMonitor.c">
|
||||
<Filter>Source Files\sws</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_window.c">
|
||||
<Filter>Source Files\sws</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="settings.reg" />
|
||||
<None Include="settings.reg">
|
||||
<Filter>Settings</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1431,7 +1431,6 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
wprintf(L"%d\n", locale);
|
||||
|
||||
wchar_t wszPath[MAX_PATH];
|
||||
ZeroMemory(
|
||||
|
@ -162,13 +162,13 @@ HWND GetMonitorInfoFromPointForTaskbarFlyoutActivation(POINT ptCursor, DWORD dwF
|
||||
L"Shell_TrayWnd",
|
||||
NULL
|
||||
);
|
||||
ptCursor.x = 0;
|
||||
ptCursor.y = 0;
|
||||
//ptCursor.x = 0;
|
||||
//ptCursor.y = 0;
|
||||
if (lpMi)
|
||||
{
|
||||
GetMonitorInfo(
|
||||
MonitorFromPoint(
|
||||
ptCursor,
|
||||
MonitorFromWindow(
|
||||
hWnd,
|
||||
dwFlags
|
||||
),
|
||||
lpMi
|
||||
@ -739,7 +739,15 @@ INT64 CLauncherTipContextMenu_ShowLauncherTipContextMenuHook(
|
||||
point = *pt;
|
||||
BOOL bBottom, bRight;
|
||||
POINT dPt = GetDefaultWinXPosition(FALSE, &bBottom, &bRight, FALSE);
|
||||
if (bBottom && IsThemeActive())
|
||||
POINT posCursor;
|
||||
GetCursorPos(&posCursor);
|
||||
RECT rcHitZone;
|
||||
rcHitZone.left = pt->x - 5;
|
||||
rcHitZone.right = pt->x + 5;
|
||||
rcHitZone.top = pt->y - 5;
|
||||
rcHitZone.bottom = pt->y + 5;
|
||||
//printf("%d %d = %d %d %d %d\n", posCursor.x, posCursor.y, rcHitZone.left, rcHitZone.right, rcHitZone.top, rcHitZone.bottom);
|
||||
if (bBottom && IsThemeActive() && PtInRect(&rcHitZone, posCursor))
|
||||
{
|
||||
HMONITOR hMonitor = MonitorFromPoint(point, MONITOR_DEFAULTTOPRIMARY);
|
||||
MONITORINFO mi;
|
||||
@ -1083,9 +1091,9 @@ BOOL TrackPopupMenuHookEx(
|
||||
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(hWnd, wszClassName, 200);
|
||||
wprintf(L">> %s\n", wszClassName);
|
||||
|
||||
BOOL bIsTaskbar = (!wcscmp(wszClassName, L"Shell_TrayWnd") || !wcscmp(wszClassName, L"Shell_SecondaryTrayWnd")) ? !bSkinMenus : bDisableImmersiveContextMenu;
|
||||
//wprintf(L">> %s %d %d\n", wszClassName, bIsTaskbar, bIsExplorerProcess);
|
||||
|
||||
if (bIsTaskbar && (bIsExplorerProcess ? 1 : (!wcscmp(wszClassName, L"SHELLDLL_DefView") || !wcscmp(wszClassName, L"SysTreeView32"))))
|
||||
{
|
||||
@ -1148,9 +1156,9 @@ BOOL TrackPopupMenuHook(
|
||||
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(hWnd, wszClassName, 200);
|
||||
wprintf(L">> %s\n", wszClassName);
|
||||
|
||||
BOOL bIsTaskbar = (!wcscmp(wszClassName, L"Shell_TrayWnd") || !wcscmp(wszClassName, L"Shell_SecondaryTrayWnd")) ? !bSkinMenus : bDisableImmersiveContextMenu;
|
||||
//wprintf(L">> %s %d %d\n", wszClassName, bIsTaskbar, bIsExplorerProcess);
|
||||
|
||||
if (bIsTaskbar && (bIsExplorerProcess ? 1 : (!wcscmp(wszClassName, L"SHELLDLL_DefView") || !wcscmp(wszClassName, L"SysTreeView32"))))
|
||||
{
|
||||
@ -1434,6 +1442,43 @@ BOOL sndvolsso_TrackPopupMenuExHook(
|
||||
}
|
||||
IsImmersiveMenu = FALSE;
|
||||
}
|
||||
|
||||
/*MENUITEMINFOW menuInfo;
|
||||
ZeroMemory(&menuInfo, sizeof(MENUITEMINFOW));
|
||||
menuInfo.cbSize = sizeof(MENUITEMINFOW);
|
||||
menuInfo.fMask = MIIM_ID | MIIM_STRING;
|
||||
printf("GetMenuItemInfoW %d\n", GetMenuItemInfoW(
|
||||
hMenu,
|
||||
GetMenuItemCount(hMenu) - 1,
|
||||
TRUE,
|
||||
&menuInfo
|
||||
));
|
||||
menuInfo.dwTypeData = malloc(menuInfo.cch + sizeof(wchar_t));
|
||||
menuInfo.cch++;
|
||||
printf("GetMenuItemInfoW %d\n", GetMenuItemInfoW(
|
||||
hMenu,
|
||||
GetMenuItemCount(hMenu) - 1,
|
||||
TRUE,
|
||||
&menuInfo
|
||||
));
|
||||
wcscpy_s(menuInfo.dwTypeData, menuInfo.cch, L"test");
|
||||
menuInfo.fMask = MIIM_STRING;
|
||||
wprintf(L"SetMenuItemInfoW %s %d\n", menuInfo.dwTypeData, SetMenuItemInfoW(
|
||||
hMenu,
|
||||
GetMenuItemCount(hMenu) - 1,
|
||||
TRUE,
|
||||
&menuInfo
|
||||
));
|
||||
wcscpy_s(menuInfo.dwTypeData, menuInfo.cch, L"");
|
||||
printf("GetMenuItemInfoW %d\n", GetMenuItemInfoW(
|
||||
hMenu,
|
||||
GetMenuItemCount(hMenu) - 1,
|
||||
TRUE,
|
||||
&menuInfo
|
||||
));
|
||||
wprintf(L"%s\n", menuInfo.dwTypeData);
|
||||
free(menuInfo.dwTypeData);*/
|
||||
|
||||
b = TrackPopupMenuEx(
|
||||
hMenu,
|
||||
uFlags | TPM_RIGHTBUTTON,
|
||||
@ -1650,6 +1695,7 @@ HWND WINAPI explorerframe_SHCreateWorkerWindowHook(
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
|
||||
#pragma region "Show WiFi networks on network icon click"
|
||||
#ifdef _WIN64
|
||||
DEFINE_GUID(GUID_c2f03a33_21f5_47fa_b4bb_156362a2f239,
|
||||
@ -2646,6 +2692,39 @@ void WINAPI LoadSettings(BOOL bIsExplorer)
|
||||
&bDisableImmersiveContextMenu,
|
||||
&dwSize
|
||||
);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("ClassicThemeMitigations"),
|
||||
0,
|
||||
NULL,
|
||||
&bClassicThemeMitigations,
|
||||
&dwSize
|
||||
);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("SkinMenus"),
|
||||
0,
|
||||
NULL,
|
||||
&bSkinMenus,
|
||||
&dwSize
|
||||
);
|
||||
if (bAllocConsole)
|
||||
{
|
||||
FILE* conout;
|
||||
AllocConsole();
|
||||
freopen_s(
|
||||
&conout,
|
||||
"CONOUT$",
|
||||
"w",
|
||||
stdout
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
FreeConsole();
|
||||
}
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
@ -2661,15 +2740,6 @@ void WINAPI LoadSettings(BOOL bIsExplorer)
|
||||
&dwSize
|
||||
);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("HideExplorerSearchBar"),
|
||||
0,
|
||||
NULL,
|
||||
&bHideExplorerSearchBar,
|
||||
&dwSize
|
||||
);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("MicaEffectOnTitlebar"),
|
||||
@ -2706,16 +2776,6 @@ void WINAPI LoadSettings(BOOL bIsExplorer)
|
||||
&dwSize
|
||||
);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("SkinMenus"),
|
||||
0,
|
||||
NULL,
|
||||
&bSkinMenus,
|
||||
&dwSize
|
||||
);
|
||||
printf("SkinMenus: %d\n", bSkinMenus);
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("SkinIcons"),
|
||||
@ -3043,6 +3103,95 @@ void Explorer_ToggleTouchpad(int unused)
|
||||
|
||||
|
||||
#pragma region "Fix taskbar for classic theme and set Explorer window hooks"
|
||||
HWND(*CreateWindowExWFunc)(
|
||||
DWORD dwExStyle,
|
||||
LPCWSTR lpClassName,
|
||||
LPCWSTR lpWindowName,
|
||||
DWORD dwStyle,
|
||||
int X,
|
||||
int Y,
|
||||
int nWidth,
|
||||
int nHeight,
|
||||
HWND hWndParent,
|
||||
HMENU hMenu,
|
||||
HINSTANCE hInstance,
|
||||
LPVOID lpParam
|
||||
);
|
||||
HWND CreateWindowExWHook(
|
||||
DWORD dwExStyle,
|
||||
LPCWSTR lpClassName,
|
||||
LPCWSTR lpWindowName,
|
||||
DWORD dwStyle,
|
||||
int X,
|
||||
int Y,
|
||||
int nWidth,
|
||||
int nHeight,
|
||||
HWND hWndParent,
|
||||
HMENU hMenu,
|
||||
HINSTANCE hInstance,
|
||||
LPVOID lpParam
|
||||
)
|
||||
{
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"TrayNotifyWnd"))
|
||||
{
|
||||
dwExStyle |= WS_EX_STATICEDGE;
|
||||
}
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"NotifyIconOverflowWindow"))
|
||||
{
|
||||
dwExStyle |= WS_EX_STATICEDGE;
|
||||
}
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"SysListView32") || !wcscmp(lpClassName, L"SysTreeView32"))) // !wcscmp(lpClassName, L"FolderView")
|
||||
{
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(GetAncestor(hWndParent, GA_ROOT), wszClassName, 200);
|
||||
if (!wcscmp(wszClassName, L"CabinetWClass"))
|
||||
{
|
||||
dwExStyle |= WS_EX_CLIENTEDGE;
|
||||
}
|
||||
}
|
||||
HWND hWnd = CreateWindowExWFunc(
|
||||
dwExStyle,
|
||||
lpClassName,
|
||||
lpWindowName,
|
||||
dwStyle,
|
||||
X,
|
||||
Y,
|
||||
nWidth,
|
||||
nHeight,
|
||||
hWndParent,
|
||||
hMenu,
|
||||
hInstance,
|
||||
lpParam
|
||||
);
|
||||
#ifdef _WIN64
|
||||
if (bIsExplorerProcess && (*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"TrayClockWClass") || !wcscmp(lpClassName, L"ClockButton")))
|
||||
{
|
||||
SetWindowSubclass(hWnd, ClockButtonSubclassProc, ClockButtonSubclassProc, 0);
|
||||
}
|
||||
else if (bIsExplorerProcess && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"TrayShowDesktopButtonWClass"))
|
||||
{
|
||||
SetWindowSubclass(hWnd, ShowDesktopSubclassProc, ShowDesktopSubclassProc, 0);
|
||||
}
|
||||
else if (bIsExplorerProcess && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"Shell_TrayWnd"))
|
||||
{
|
||||
SetWindowSubclass(hWnd, Shell_TrayWndSubclassProc, Shell_TrayWndSubclassProc, 0);
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"FolderView")))
|
||||
{
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(GetAncestor(hWndParent, GA_ROOT), wszClassName, 200);
|
||||
if (!wcscmp(wszClassName, L"CabinetWClass"))
|
||||
{
|
||||
SendMessageW(hWnd, 0x108, 0, 0);
|
||||
}
|
||||
}
|
||||
*/
|
||||
//SetWindowTheme(hWnd, L" ", L" ");
|
||||
return hWnd;
|
||||
}
|
||||
|
||||
#ifdef _WIN64
|
||||
HRESULT (*explorer_SetWindowThemeFunc)(
|
||||
HWND hwnd,
|
||||
@ -3287,93 +3436,6 @@ HRESULT explorer_GetThemeMargins(
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HWND (*CreateWindowExWFunc)(
|
||||
DWORD dwExStyle,
|
||||
LPCWSTR lpClassName,
|
||||
LPCWSTR lpWindowName,
|
||||
DWORD dwStyle,
|
||||
int X,
|
||||
int Y,
|
||||
int nWidth,
|
||||
int nHeight,
|
||||
HWND hWndParent,
|
||||
HMENU hMenu,
|
||||
HINSTANCE hInstance,
|
||||
LPVOID lpParam
|
||||
);
|
||||
HWND CreateWindowExWHook(
|
||||
DWORD dwExStyle,
|
||||
LPCWSTR lpClassName,
|
||||
LPCWSTR lpWindowName,
|
||||
DWORD dwStyle,
|
||||
int X,
|
||||
int Y,
|
||||
int nWidth,
|
||||
int nHeight,
|
||||
HWND hWndParent,
|
||||
HMENU hMenu,
|
||||
HINSTANCE hInstance,
|
||||
LPVOID lpParam
|
||||
)
|
||||
{
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"TrayNotifyWnd"))
|
||||
{
|
||||
dwExStyle |= WS_EX_STATICEDGE;
|
||||
}
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"NotifyIconOverflowWindow"))
|
||||
{
|
||||
dwExStyle |= WS_EX_STATICEDGE;
|
||||
}
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"SysListView32") || !wcscmp(lpClassName, L"SysTreeView32"))) // !wcscmp(lpClassName, L"FolderView")
|
||||
{
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(GetAncestor(hWndParent, GA_ROOT), wszClassName, 200);
|
||||
if (!wcscmp(wszClassName, L"CabinetWClass"))
|
||||
{
|
||||
dwExStyle |= WS_EX_CLIENTEDGE;
|
||||
}
|
||||
}
|
||||
HWND hWnd = CreateWindowExWFunc(
|
||||
dwExStyle,
|
||||
lpClassName,
|
||||
lpWindowName,
|
||||
dwStyle,
|
||||
X,
|
||||
Y,
|
||||
nWidth,
|
||||
nHeight,
|
||||
hWndParent,
|
||||
hMenu,
|
||||
hInstance,
|
||||
lpParam
|
||||
);
|
||||
if ((*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"TrayClockWClass") || !wcscmp(lpClassName, L"ClockButton")))
|
||||
{
|
||||
SetWindowSubclass(hWnd, ClockButtonSubclassProc, ClockButtonSubclassProc, 0);
|
||||
}
|
||||
else if ((*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"TrayShowDesktopButtonWClass"))
|
||||
{
|
||||
SetWindowSubclass(hWnd, ShowDesktopSubclassProc, ShowDesktopSubclassProc, 0);
|
||||
}
|
||||
else if ((*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"Shell_TrayWnd"))
|
||||
{
|
||||
SetWindowSubclass(hWnd, Shell_TrayWndSubclassProc, Shell_TrayWndSubclassProc, 0);
|
||||
}
|
||||
/*
|
||||
if (bClassicThemeMitigations && (*((WORD*)&(lpClassName)+1)) && (!wcscmp(lpClassName, L"FolderView")))
|
||||
{
|
||||
wchar_t wszClassName[200];
|
||||
GetClassNameW(GetAncestor(hWndParent, GA_ROOT), wszClassName, 200);
|
||||
if (!wcscmp(wszClassName, L"CabinetWClass"))
|
||||
{
|
||||
SendMessageW(hWnd, 0x108, 0, 0);
|
||||
}
|
||||
}
|
||||
*/
|
||||
//SetWindowTheme(hWnd, L" ", L" ");
|
||||
return hWnd;
|
||||
}
|
||||
|
||||
HRESULT explorer_DrawThemeTextEx(
|
||||
HTHEME hTheme,
|
||||
HDC hdc,
|
||||
@ -3515,11 +3577,20 @@ DWORD InjectBasicFunctions(BOOL bIsExplorer, BOOL bInstall)
|
||||
{
|
||||
VnPatchIAT(hShell32, "user32.dll", "TrackPopupMenu", TrackPopupMenuHook);
|
||||
VnPatchIAT(hShell32, "user32.dll", "SystemParametersInfoW", DisableImmersiveMenus_SystemParametersInfoW);
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
CreateWindowExWFunc = CreateWindowExW;
|
||||
VnPatchIAT(hShell32, "user32.dll", "CreateWindowExW", CreateWindowExWHook);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VnPatchIAT(hShell32, "user32.dll", "TrackPopupMenu", TrackPopupMenu);
|
||||
VnPatchIAT(hShell32, "user32.dll", "SystemParametersInfoW", SystemParametersInfoW);
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
VnPatchIAT(hShell32, "user32.dll", "CreateWindowExW", CreateWindowExW);
|
||||
}
|
||||
FreeLibrary(hShell32);
|
||||
FreeLibrary(hShell32);
|
||||
}
|
||||
@ -3541,12 +3612,21 @@ DWORD InjectBasicFunctions(BOOL bIsExplorer, BOOL bInstall)
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "TrackPopupMenu", TrackPopupMenuHook);
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "SystemParametersInfoW", DisableImmersiveMenus_SystemParametersInfoW);
|
||||
VnPatchIAT(hExplorerFrame, "shcore.dll", (LPCSTR)188, explorerframe_SHCreateWorkerWindowHook); // <<<SAB>>>
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
CreateWindowExWFunc = CreateWindowExW;
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "CreateWindowExW", CreateWindowExWHook);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "TrackPopupMenu", TrackPopupMenu);
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "SystemParametersInfoW", SystemParametersInfoW);
|
||||
VnPatchIAT(hExplorerFrame, "shcore.dll", (LPCSTR)188, explorerframe_SHCreateWorkerWindowFunc);
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
VnPatchIAT(hExplorerFrame, "user32.dll", "CreateWindowExW", CreateWindowExW);
|
||||
}
|
||||
FreeLibrary(hExplorerFrame);
|
||||
FreeLibrary(hExplorerFrame);
|
||||
}
|
||||
@ -3556,11 +3636,20 @@ DWORD InjectBasicFunctions(BOOL bIsExplorer, BOOL bInstall)
|
||||
{
|
||||
VnPatchDelayIAT(hWindowsUIFileExplorer, "user32.dll", "TrackPopupMenu", TrackPopupMenuHook);
|
||||
VnPatchDelayIAT(hWindowsUIFileExplorer, "user32.dll", "SystemParametersInfoW", DisableImmersiveMenus_SystemParametersInfoW);
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
CreateWindowExWFunc = CreateWindowExW;
|
||||
VnPatchIAT(hWindowsUIFileExplorer, "user32.dll", "CreateWindowExW", CreateWindowExWHook);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VnPatchDelayIAT(hWindowsUIFileExplorer, "user32.dll", "TrackPopupMenu", TrackPopupMenu);
|
||||
VnPatchDelayIAT(hWindowsUIFileExplorer, "user32.dll", "SystemParametersInfoW", SystemParametersInfoW);
|
||||
if (!bIsExplorer)
|
||||
{
|
||||
VnPatchIAT(hWindowsUIFileExplorer, "user32.dll", "CreateWindowExW", CreateWindowExW);
|
||||
}
|
||||
FreeLibrary(hWindowsUIFileExplorer);
|
||||
FreeLibrary(hWindowsUIFileExplorer);
|
||||
}
|
||||
@ -3579,47 +3668,27 @@ LSTATUS explorer_RegGetValueW(
|
||||
{
|
||||
DWORD flOldProtect;
|
||||
BOOL bShowTaskViewButton = FALSE;
|
||||
BOOL bShowCortanaButton = FALSE;
|
||||
BOOL bPeopleBand = FALSE;
|
||||
LSTATUS lRes;
|
||||
|
||||
if (!lstrcmpW(lpValue, L"ShowCortanaButton") && VirtualProtect((LPVOID)lpValue, 0xC8, PAGE_EXECUTE_READWRITE, &flOldProtect))
|
||||
if (!lstrcmpW(lpValue, L"ShowCortanaButton"))
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"TaskbarDa"); // ShowTaskViewButton
|
||||
bShowCortanaButton = TRUE;
|
||||
lRes = RegGetValueW(hkey, lpSubKey, L"TaskbarDa", dwFlags, pdwType, pvData, pcbData);
|
||||
}
|
||||
else if (!lstrcmpW(lpValue, L"PeopleBand") && VirtualProtect((LPVOID)lpValue, 0xC8, PAGE_EXECUTE_READWRITE, &flOldProtect))
|
||||
else if (!lstrcmpW(lpValue, L"PeopleBand"))
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"TaskbarMn"); // ShowTaskViewButton
|
||||
bPeopleBand = TRUE;
|
||||
lRes = RegGetValueW(hkey, lpSubKey, L"TaskbarMn", dwFlags, pdwType, pvData, pcbData);
|
||||
}
|
||||
/*else if (!lstrcmpW(lpValue, L"ShowTaskViewButton") && VirtualProtect((LPVOID)lpValue, 0xC8, PAGE_EXECUTE_READWRITE, &flOldProtect))
|
||||
else
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"TaskbarDa");
|
||||
bShowTaskViewButton = TRUE;
|
||||
}*/
|
||||
|
||||
LSTATUS lRes = RegGetValueW(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
|
||||
|
||||
if (bShowCortanaButton)
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"ShowCortanaButton");
|
||||
VirtualProtect((LPVOID)lpValue, 0xC8, flOldProtect, &flOldProtect);
|
||||
lRes = RegGetValueW(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
|
||||
}
|
||||
else if (bPeopleBand)
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"PeopleBand");
|
||||
VirtualProtect((LPVOID)lpValue, 0xC8, flOldProtect, &flOldProtect);
|
||||
}
|
||||
/*else if (bShowTaskViewButton)
|
||||
{
|
||||
lstrcpyW((LPWSTR)lpValue, L"ShowTaskViewButton");
|
||||
VirtualProtect((LPVOID)lpValue, 0xC8, flOldProtect, &flOldProtect);
|
||||
}*/
|
||||
|
||||
if (!lstrcmpW(lpValue, L"SearchboxTaskbarMode"))
|
||||
{
|
||||
if (*(DWORD*)pvData)
|
||||
{
|
||||
*(DWORD*)pvData = 1;
|
||||
}
|
||||
|
||||
lRes = ERROR_SUCCESS;
|
||||
}
|
||||
@ -3788,22 +3857,8 @@ __declspec(dllexport) DWORD WINAPI main(
|
||||
|
||||
int rv;
|
||||
|
||||
bIsExplorerProcess = bIsExplorer;
|
||||
|
||||
LoadSettings(bIsExplorer);
|
||||
|
||||
if (bAllocConsole)
|
||||
{
|
||||
FILE* conout;
|
||||
AllocConsole();
|
||||
freopen_s(
|
||||
&conout,
|
||||
"CONOUT$",
|
||||
"w",
|
||||
stdout
|
||||
);
|
||||
}
|
||||
|
||||
#ifdef _WIN64
|
||||
if (bIsExplorer)
|
||||
{
|
||||
@ -3969,6 +4024,7 @@ __declspec(dllexport) DWORD WINAPI main(
|
||||
{
|
||||
VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "GetProcAddress", explorer_GetProcAddressHook);
|
||||
VnPatchIAT(hExplorer, "shell32.dll", "ShellExecuteW", explorer_ShellExecuteW);
|
||||
VnPatchIAT(hExplorer, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", explorer_RegGetValueW);
|
||||
VnPatchIAT(hExplorer, "user32.dll", "MonitorFromRect", explorer_MonitorFromRect);
|
||||
}
|
||||
VnPatchIAT(hExplorer, "user32.dll", "TrackPopupMenuEx", explorer_TrackPopupMenuExHook);
|
||||
@ -3994,7 +4050,6 @@ __declspec(dllexport) DWORD WINAPI main(
|
||||
}
|
||||
//VnPatchDelayIAT(hExplorer, "ext-ms-win-rtcore-ntuser-window-ext-l1-1-0.dll", "CreateWindowExW", explorer_CreateWindowExW);
|
||||
|
||||
VnPatchIAT(hExplorer, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", explorer_RegGetValueW);
|
||||
|
||||
#ifdef USE_PRIVATE_INTERFACES
|
||||
HANDLE hShcore = LoadLibraryW(L"shcore.dll");
|
||||
@ -4032,45 +4087,50 @@ __declspec(dllexport) DWORD WINAPI main(
|
||||
|
||||
HANDLE hTwinuiPcshell = LoadLibraryW(L"twinui.pcshell.dll");
|
||||
|
||||
CImmersiveContextMenuOwnerDrawHelper_s_ContextMenuWndProcFunc = (INT64(*)(HWND, int, HWND, int, BOOL*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[0]);
|
||||
|
||||
CLauncherTipContextMenu_GetMenuItemsAsyncFunc = (INT64(*)(void*, void*, void**))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[1]);
|
||||
|
||||
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenuFunc = (INT64(*)(HMENU, HMENU, HWND, unsigned int, void*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[2]);
|
||||
|
||||
ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenuFunc = (void(*)(HMENU, HMENU, HWND))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[3]);
|
||||
|
||||
CLauncherTipContextMenu_ExecuteShutdownCommandFunc = (void(*)(void*, void*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[4]);
|
||||
|
||||
CLauncherTipContextMenu_ExecuteCommandFunc = (void(*)(void*, int))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[5]);
|
||||
|
||||
CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[6]);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc,
|
||||
CLauncherTipContextMenu_ShowLauncherTipContextMenuHook
|
||||
);
|
||||
if (rv != 0)
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[0] != 0xFFFFFFFF)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
CImmersiveContextMenuOwnerDrawHelper_s_ContextMenuWndProcFunc = (INT64(*)(HWND, int, HWND, int, BOOL*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[0]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1])
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[1] != 0xFFFFFFFF)
|
||||
{
|
||||
winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1]);
|
||||
CLauncherTipContextMenu_GetMenuItemsAsyncFunc = (INT64(*)(void*, void*, void**))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[1]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[2] != 0xFFFFFFFF)
|
||||
{
|
||||
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenuFunc = (INT64(*)(HMENU, HMENU, HWND, unsigned int, void*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[2]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[3] != 0xFFFFFFFF)
|
||||
{
|
||||
ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenuFunc = (void(*)(HMENU, HMENU, HWND))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[3]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[4] != 0xFFFFFFFF)
|
||||
{
|
||||
CLauncherTipContextMenu_ExecuteShutdownCommandFunc = (void(*)(void*, void*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[4]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[5] != 0xFFFFFFFF)
|
||||
{
|
||||
CLauncherTipContextMenu_ExecuteCommandFunc = (void(*)(void*, int))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[5]);
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[6] != 0xFFFFFFFF)
|
||||
{
|
||||
CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[6]);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageFunc,
|
||||
winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageHook
|
||||
(void**)&CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc,
|
||||
CLauncherTipContextMenu_ShowLauncherTipContextMenuHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
@ -4078,6 +4138,25 @@ __declspec(dllexport) DWORD WINAPI main(
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] != 0xFFFFFFFF)
|
||||
{
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1])
|
||||
{
|
||||
winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1]);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageFunc,
|
||||
winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("Setup twinui.pcshell functions done\n");
|
||||
|
||||
|
||||
@ -4282,10 +4361,10 @@ char VisibilityChangedEventArguments_GetVisible(__int64 a1)
|
||||
DWORD StartMenu_maximumFreqApps = 6;
|
||||
DWORD StartMenu_ShowAllApps = 0;
|
||||
|
||||
void StartMenu_LoadSettings(int unused)
|
||||
void StartMenu_LoadSettings(BOOL bRestartIfChanged)
|
||||
{
|
||||
HKEY hKey = NULL;
|
||||
DWORD dwSize;
|
||||
DWORD dwSize, dwVal;
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
@ -4333,14 +4412,20 @@ void StartMenu_LoadSettings(int unused)
|
||||
if (hKey)
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
dwVal = 6;
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("Start_MaximumFrequentApps"),
|
||||
0,
|
||||
NULL,
|
||||
&StartMenu_maximumFreqApps,
|
||||
&dwVal,
|
||||
&dwSize
|
||||
);
|
||||
if (bRestartIfChanged && dwVal != StartMenu_maximumFreqApps)
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
StartMenu_maximumFreqApps = dwVal;
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
@ -4597,33 +4682,41 @@ HRESULT WINAPI _DllRegisterServer()
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
/*if (!dwLastError)
|
||||
{
|
||||
dwLastError = RegCreateKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\" TEXT(EP_CLSID),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_WRITE | KEY_WOW64_64KEY,
|
||||
NULL,
|
||||
&hKey,
|
||||
NULL
|
||||
);
|
||||
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hKey = NULL;
|
||||
}
|
||||
if (hKey)
|
||||
{
|
||||
DWORD dwNoInternetExplorer = 1;
|
||||
dwLastError = RegSetValueExW(
|
||||
hKey,
|
||||
L"NoInternetExplorer",
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwNoInternetExplorer,
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}*/
|
||||
Code = 1;
|
||||
if (dwLastError) Code = -Code;
|
||||
|
||||
PROCESSENTRY32 pe32 = { 0 };
|
||||
pe32.dwSize = sizeof(PROCESSENTRY32);
|
||||
HANDLE hSnapshot = CreateToolhelp32Snapshot(
|
||||
TH32CS_SNAPPROCESS,
|
||||
0
|
||||
);
|
||||
if (Process32First(hSnapshot, &pe32) == TRUE)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (!wcscmp(pe32.szExeFile, TEXT("sihost.exe")))
|
||||
{
|
||||
HANDLE hSihost = OpenProcess(
|
||||
PROCESS_TERMINATE,
|
||||
FALSE,
|
||||
pe32.th32ProcessID
|
||||
);
|
||||
TerminateProcess(hSihost, 0);
|
||||
CloseHandle(hSihost);
|
||||
return TRUE;
|
||||
}
|
||||
} while (Process32Next(hSnapshot, &pe32) == TRUE);
|
||||
}
|
||||
CloseHandle(hSnapshot);
|
||||
ZZRestartExplorer();
|
||||
|
||||
return dwLastError == 0 ? S_OK : HRESULT_FROM_WIN32(dwLastError);
|
||||
}
|
||||
@ -4734,9 +4827,38 @@ HRESULT WINAPI _DllUnregisterServer()
|
||||
}
|
||||
}
|
||||
}
|
||||
/*if (!dwLastError)
|
||||
{
|
||||
dwLastError = RegOpenKeyW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\" TEXT(EP_CLSID),
|
||||
&hKey
|
||||
);
|
||||
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hKey = NULL;
|
||||
}
|
||||
if (hKey)
|
||||
{
|
||||
dwLastError = RegDeleteTreeW(
|
||||
hKey,
|
||||
0
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
if (!dwLastError)
|
||||
{
|
||||
RegDeleteKeyW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects\\" TEXT(EP_CLSID)
|
||||
);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
Code = 2;
|
||||
if (dwLastError) Code = -Code;
|
||||
|
||||
ZZRestartExplorer();
|
||||
|
||||
return dwLastError == 0 ? S_OK : HRESULT_FROM_WIN32(dwLastError);
|
||||
}
|
||||
#endif
|
||||
@ -4777,31 +4899,37 @@ HRESULT WINAPI _DllGetClassObject(
|
||||
MAX_PATH
|
||||
);
|
||||
PathStripPathW(exeName);
|
||||
/*TCHAR wszSystemPath[MAX_PATH + 1];
|
||||
TCHAR wszSystemPath[MAX_PATH + 1];
|
||||
GetSystemDirectory(wszSystemPath, MAX_PATH + 1);
|
||||
wcscat_s(wszSystemPath, MAX_PATH + 1, L"\\dxgi.dll");
|
||||
HMODULE hModule = LoadLibraryW(wszSystemPath);
|
||||
/*HMODULE hModule = LoadLibraryW(wszSystemPath);
|
||||
SetupDXGIImportFunctions(hModule);*/
|
||||
if (!wcscmp(exeName, L"explorer.exe") && FileExistsW(wszSystemPath))
|
||||
{
|
||||
bInstanced = TRUE;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
bIsExplorerProcess = !wcscmp(exeName, L"explorer.exe");
|
||||
if (!wcscmp(exeName, L"explorer.exe"))
|
||||
{
|
||||
main(TRUE);
|
||||
main(!IsDesktopWindowAlreadyPresent());
|
||||
}
|
||||
else if (!wcscmp(exeName, L"StartMenuExperienceHost.exe"))
|
||||
{
|
||||
#ifdef _WIN64
|
||||
funchook = funchook_create();
|
||||
|
||||
StartMenu_LoadSettings(0);
|
||||
StartMenu_LoadSettings(FALSE);
|
||||
|
||||
Setting* settings = calloc(2, sizeof(Setting));
|
||||
settings[0].callback = StartMenu_LoadSettings;
|
||||
settings[0].data = 0;
|
||||
settings[0].data = FALSE;
|
||||
settings[0].hEvent = NULL;
|
||||
settings[0].hKey = NULL;
|
||||
wcscpy_s(settings[0].name, MAX_PATH, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartPage");
|
||||
settings[0].origin = HKEY_CURRENT_USER;
|
||||
settings[1].callback = exit;
|
||||
settings[1].data = 0;
|
||||
settings[1].callback = StartMenu_LoadSettings;
|
||||
settings[1].data = TRUE;
|
||||
settings[1].hEvent = NULL;
|
||||
settings[1].hKey = NULL;
|
||||
wcscpy_s(settings[1].name, MAX_PATH, TEXT(REGPATH));
|
||||
@ -4880,44 +5008,56 @@ HRESULT WINAPI _DllGetClassObject(
|
||||
|
||||
LoadLibraryW(L"StartDocked.dll");
|
||||
HANDLE hStartDocked = GetModuleHandle(L"StartDocked.dll");
|
||||
StartDocked_LauncherFrame_ShowAllAppsFunc = (INT64(*)(void*))
|
||||
((uintptr_t)hStartDocked + dwVal1);
|
||||
StartDocked_LauncherFrame_OnVisibilityChangedFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal2);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_LauncherFrame_OnVisibilityChangedFunc,
|
||||
StartDocked_LauncherFrame_OnVisibilityChangedHook
|
||||
);
|
||||
if (rv != 0)
|
||||
if (dwVal1 != 0xFFFFFFFF)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
StartDocked_LauncherFrame_ShowAllAppsFunc = (INT64(*)(void*))
|
||||
((uintptr_t)hStartDocked + dwVal1);
|
||||
}
|
||||
StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal3);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsFunc,
|
||||
StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsHook
|
||||
);
|
||||
if (rv != 0)
|
||||
if (dwVal2 != 0xFFFFFFFF)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
StartDocked_LauncherFrame_OnVisibilityChangedFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal2);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_LauncherFrame_OnVisibilityChangedFunc,
|
||||
StartDocked_LauncherFrame_OnVisibilityChangedHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
/*StartDocked_StartSizingFrame_StartSizingFrameFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal4);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_StartSizingFrame_StartSizingFrameFunc,
|
||||
StartDocked_StartSizingFrame_StartSizingFrameHook
|
||||
);
|
||||
if (rv != 0)
|
||||
if (dwVal3 != 0xFFFFFFFF)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}*/
|
||||
StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal3);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsFunc,
|
||||
StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
if (dwVal4 != 0xFFFFFFFF)
|
||||
{
|
||||
/*StartDocked_StartSizingFrame_StartSizingFrameFunc = (INT64(*)(void*, INT64, void*))
|
||||
((uintptr_t)hStartDocked + dwVal4);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&StartDocked_StartSizingFrame_StartSizingFrameFunc,
|
||||
StartDocked_StartSizingFrame_StartSizingFrameHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}*/
|
||||
}
|
||||
|
||||
rv = funchook_install(funchook, 0);
|
||||
if (rv != 0)
|
||||
@ -4937,6 +5077,37 @@ HRESULT WINAPI _DllGetClassObject(
|
||||
bInstanced = TRUE;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
#ifdef _WIN64
|
||||
__declspec(dllexport) HRESULT DXGIDeclareAdapterRemovalSupport()
|
||||
{
|
||||
TCHAR exeName[MAX_PATH], dllName[MAX_PATH];
|
||||
GetProcessImageFileNameW(
|
||||
OpenProcess(
|
||||
PROCESS_QUERY_INFORMATION,
|
||||
FALSE,
|
||||
GetCurrentProcessId()
|
||||
),
|
||||
exeName,
|
||||
MAX_PATH
|
||||
);
|
||||
PathStripPathW(exeName);
|
||||
GetModuleFileNameW(hModule, dllName, MAX_PATH);
|
||||
PathStripPathW(dllName);
|
||||
TCHAR wszSystemPath[MAX_PATH];
|
||||
GetSystemDirectory(wszSystemPath, MAX_PATH);
|
||||
wcscat_s(wszSystemPath, MAX_PATH, L"\\dxgi.dll");
|
||||
HMODULE hModule = LoadLibraryW(wszSystemPath);
|
||||
SetupDXGIImportFunctions(hModule);
|
||||
bIsExplorerProcess = !wcscmp(exeName, L"explorer.exe");
|
||||
if (!wcscmp(exeName, L"explorer.exe") && !wcscmp(dllName, L"dxgi.dll"))
|
||||
{
|
||||
// CreateEventW(NULL, FALSE, FALSE, L"ExplorerPatcher_Guard_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}") && GetLastError() != ERROR_ALREADY_EXISTS
|
||||
main(!IsDesktopWindowAlreadyPresent()); //wcsstr(GetCommandLineW(), L"NoUACCheck") // !IsDesktopWindowAlreadyPresent()
|
||||
bInstanced = TRUE;
|
||||
}
|
||||
return DXGIDeclareAdapterRemovalSupportFunc();
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOL WINAPI DllMain(
|
||||
_In_ HINSTANCE hinstDLL,
|
||||
@ -4949,30 +5120,6 @@ BOOL WINAPI DllMain(
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
hModule = hinstDLL;
|
||||
#ifdef _WIN64
|
||||
TCHAR exeName[MAX_PATH], dllName[MAX_PATH];
|
||||
GetProcessImageFileNameW(
|
||||
OpenProcess(
|
||||
PROCESS_QUERY_INFORMATION,
|
||||
FALSE,
|
||||
GetCurrentProcessId()
|
||||
),
|
||||
exeName,
|
||||
MAX_PATH
|
||||
);
|
||||
PathStripPathW(exeName);
|
||||
GetModuleFileNameW(hModule, dllName, MAX_PATH);
|
||||
PathStripPathW(dllName);
|
||||
if (!wcscmp(exeName, L"explorer.exe") && !wcscmp(dllName, L"dxgi.dll"))
|
||||
{
|
||||
TCHAR wszSystemPath[MAX_PATH];
|
||||
GetSystemDirectory(wszSystemPath, MAX_PATH);
|
||||
wcscat_s(wszSystemPath, MAX_PATH, L"\\dxgi.dll");
|
||||
HMODULE hModule = LoadLibraryW(wszSystemPath);
|
||||
SetupDXGIImportFunctions(hModule);
|
||||
main(TRUE);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
break;
|
||||
|
@ -51,10 +51,6 @@ __declspec(dllexport) HRESULT DXGID3D10RegisterLayers()
|
||||
return DXGID3D10RegisterLayersFunc();
|
||||
}
|
||||
static HRESULT(*DXGIDeclareAdapterRemovalSupportFunc)();
|
||||
__declspec(dllexport) HRESULT DXGIDeclareAdapterRemovalSupport()
|
||||
{
|
||||
return DXGIDeclareAdapterRemovalSupportFunc();
|
||||
}
|
||||
static HRESULT(*DXGIDumpJournalFunc)(void*);
|
||||
__declspec(dllexport) HRESULT DXGIDumpJournal(void* p1)
|
||||
{
|
||||
|
3
debug.h
Normal file
3
debug.h
Normal file
@ -0,0 +1,3 @@
|
||||
#define _CRTDBG_MAP_ALLOC
|
||||
#include <stdlib.h>
|
||||
#include <crtdbg.h>
|
2
libs/sws
2
libs/sws
@ -1 +1 @@
|
||||
Subproject commit a5ffe4d4d88fd1c6e4325d63b7556ad02a3c3e95
|
||||
Subproject commit df06baf50a350a9d2cd4103e88eca5acc62947cd
|
Loading…
Reference in New Issue
Block a user