mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-28 01:10:55 +01:00
Fixes #1 (the menu is now skinned) (v22000.1.0.2)
This commit is contained in:
parent
c2fa263b11
commit
256008981f
@ -51,8 +51,8 @@ END
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 22000,1,0,1
|
FILEVERSION 22000,1,0,2
|
||||||
PRODUCTVERSION 22000,1,0,1
|
PRODUCTVERSION 22000,1,0,2
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -69,12 +69,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "VALINET Solutions SRL"
|
VALUE "CompanyName", "VALINET Solutions SRL"
|
||||||
VALUE "FileDescription", "ExplorerPatcher Daemon"
|
VALUE "FileDescription", "ExplorerPatcher Daemon"
|
||||||
VALUE "FileVersion", "22000.1.0.1"
|
VALUE "FileVersion", "22000.1.0.2"
|
||||||
VALUE "InternalName", "ExplorerPatcher.exe"
|
VALUE "InternalName", "ExplorerPatcher.exe"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
|
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
|
||||||
VALUE "OriginalFilename", "ExplorerPatcher.exe"
|
VALUE "OriginalFilename", "ExplorerPatcher.exe"
|
||||||
VALUE "ProductName", "ExplorerPatcher"
|
VALUE "ProductName", "ExplorerPatcher"
|
||||||
VALUE "ProductVersion", "22000.1.0.1"
|
VALUE "ProductVersion", "22000.1.0.2"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
@ -9,6 +9,9 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
|||||||
#include <Shlwapi.h>
|
#include <Shlwapi.h>
|
||||||
#pragma comment(lib, "Shlwapi.lib")
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
#undef DEBUG
|
||||||
|
|
||||||
#define CLASS_NAME TEXT("ExplorerPatcher")
|
#define CLASS_NAME TEXT("ExplorerPatcher")
|
||||||
#define APP_NAME TEXT("Windows Explorer")
|
#define APP_NAME TEXT("Windows Explorer")
|
||||||
#define NOP 0x90
|
#define NOP 0x90
|
||||||
|
@ -51,8 +51,8 @@ END
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 22000,1,0,1
|
FILEVERSION 22000,1,0,2
|
||||||
PRODUCTVERSION 22000,1,0,1
|
PRODUCTVERSION 22000,1,0,2
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -69,12 +69,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "VALINET Solutions SRL"
|
VALUE "CompanyName", "VALINET Solutions SRL"
|
||||||
VALUE "FileDescription", "ExplorerPatcher Library"
|
VALUE "FileDescription", "ExplorerPatcher Library"
|
||||||
VALUE "FileVersion", "22000.1.0.1"
|
VALUE "FileVersion", "22000.1.0.2"
|
||||||
VALUE "InternalName", "ExplorerPatcherLibrary.dll"
|
VALUE "InternalName", "ExplorerPatcherLibrary.dll"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
|
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
|
||||||
VALUE "OriginalFilename", "ExplorerPatcherLibrary.dll"
|
VALUE "OriginalFilename", "ExplorerPatcherLibrary.dll"
|
||||||
VALUE "ProductName", "WinOverview"
|
VALUE "ProductName", "WinOverview"
|
||||||
VALUE "ProductVersion", "22000.1.0.1"
|
VALUE "ProductVersion", "22000.1.0.2"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
@ -6,8 +6,11 @@
|
|||||||
#pragma comment(lib, "Psapi.lib") // required by funchook
|
#pragma comment(lib, "Psapi.lib") // required by funchook
|
||||||
#include <Shlwapi.h>
|
#include <Shlwapi.h>
|
||||||
#pragma comment(lib, "Shlwapi.lib")
|
#pragma comment(lib, "Shlwapi.lib")
|
||||||
|
#include <dwmapi.h>
|
||||||
|
#pragma comment(lib, "Dwmapi.lib")
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
#undef DEBUG
|
||||||
|
|
||||||
funchook_t* funchook = NULL;
|
funchook_t* funchook = NULL;
|
||||||
HMODULE hModule = NULL;
|
HMODULE hModule = NULL;
|
||||||
@ -61,12 +64,26 @@ static INT64(*ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu)(
|
|||||||
void* data
|
void* data
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static void(*ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenu)(
|
||||||
|
HMENU _this,
|
||||||
|
HMENU hWnd,
|
||||||
|
HWND a3
|
||||||
|
);
|
||||||
|
|
||||||
static INT64(*CLauncherTipContextMenu_GetMenuItemsAsync)(
|
static INT64(*CLauncherTipContextMenu_GetMenuItemsAsync)(
|
||||||
void* _this,
|
void* _this,
|
||||||
void* rect,
|
void* rect,
|
||||||
void** iunk
|
void** iunk
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static INT64(*CImmersiveContextMenuOwnerDrawHelper_s_ContextMenuWndProc)(
|
||||||
|
HWND hWnd,
|
||||||
|
int a2,
|
||||||
|
HWND a3,
|
||||||
|
int a4,
|
||||||
|
BOOL* a5
|
||||||
|
);
|
||||||
|
|
||||||
DEFINE_GUID(IID_ILauncherTipContextMenu,
|
DEFINE_GUID(IID_ILauncherTipContextMenu,
|
||||||
0xb8c1db5f,
|
0xb8c1db5f,
|
||||||
0xcbb3, 0x48bc, 0xaf, 0xd9,
|
0xcbb3, 0x48bc, 0xaf, 0xd9,
|
||||||
@ -102,6 +119,87 @@ static BOOL(*IsDesktopInputContextFunc)(
|
|||||||
|
|
||||||
HANDLE hThread;
|
HANDLE hThread;
|
||||||
|
|
||||||
|
LRESULT CALLBACK CLauncherTipContextMenu_WndProc(
|
||||||
|
_In_ HWND hWnd,
|
||||||
|
_In_ UINT uMsg,
|
||||||
|
_In_ WPARAM wParam,
|
||||||
|
_In_ LPARAM lParam
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LRESULT result;
|
||||||
|
|
||||||
|
if (uMsg == WM_NCCREATE)
|
||||||
|
{
|
||||||
|
CREATESTRUCT* pCs = lParam;
|
||||||
|
if (pCs->lpCreateParams)
|
||||||
|
{
|
||||||
|
*((HWND*)((char*)pCs->lpCreateParams + 0x78)) = hWnd;
|
||||||
|
SetWindowLongPtr(
|
||||||
|
hWnd,
|
||||||
|
GWLP_USERDATA,
|
||||||
|
pCs->lpCreateParams
|
||||||
|
);
|
||||||
|
result = DefWindowProc(
|
||||||
|
hWnd,
|
||||||
|
uMsg,
|
||||||
|
wParam,
|
||||||
|
lParam
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
void* _this = GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
|
if (_this)
|
||||||
|
{
|
||||||
|
BOOL v12 = FALSE;
|
||||||
|
if ((uMsg == WM_DRAWITEM || uMsg == WM_MEASUREITEM) &&
|
||||||
|
CImmersiveContextMenuOwnerDrawHelper_s_ContextMenuWndProc(
|
||||||
|
hWnd,
|
||||||
|
uMsg,
|
||||||
|
wParam,
|
||||||
|
lParam,
|
||||||
|
&v12
|
||||||
|
))
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = DefWindowProc(
|
||||||
|
hWnd,
|
||||||
|
uMsg,
|
||||||
|
wParam,
|
||||||
|
lParam
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (uMsg == WM_NCDESTROY)
|
||||||
|
{
|
||||||
|
SetWindowLongPtrW(
|
||||||
|
hWnd,
|
||||||
|
GWLP_USERDATA,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
*((HWND*)((char*)_this + 0x78)) = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = DefWindowProc(
|
||||||
|
hWnd,
|
||||||
|
uMsg,
|
||||||
|
wParam,
|
||||||
|
lParam
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
void* _this;
|
void* _this;
|
||||||
@ -115,7 +213,7 @@ DWORD ShowLauncherTipContextMenu(
|
|||||||
{
|
{
|
||||||
WNDCLASS wc = { 0 };
|
WNDCLASS wc = { 0 };
|
||||||
wc.style = CS_DBLCLKS;
|
wc.style = CS_DBLCLKS;
|
||||||
wc.lpfnWndProc = DefWindowProc; // CLauncherTipContextMenu_WndProc
|
wc.lpfnWndProc = CLauncherTipContextMenu_WndProc;
|
||||||
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
|
||||||
wc.hInstance = GetModuleHandle(NULL);
|
wc.hInstance = GetModuleHandle(NULL);
|
||||||
wc.lpszClassName = CLASS_NAME;
|
wc.lpszClassName = CLASS_NAME;
|
||||||
@ -134,7 +232,7 @@ DWORD ShowLauncherTipContextMenu(
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
GetModuleHandle(NULL),
|
GetModuleHandle(NULL),
|
||||||
params->_this,
|
(char*)params->_this - 0x58,
|
||||||
7
|
7
|
||||||
);
|
);
|
||||||
ShowWindow(hWnd, SW_SHOW);
|
ShowWindow(hWnd, SW_SHOW);
|
||||||
@ -149,16 +247,14 @@ DWORD ShowLauncherTipContextMenu(
|
|||||||
goto finalize;
|
goto finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
INT64* unknown_array = calloc(4, sizeof(INT64));
|
||||||
void* v25 = 0;
|
|
||||||
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu(
|
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu(
|
||||||
*((HMENU*)((char*)params->_this + 0xe8)),
|
*((HMENU*)((char*)params->_this + 0xe8)),
|
||||||
hWnd,
|
hWnd,
|
||||||
&(params->point),
|
&(params->point),
|
||||||
0xc,
|
0xc,
|
||||||
&v25
|
unknown_array
|
||||||
);
|
);
|
||||||
*/
|
|
||||||
|
|
||||||
BOOL res = TrackPopupMenu(
|
BOOL res = TrackPopupMenu(
|
||||||
*((HMENU*)((char*)params->_this + 0xe8)),
|
*((HMENU*)((char*)params->_this + 0xe8)),
|
||||||
@ -169,6 +265,14 @@ DWORD ShowLauncherTipContextMenu(
|
|||||||
hWnd,
|
hWnd,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenu(
|
||||||
|
*((HMENU*)((char*)params->_this + 0xe8)),
|
||||||
|
hWnd,
|
||||||
|
&(params->point)
|
||||||
|
);
|
||||||
|
free(unknown_array);
|
||||||
|
|
||||||
if (res > 0)
|
if (res > 0)
|
||||||
{
|
{
|
||||||
if (res < 4000)
|
if (res < 4000)
|
||||||
@ -189,8 +293,6 @@ DWORD ShowLauncherTipContextMenu(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenu
|
|
||||||
|
|
||||||
finalize:
|
finalize:
|
||||||
params->iunk->lpVtbl->Release(params->iunk);
|
params->iunk->lpVtbl->Release(params->iunk);
|
||||||
SendMessage(
|
SendMessage(
|
||||||
@ -337,11 +439,16 @@ __declspec(dllexport) DWORD WINAPI main(
|
|||||||
_In_ LPVOID lpParameter
|
_In_ LPVOID lpParameter
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
/*
|
#ifdef DEBUG
|
||||||
FILE* conout;
|
FILE* conout;
|
||||||
AllocConsole();
|
AllocConsole();
|
||||||
freopen_s(&conout, "CONOUT$", "w", stdout);
|
freopen_s(
|
||||||
*/
|
&conout,
|
||||||
|
"CONOUT$",
|
||||||
|
"w",
|
||||||
|
stdout
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
int rv;
|
int rv;
|
||||||
if (!funchook)
|
if (!funchook)
|
||||||
@ -349,7 +456,6 @@ __declspec(dllexport) DWORD WINAPI main(
|
|||||||
messageWindow = (HWND)lpParameter;
|
messageWindow = (HWND)lpParameter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
funchook = funchook_create();
|
funchook = funchook_create();
|
||||||
|
|
||||||
|
|
||||||
@ -362,6 +468,9 @@ __declspec(dllexport) DWORD WINAPI main(
|
|||||||
|
|
||||||
HANDLE hTwinuiPcshell = GetModuleHandle(L"twinui.pcshell.dll");
|
HANDLE hTwinuiPcshell = GetModuleHandle(L"twinui.pcshell.dll");
|
||||||
|
|
||||||
|
CImmersiveContextMenuOwnerDrawHelper_s_ContextMenuWndProc = (INT64(*)(HWND, int, HWND, int, BOOL*))
|
||||||
|
((uintptr_t)hTwinuiPcshell + 0xB0E12);
|
||||||
|
|
||||||
InternalAddRef = (INT64(*)(void*, INT64))
|
InternalAddRef = (INT64(*)(void*, INT64))
|
||||||
((uintptr_t)hTwinuiPcshell + 0x46650);
|
((uintptr_t)hTwinuiPcshell + 0x46650);
|
||||||
|
|
||||||
@ -371,6 +480,9 @@ __declspec(dllexport) DWORD WINAPI main(
|
|||||||
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu = (INT64(*)(HMENU, HMENU, HWND, unsigned int, void*))
|
ImmersiveContextMenuHelper_ApplyOwnerDrawToMenu = (INT64(*)(HMENU, HMENU, HWND, unsigned int, void*))
|
||||||
((uintptr_t)hTwinuiPcshell + 0x535AF8);
|
((uintptr_t)hTwinuiPcshell + 0x535AF8);
|
||||||
|
|
||||||
|
ImmersiveContextMenuHelper_RemoveOwnerDrawFromMenu = (void(*)(HMENU, HMENU, HWND))
|
||||||
|
((uintptr_t)hTwinuiPcshell + 0x536300);
|
||||||
|
|
||||||
CLauncherTipContextMenu_ExecuteShutdownCommand = (void(*)(void*, void*))
|
CLauncherTipContextMenu_ExecuteShutdownCommand = (void(*)(void*, void*))
|
||||||
((uintptr_t)hTwinuiPcshell + 0x514714);
|
((uintptr_t)hTwinuiPcshell + 0x514714);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user