Browse Source

Fixes #1 (the menu is now skinned) (v22000.1.0.2)

pull/20/head 22000.1.0.2
Valentin Radu 5 years ago
parent
commit
256008981f
  1. 8
      ExplorerPatcher/ExplorerPatcher.rc
  2. 3
      ExplorerPatcher/main.c
  3. 8
      ExplorerPatcherLibrary/ExplorerPatcherLibrary.rc
  4. 138
      ExplorerPatcherLibrary/dllmain.c

8
ExplorerPatcher/ExplorerPatcher.rc

@ -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"

3
ExplorerPatcher/main.c

@ -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

8
ExplorerPatcherLibrary/ExplorerPatcherLibrary.rc

@ -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"

138
ExplorerPatcherLibrary/dllmain.c

@ -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);
@ -370,6 +479,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…
Cancel
Save