15 changed files with 1117 additions and 62 deletions
@ -0,0 +1,6 @@ |
|||||||
|
[submodule "libs/libvalinet"] |
||||||
|
path = libs/libvalinet |
||||||
|
url = https://github.com/valinet/libvalinet |
||||||
|
[submodule "libs/funchook"] |
||||||
|
path = libs/funchook |
||||||
|
url = https://github.com/kubo/funchook |
||||||
@ -0,0 +1,100 @@ |
|||||||
|
// Microsoft Visual C++ generated resource script. |
||||||
|
// |
||||||
|
#include "resource.h" |
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 2 resource. |
||||||
|
// |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// English (United States) resources |
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
#pragma code_page(1252) |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// TEXTINCLUDE |
||||||
|
// |
||||||
|
|
||||||
|
1 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"resource.h\0" |
||||||
|
END |
||||||
|
|
||||||
|
2 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"#include ""winres.h""\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
3 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION 22000,1,0,1 |
||||||
|
PRODUCTVERSION 22000,1,0,1 |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x1L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "VALINET Solutions SRL" |
||||||
|
VALUE "FileDescription", "ExplorerPatcher Daemon" |
||||||
|
VALUE "FileVersion", "22000.1.0.1" |
||||||
|
VALUE "InternalName", "ExplorerPatcher.exe" |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved." |
||||||
|
VALUE "OriginalFilename", "ExplorerPatcher.exe" |
||||||
|
VALUE "ProductName", "ExplorerPatcher" |
||||||
|
VALUE "ProductVersion", "22000.1.0.1" |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
||||||
|
|
||||||
|
#endif // English (United States) resources |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 3 resource. |
||||||
|
// |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
|
|
||||||
@ -0,0 +1,100 @@ |
|||||||
|
// Microsoft Visual C++ generated resource script. |
||||||
|
// |
||||||
|
#include "resource.h" |
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 2 resource. |
||||||
|
// |
||||||
|
#include "winres.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// English (United States) resources |
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
||||||
|
#pragma code_page(1252) |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// TEXTINCLUDE |
||||||
|
// |
||||||
|
|
||||||
|
1 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"resource.h\0" |
||||||
|
END |
||||||
|
|
||||||
|
2 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"#include ""winres.h""\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
3 TEXTINCLUDE |
||||||
|
BEGIN |
||||||
|
"\r\n" |
||||||
|
"\0" |
||||||
|
END |
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION 22000,1,0,1 |
||||||
|
PRODUCTVERSION 22000,1,0,1 |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x2L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "VALINET Solutions SRL" |
||||||
|
VALUE "FileDescription", "ExplorerPatcher Library" |
||||||
|
VALUE "FileVersion", "22000.1.0.1" |
||||||
|
VALUE "InternalName", "ExplorerPatcherLibrary.dll" |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved." |
||||||
|
VALUE "OriginalFilename", "ExplorerPatcherLibrary.dll" |
||||||
|
VALUE "ProductName", "WinOverview" |
||||||
|
VALUE "ProductVersion", "22000.1.0.1" |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
||||||
|
|
||||||
|
#endif // English (United States) resources |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED |
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Generated from the TEXTINCLUDE 3 resource. |
||||||
|
// |
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
#endif // not APSTUDIO_INVOKED |
||||||
|
|
||||||
@ -0,0 +1,160 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup Label="ProjectConfigurations"> |
||||||
|
<ProjectConfiguration Include="Debug|Win32"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|Win32"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>Win32</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Debug|x64"> |
||||||
|
<Configuration>Debug</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
<ProjectConfiguration Include="Release|x64"> |
||||||
|
<Configuration>Release</Configuration> |
||||||
|
<Platform>x64</Platform> |
||||||
|
</ProjectConfiguration> |
||||||
|
</ItemGroup> |
||||||
|
<PropertyGroup Label="Globals"> |
||||||
|
<VCProjectVersion>16.0</VCProjectVersion> |
||||||
|
<ProjectGuid>{DB3E4319-2969-42B6-B7E8-BB57AA8C9FA9}</ProjectGuid> |
||||||
|
<RootNamespace>CenterTitlebarTextLibrary</RootNamespace> |
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> |
||||||
|
<ProjectName>ExplorerPatcherLibrary</ProjectName> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v142</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> |
||||||
|
<ConfigurationType>Application</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v142</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>true</UseDebugLibraries> |
||||||
|
<PlatformToolset>v142</PlatformToolset> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> |
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType> |
||||||
|
<UseDebugLibraries>false</UseDebugLibraries> |
||||||
|
<PlatformToolset>v142</PlatformToolset> |
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||||
|
<CharacterSet>Unicode</CharacterSet> |
||||||
|
</PropertyGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||||
|
<ImportGroup Label="ExtensionSettings"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="Shared"> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||||
|
</ImportGroup> |
||||||
|
<PropertyGroup Label="UserMacros" /> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<LinkIncremental>true</LinkIncremental> |
||||||
|
</PropertyGroup> |
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<LinkIncremental>false</LinkIncremental> |
||||||
|
</PropertyGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)libs\funchook\include;$(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)libs\funchook\build\Release\funchook.lib;$(SolutionDir)libs\funchook\build\Release\distorm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
||||||
|
<AdditionalDependencies>$(SolutionDir)libs\funchook\build\Release\funchook.lib;$(SolutionDir)libs\funchook\build\Release\distorm.lib;%(AdditionalDependencies)</AdditionalDependencies> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)libs\funchook\include;$(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)libs\funchook\build\Release\funchook.lib;$(SolutionDir)libs\funchook\build\Release\distorm.lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> |
||||||
|
<AdditionalDependencies>$(SolutionDir)libs\funchook\build\Release\funchook.lib;$(SolutionDir)libs\funchook\build\Release\distorm.lib;%(AdditionalDependencies)</AdditionalDependencies> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||||
|
<ClCompile> |
||||||
|
<WarningLevel>Level3</WarningLevel> |
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||||
|
<SDLCheck>true</SDLCheck> |
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||||
|
<ConformanceMode>true</ConformanceMode> |
||||||
|
</ClCompile> |
||||||
|
<Link> |
||||||
|
<SubSystem>Console</SubSystem> |
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||||
|
<OptimizeReferences>true</OptimizeReferences> |
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation> |
||||||
|
</Link> |
||||||
|
</ItemDefinitionGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="dllmain.c" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="resource.h" /> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="ExplorerPatcherLibrary.rc" /> |
||||||
|
</ItemGroup> |
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||||
|
<ImportGroup Label="ExtensionTargets"> |
||||||
|
</ImportGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<ItemGroup> |
||||||
|
<Filter Include="Source Files"> |
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> |
||||||
|
<Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Header Files"> |
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> |
||||||
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> |
||||||
|
</Filter> |
||||||
|
<Filter Include="Resource Files"> |
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> |
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> |
||||||
|
</Filter> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClInclude Include="resource.h"> |
||||||
|
<Filter>Header Files</Filter> |
||||||
|
</ClInclude> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ResourceCompile Include="ExplorerPatcherLibrary.rc"> |
||||||
|
<Filter>Resource Files</Filter> |
||||||
|
</ResourceCompile> |
||||||
|
</ItemGroup> |
||||||
|
<ItemGroup> |
||||||
|
<ClCompile Include="dllmain.c"> |
||||||
|
<Filter>Source Files</Filter> |
||||||
|
</ClCompile> |
||||||
|
</ItemGroup> |
||||||
|
</Project> |
||||||
@ -0,0 +1,467 @@ |
|||||||
|
#include <initguid.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdbool.h> |
||||||
|
#include <Windows.h> |
||||||
|
#include <funchook.h> |
||||||
|
#pragma comment(lib, "Psapi.lib") // required by funchook
|
||||||
|
#include <Shlwapi.h> |
||||||
|
#pragma comment(lib, "Shlwapi.lib") |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
funchook_t* funchook = NULL; |
||||||
|
HMODULE hModule = NULL; |
||||||
|
HWND messageWindow = NULL; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static HWND(WINAPI* CreateWindowInBand)( |
||||||
|
_In_ DWORD dwExStyle, |
||||||
|
_In_opt_ ATOM atom, |
||||||
|
_In_opt_ LPCWSTR lpWindowName, |
||||||
|
_In_ DWORD dwStyle, |
||||||
|
_In_ int X, |
||||||
|
_In_ int Y, |
||||||
|
_In_ int nWidth, |
||||||
|
_In_ int nHeight, |
||||||
|
_In_opt_ HWND hWndParent, |
||||||
|
_In_opt_ HMENU hMenu, |
||||||
|
_In_opt_ HINSTANCE hInstance, |
||||||
|
_In_opt_ LPVOID lpParam, |
||||||
|
DWORD band |
||||||
|
); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static INT64(*CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc)( |
||||||
|
void* _this, |
||||||
|
POINT* pt |
||||||
|
); |
||||||
|
|
||||||
|
static void(*CLauncherTipContextMenu_ExecuteCommand)( |
||||||
|
void* _this, |
||||||
|
int a2 |
||||||
|
); |
||||||
|
|
||||||
|
static void(*CLauncherTipContextMenu_ExecuteShutdownCommand)( |
||||||
|
void* _this, |
||||||
|
void* a2 |
||||||
|
); |
||||||
|
|
||||||
|
static INT64(*InternalAddRef)( |
||||||
|
void* a1, |
||||||
|
INT64 a2 |
||||||
|
); |
||||||
|
|
||||||
|
static INT64(*ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu)( |
||||||
|
HMENU h1, |
||||||
|
HMENU h2, |
||||||
|
HWND a3, |
||||||
|
unsigned int a4, |
||||||
|
void* data |
||||||
|
); |
||||||
|
|
||||||
|
static INT64(*CLauncherTipContextMenu_GetMenuItemsAsync)( |
||||||
|
void* _this, |
||||||
|
void* rect, |
||||||
|
void** iunk |
||||||
|
); |
||||||
|
|
||||||
|
DEFINE_GUID(IID_ILauncherTipContextMenu, |
||||||
|
0xb8c1db5f, |
||||||
|
0xcbb3, 0x48bc, 0xaf, 0xd9, |
||||||
|
0xce, 0x6b, 0x88, 0x0c, 0x79, 0xed |
||||||
|
); |
||||||
|
|
||||||
|
#define CLASS_NAME L"LauncherTipWnd" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static HRESULT(*CImmersiveHotkeyNotification_OnMessageFunc)( |
||||||
|
void* _this, |
||||||
|
INT64 msg, |
||||||
|
INT wParam, |
||||||
|
INT64 lParam |
||||||
|
); |
||||||
|
|
||||||
|
static INT64(*CImmersiveHotkeyNotification_GetMonitorForHotkeyNotificationFunc)( |
||||||
|
void* _this, |
||||||
|
void** a2, |
||||||
|
HWND* a3 |
||||||
|
); |
||||||
|
|
||||||
|
static BOOL(*IsDesktopInputContextFunc)( |
||||||
|
void* p1, |
||||||
|
void* p2 |
||||||
|
); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HANDLE hThread; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
void* _this; |
||||||
|
POINT point; |
||||||
|
IUnknown* iunk; |
||||||
|
} ShowLauncherTipContextMenuParameters; |
||||||
|
|
||||||
|
DWORD ShowLauncherTipContextMenu( |
||||||
|
ShowLauncherTipContextMenuParameters* params |
||||||
|
) |
||||||
|
{ |
||||||
|
WNDCLASS wc = { 0 }; |
||||||
|
wc.style = CS_DBLCLKS; |
||||||
|
wc.lpfnWndProc = DefWindowProc; // CLauncherTipContextMenu_WndProc
|
||||||
|
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); |
||||||
|
wc.hInstance = GetModuleHandle(NULL); |
||||||
|
wc.lpszClassName = CLASS_NAME; |
||||||
|
wc.hCursor = LoadCursorW(NULL, IDC_ARROW); |
||||||
|
RegisterClass(&wc); |
||||||
|
|
||||||
|
HWND hWnd = CreateWindowInBand( |
||||||
|
0, |
||||||
|
CLASS_NAME, |
||||||
|
0, |
||||||
|
WS_POPUP, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
0, |
||||||
|
GetModuleHandle(NULL), |
||||||
|
params->_this, |
||||||
|
7 |
||||||
|
); |
||||||
|
ShowWindow(hWnd, SW_SHOW); |
||||||
|
SetForegroundWindow(hWnd); |
||||||
|
|
||||||
|
while (!(*((HMENU*)((char*)params->_this + 0xe8)))) |
||||||
|
{ |
||||||
|
Sleep(1); |
||||||
|
} |
||||||
|
if (!(*((HMENU*)((char*)params->_this + 0xe8)))) |
||||||
|
{ |
||||||
|
goto finalize; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
void* v25 = 0; |
||||||
|
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu( |
||||||
|
*((HMENU*)((char*)params->_this + 0xe8)), |
||||||
|
hWnd, |
||||||
|
&(params->point), |
||||||
|
0xc, |
||||||
|
&v25 |
||||||
|
); |
||||||
|
*/ |
||||||
|
|
||||||
|
BOOL res = TrackPopupMenu( |
||||||
|
*((HMENU*)((char*)params->_this + 0xe8)), |
||||||
|
TPM_RETURNCMD, |
||||||
|
params->point.x, |
||||||
|
params->point.y, |
||||||
|
0, |
||||||
|
hWnd, |
||||||
|
0 |
||||||
|
); |
||||||
|
if (res > 0) |
||||||
|
{ |
||||||
|
if (res < 4000) |
||||||
|
{ |
||||||
|
INT64 info = *(INT64*)((char*)(*(INT64*)((char*)params->_this + 0xa8 - 0x58)) + (INT64)res * 8 - 8); |
||||||
|
CLauncherTipContextMenu_ExecuteCommand( |
||||||
|
(char*)params->_this - 0x58, |
||||||
|
&info |
||||||
|
); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
INT64 info = *(INT64*)((char*)(*(INT64*)((char*)params->_this + 0xc8 - 0x58)) + ((INT64)res - 4000) * 8); |
||||||
|
CLauncherTipContextMenu_ExecuteShutdownCommand( |
||||||
|
(char*)params->_this - 0x58, |
||||||
|
&info |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenu
|
||||||
|
|
||||||
|
finalize: |
||||||
|
params->iunk->lpVtbl->Release(params->iunk); |
||||||
|
SendMessage( |
||||||
|
hWnd, |
||||||
|
WM_CLOSE, |
||||||
|
0, |
||||||
|
0 |
||||||
|
); |
||||||
|
free(params); |
||||||
|
hThread = NULL; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
INT64 CLauncherTipContextMenu_ShowLauncherTipContextMenuHook( |
||||||
|
void* _this, |
||||||
|
POINT* pt |
||||||
|
) |
||||||
|
{ |
||||||
|
if (hThread) |
||||||
|
{ |
||||||
|
goto finalize; |
||||||
|
} |
||||||
|
|
||||||
|
POINT point; |
||||||
|
if (pt) |
||||||
|
{ |
||||||
|
point = *pt; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
POINT ptCursor; |
||||||
|
GetCursorPos(&ptCursor); |
||||||
|
MONITORINFO mi; |
||||||
|
mi.cbSize = sizeof(MONITORINFO); |
||||||
|
GetMonitorInfo( |
||||||
|
MonitorFromPoint( |
||||||
|
ptCursor, |
||||||
|
MONITOR_DEFAULTTONEAREST |
||||||
|
), |
||||||
|
&mi |
||||||
|
); |
||||||
|
// https://stackoverflow.com/questions/44746234/programatically-get-windows-taskbar-info-autohidden-state-taskbar-coordinates
|
||||||
|
APPBARDATA abd; |
||||||
|
abd.cbSize = sizeof(APPBARDATA); |
||||||
|
SHAppBarMessage(ABM_GETTASKBARPOS, &abd); |
||||||
|
if (abd.rc.left < 5 && abd.rc.top > 5) |
||||||
|
{ |
||||||
|
// TB_POS_BOTTOM
|
||||||
|
point.x = mi.rcMonitor.left; |
||||||
|
point.y = mi.rcMonitor.bottom; |
||||||
|
} |
||||||
|
else if (abd.rc.left < 5 && abd.rc.top < 5 && abd.rc.right > abd.rc.bottom) |
||||||
|
{ |
||||||
|
// TB_POS_TOP
|
||||||
|
point.x = mi.rcMonitor.left; |
||||||
|
point.y = mi.rcMonitor.top; |
||||||
|
} |
||||||
|
else if (abd.rc.left < 5 && abd.rc.top < 5 && abd.rc.right < abd.rc.bottom) |
||||||
|
{ |
||||||
|
// TB_POS_LEFT
|
||||||
|
point.x = mi.rcMonitor.left; |
||||||
|
point.y = mi.rcMonitor.top; |
||||||
|
} |
||||||
|
else if (abd.rc.left > 5 && abd.rc.top < 5) |
||||||
|
{ |
||||||
|
// TB_POS_RIGHT
|
||||||
|
point.x = mi.rcMonitor.right; |
||||||
|
point.y = mi.rcMonitor.top; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
IUnknown* iunk; |
||||||
|
INT64 r = CLauncherTipContextMenu_GetMenuItemsAsync( |
||||||
|
_this, |
||||||
|
&point, |
||||||
|
&iunk |
||||||
|
); |
||||||
|
iunk->lpVtbl->AddRef(iunk); |
||||||
|
|
||||||
|
ShowLauncherTipContextMenuParameters* params = malloc( |
||||||
|
sizeof(ShowLauncherTipContextMenuParameters) |
||||||
|
); |
||||||
|
params->_this = _this; |
||||||
|
params->point = point; |
||||||
|
params->iunk = iunk; |
||||||
|
hThread = CreateThread( |
||||||
|
0, |
||||||
|
0, |
||||||
|
ShowLauncherTipContextMenu, |
||||||
|
params, |
||||||
|
0, |
||||||
|
0 |
||||||
|
); |
||||||
|
|
||||||
|
finalize: |
||||||
|
return CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc(_this, pt); |
||||||
|
} |
||||||
|
|
||||||
|
HRESULT CImmersiveHotkeyNotification_OnMessageHook( |
||||||
|
void* _this, |
||||||
|
INT64 msg, |
||||||
|
INT wParam, |
||||||
|
INT64 lParam |
||||||
|
) |
||||||
|
{ |
||||||
|
if (wParam == 28 && IsDesktopInputContextFunc(_this, msg)) // 15
|
||||||
|
{ |
||||||
|
IUnknown* pMonitor; |
||||||
|
HRESULT hr = CImmersiveHotkeyNotification_GetMonitorForHotkeyNotificationFunc( |
||||||
|
(char*)_this - 0x68, |
||||||
|
&pMonitor, |
||||||
|
0 |
||||||
|
); |
||||||
|
if (SUCCEEDED(hr)) |
||||||
|
{ |
||||||
|
IUnknown* pMenu; |
||||||
|
IUnknown_QueryService( |
||||||
|
pMonitor, |
||||||
|
&IID_ILauncherTipContextMenu, |
||||||
|
&IID_ILauncherTipContextMenu, |
||||||
|
&pMenu |
||||||
|
); |
||||||
|
if (pMenu) |
||||||
|
{ |
||||||
|
CLauncherTipContextMenu_ShowLauncherTipContextMenuHook( |
||||||
|
pMenu, |
||||||
|
0 |
||||||
|
); |
||||||
|
pMenu->lpVtbl->Release(pMenu); |
||||||
|
} |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
return CImmersiveHotkeyNotification_OnMessageFunc( |
||||||
|
_this, |
||||||
|
msg, |
||||||
|
wParam, |
||||||
|
lParam |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
__declspec(dllexport) DWORD WINAPI main( |
||||||
|
_In_ LPVOID lpParameter |
||||||
|
) |
||||||
|
{ |
||||||
|
/*
|
||||||
|
FILE* conout; |
||||||
|
AllocConsole(); |
||||||
|
freopen_s(&conout, "CONOUT$", "w", stdout); |
||||||
|
*/ |
||||||
|
|
||||||
|
int rv; |
||||||
|
if (!funchook) |
||||||
|
{ |
||||||
|
messageWindow = (HWND)lpParameter; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
funchook = funchook_create(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HANDLE hUser32 = GetModuleHandle(L"user32.dll"); |
||||||
|
|
||||||
|
if (hUser32) CreateWindowInBand = GetProcAddress(hUser32, "CreateWindowInBand"); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HANDLE hTwinuiPcshell = GetModuleHandle(L"twinui.pcshell.dll"); |
||||||
|
|
||||||
|
InternalAddRef = (INT64(*)(void*, INT64)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x46650); |
||||||
|
|
||||||
|
CLauncherTipContextMenu_GetMenuItemsAsync = (INT64(*)(void*, void*, void**)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x5051F0); |
||||||
|
|
||||||
|
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu = (INT64(*)(HMENU, HMENU, HWND, unsigned int, void*)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x535AF8); |
||||||
|
|
||||||
|
CLauncherTipContextMenu_ExecuteShutdownCommand = (void(*)(void*, void*)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x514714); |
||||||
|
|
||||||
|
CLauncherTipContextMenu_ExecuteCommand = (void(*)(void*, int)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x5143D0); |
||||||
|
|
||||||
|
CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc = (INT64(*)(void*, POINT*)) |
||||||
|
((uintptr_t)hTwinuiPcshell + 0x506EE0); |
||||||
|
rv = funchook_prepare( |
||||||
|
funchook, |
||||||
|
(void**)&CLauncherTipContextMenu_ShowLauncherTipContextMenuFunc, |
||||||
|
CLauncherTipContextMenu_ShowLauncherTipContextMenuHook |
||||||
|
); |
||||||
|
if (rv != 0) |
||||||
|
{ |
||||||
|
FreeLibraryAndExitThread(hModule, rv); |
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HANDLE hTwinui = GetModuleHandle(L"twinui.dll"); |
||||||
|
|
||||||
|
CImmersiveHotkeyNotification_GetMonitorForHotkeyNotificationFunc = (INT64(*)(void*, void**, HWND*)) |
||||||
|
((uintptr_t)hTwinui + 0x24B4A8); |
||||||
|
|
||||||
|
IsDesktopInputContextFunc = (BOOL(*)(void*, void*)) |
||||||
|
((uintptr_t)hTwinui + 0x24A5C4); |
||||||
|
|
||||||
|
CImmersiveHotkeyNotification_OnMessageFunc = (HRESULT(*)(void*, INT64, INT, INT64)) |
||||||
|
((uintptr_t)hTwinui + 0xB2A70); |
||||||
|
rv = funchook_prepare( |
||||||
|
funchook, |
||||||
|
(void**)&CImmersiveHotkeyNotification_OnMessageFunc, |
||||||
|
CImmersiveHotkeyNotification_OnMessageHook |
||||||
|
); |
||||||
|
if (rv != 0) |
||||||
|
{ |
||||||
|
FreeLibraryAndExitThread(hModule, rv); |
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rv = funchook_install(funchook, 0); |
||||||
|
if (rv != 0) |
||||||
|
{ |
||||||
|
FreeLibraryAndExitThread(hModule, rv); |
||||||
|
return rv; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
rv = funchook_uninstall(funchook, 0); |
||||||
|
if (rv != 0) |
||||||
|
{ |
||||||
|
FreeLibraryAndExitThread(hModule, rv); |
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
rv = funchook_destroy(funchook); |
||||||
|
if (rv != 0) |
||||||
|
{ |
||||||
|
FreeLibraryAndExitThread(hModule, rv); |
||||||
|
return rv; |
||||||
|
} |
||||||
|
|
||||||
|
FreeLibraryAndExitThread(hModule, 0); |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
BOOL WINAPI DllMain( |
||||||
|
_In_ HINSTANCE hinstDLL, |
||||||
|
_In_ DWORD fdwReason, |
||||||
|
_In_ LPVOID lpvReserved |
||||||
|
) |
||||||
|
{ |
||||||
|
switch (fdwReason) |
||||||
|
{ |
||||||
|
case DLL_PROCESS_ATTACH: |
||||||
|
DisableThreadLibraryCalls(hinstDLL); |
||||||
|
hModule = hinstDLL; |
||||||
|
break; |
||||||
|
case DLL_THREAD_ATTACH: |
||||||
|
break; |
||||||
|
case DLL_THREAD_DETACH: |
||||||
|
break; |
||||||
|
case DLL_PROCESS_DETACH: |
||||||
|
break; |
||||||
|
} |
||||||
|
return TRUE; |
||||||
|
} |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by ExplorerPatcherLibrary.rc
|
||||||
|
//
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS |
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101 |
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001 |
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001 |
||||||
|
#define _APS_NEXT_SYMED_VALUE 101 |
||||||
|
#endif |
||||||
|
#endif |
||||||
Loading…
Reference in new issue