1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-01-18 16:54:13 +01:00

Reduced symbol dependency for Win+C hook

This commit is contained in:
Valentin Radu 2022-01-21 14:50:17 +02:00
parent 321d76a440
commit 8119c5aa7c
6 changed files with 99 additions and 16 deletions

View File

@ -25,6 +25,7 @@ Tested on OS build 22000.434.
* Windows 10 (with link to "Language Preferences")
* Windows 10
* Simple Window Switcher now highlights windows that require user attention (windows that have their taskbar button flash and colored in orange) (.8)
* Reliability improvements for the option that maps the `Win`+`C` shortcut to open the clock flyout instead of Microsoft Teams (eliminated dependency on symbol data) (.10)
#### Fixes

View File

@ -206,6 +206,8 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">EP_DWM_NO_DLLMAIN;EP_DWM_NO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EP_DWM_NO_DLLMAIN;EP_DWM_NO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">EP_DWM_NO_DLLMAIN;EP_DWM_NO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\libs\sws\SimpleWindowSwitcher\sws_error.c">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>

View File

@ -162,11 +162,13 @@ HRESULT WINAPI _DllGetClassObject(
REFIID riid,
LPVOID* ppv
);
#ifdef _WIN64
BOOL ep_dwm_StartService(LPWSTR wszServiceName, LPWSTR wszEventName);
__declspec(dllexport) int ZZDWM(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLine, int nCmdShow)
{
ep_dwm_StartService(L"ep_dwm_Service_" _T(EP_CLSID), L"Global\\ep_dwm_" _T(EP_CLSID));
}
#endif
#pragma region "Updates"
#ifdef _WIN64
@ -709,6 +711,77 @@ void LaunchNetworkTargets(DWORD dwTarget)
#pragma endregion
#pragma region "Service Window"
#ifdef _WIN64
#define EP_SERVICE_WINDOW_CLASS_NAME L"EP_Service_Window_" _T(EP_CLSID)
LRESULT CALLBACK EP_Service_Window_WndProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
if (uMsg == WM_HOTKEY && (wParam == 1 || wParam == 2))
{
InvokeClockFlyout();
return 0;
}
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
}
DWORD EP_ServiceWindowThread(DWORD unused)
{
WNDCLASS wc = { 0 };
wc.style = CS_DBLCLKS;
wc.lpfnWndProc = EP_Service_Window_WndProc;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = EP_SERVICE_WINDOW_CLASS_NAME;
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
RegisterClassW(&wc);
HWND hWnd = CreateWindowExW(
0,
EP_SERVICE_WINDOW_CLASS_NAME,
0,
WS_POPUP,
0,
0,
0,
0,
0,
0,
GetModuleHandle(NULL),
NULL
);
if (hWnd)
{
if (bClockFlyoutOnWinC)
{
RegisterHotKey(hWnd, 1, MOD_WIN | MOD_NOREPEAT, 'C');
}
RegisterHotKey(hWnd, 2, MOD_WIN | MOD_ALT, 'D');
MSG msg;
BOOL bRet;
while ((bRet = GetMessageW(&msg, NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
DestroyWindow(hWnd);
}
SetEvent(hCanStartSws);
}
#endif
#pragma endregion
#pragma region "Toggle shell features"
BOOL CALLBACK ToggleImmersiveCallback(HWND hWnd, LPARAM lParam)
{
@ -1655,7 +1728,6 @@ INT64 Shell_TrayWndSubclassProc(
if (bIsPrimaryTaskbar)
{
UnhookWindowsHookEx(Shell_TrayWndMouseHook);
UnregisterHotKey(hWnd, 'VNEP');
}
RemoveWindowSubclass(hWnd, Shell_TrayWndSubclassProc, Shell_TrayWndSubclassProc);
}
@ -1677,11 +1749,6 @@ INT64 Shell_TrayWndSubclassProc(
ToggleTaskbarAutohide();
return 0;
}
else if (uMsg == WM_HOTKEY && lParam == MAKELPARAM(MOD_WIN | MOD_ALT, 0x44))
{
InvokeClockFlyout();
return 0;
}
else if (uMsg == WM_HOTKEY && wParam == 500 && lParam == MAKELPARAM(MOD_WIN, 0x41))
{
InvokeActionCenter();
@ -3105,7 +3172,7 @@ HRESULT pnidui_CoCreateInstanceHook(
#pragma endregion
#pragma region "Show Clock flyout on Win+C and Win+Alt+D"
#pragma region "Clock flyout helper"
#ifdef _WIN64
typedef struct _ClockButton_ToggleFlyoutCallback_Params
{
@ -4914,7 +4981,6 @@ HWND CreateWindowExWHook(
else if (bIsExplorerProcess && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"Shell_TrayWnd"))
{
SetWindowSubclass(hWnd, Shell_TrayWndSubclassProc, Shell_TrayWndSubclassProc, TRUE);
RegisterHotKey(hWnd, 'VNEP', MOD_WIN | MOD_ALT, 0x44);
Shell_TrayWndMouseHook = SetWindowsHookExW(WH_MOUSE, Shell_TrayWndMouseProc, NULL, GetCurrentThreadId());
}
else if (bIsExplorerProcess && (*((WORD*)&(lpClassName)+1)) && !wcscmp(lpClassName, L"Shell_SecondaryTrayWnd"))
@ -6885,7 +6951,7 @@ DWORD Inject(BOOL bIsExplorer)
}
}
if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] && symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] != 0xFFFFFFFF)
/*if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] && symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 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]);
@ -6899,7 +6965,7 @@ DWORD Inject(BOOL bIsExplorer)
FreeLibraryAndExitThread(hModule, rv);
return rv;
}
}
}*/
VnPatchIAT(hTwinuiPcshell, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", twinuipcshell_RegGetValueW);
//VnPatchIAT(hTwinuiPcshell, "api-ms-win-core-debug-l1-1-0.dll", "IsDebuggerPresent", IsDebuggerPresentHook);
printf("Setup twinui.pcshell functions done\n");
@ -7093,6 +7159,7 @@ DWORD Inject(BOOL bIsExplorer)
}
CreateThread(
0,
0,
@ -7104,6 +7171,19 @@ DWORD Inject(BOOL bIsExplorer)
printf("Open Start on monitor thread\n");
CreateThread(
0,
0,
EP_ServiceWindowThread,
0,
0,
0
);
printf("EP Service Window thread\n");
if (bDisableOfficeHotkeys)
{
VnPatchIAT(hExplorer, "user32.dll", "RegisterHotKey", explorer_RegisterHotkeyHook);

View File

@ -350,7 +350,7 @@
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;b Remember last used section in this window
"LastSectionInProperties"=dword:00000000
;b Open clock flyout when pressing Win+C instead of Microsoft Teams
;b Open clock flyout when pressing Win+C instead of Microsoft Teams *
"ClockFlyoutOnWinC"=dword:00000000
;b Show separators between taskbar toolbars *
"ToolbarSeparators"=dword:00000000
@ -433,7 +433,7 @@
;d Enable SysListView32 for Explorer views *
@=""
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;b Do not show the program settings item ("Properties") in the taskbar context menu
;b Hide the program settings item ("Properties") from the taskbar context menu
"NoPropertiesInContextMenu"=dword:00000000
;b Enable symbols download *
"EnableSymbolDownload"=dword:00000001

View File

@ -18,7 +18,7 @@
#define TWINUI_PCSHELL_SB_5 "CLauncherTipContextMenu::_ExecuteCommand"
#define TWINUI_PCSHELL_SB_6 "CLauncherTipContextMenu::ShowLauncherTipContextMenu"
#define TWINUI_PCSHELL_SB_7 "IsUndockedAssetAvailable"
#define TWINUI_PCSHELL_SB_8 "winrt::Windows::Internal::Shell::implementation::MeetAndChatManager::OnMessage" // should be always last
#define TWINUI_PCSHELL_SB_8 "CLauncherTipContextMenu::ShowLauncherTipContextMenu" //"winrt::Windows::Internal::Shell::implementation::MeetAndChatManager::OnMessage" // should be always last
#define TWINUI_PCSHELL_SB_CNT 9
#define STARTDOCKED_SB_NAME "StartDocked"
#define STARTDOCKED_SB_0 "StartDocked::LauncherFrame::ShowAllApps" // UNUSED

View File

@ -1,7 +1,7 @@
#define VER_MAJOR 22000
#define VER_MINOR 434
#define VER_BUILD_HI 41
#define VER_BUILD_LO 9
#define VER_BUILD_LO 10
#define VER_FLAGS VS_FF_PRERELEASE
@ -12,5 +12,5 @@
#define VER_STR(arg) #arg
// The String form of the version numbers
#define VER_FILE_STRING VALUE "FileVersion", "22000.434.41.9"
#define VER_PRODUCT_STRING VALUE "ProductVersion", "22000.434.41.9"
#define VER_FILE_STRING VALUE "FileVersion", "22000.434.41.10"
#define VER_PRODUCT_STRING VALUE "ProductVersion", "22000.434.41.10"