#include "precompile.h" #include #include #pragma data_seg("HookShared") HHOOK g_hCBT = NULL; HHOOK g_hShell = NULL; #pragma data_seg() #pragma comment(linker, "/SECTION:HookShared,RWS") LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { TCHAR szWindowText[1024] = { 0 }; TCHAR szClassName[1024] = { 0 }; ::GetWindowText((HWND)wParam, szWindowText, sizeof(szWindowText) / sizeof(szWindowText[0])); ::GetClassName((HWND)wParam, szClassName, sizeof(szClassName) / sizeof(szClassName[0])); //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("[CBTProc] code: %d, wParam: %d, lParam: %d, class: %s, text: %s", nCode, wParam, lParam, szClassName, szWindowText); if (_tcsicmp(szWindowText, TEXT("Charm Bar")) == 0) { if (nCode == HCBT_ACTIVATE) ShowWindow((HWND)wParam, SW_HIDE); return 1; } if (_tcsicmp(szClassName, TEXT("ModeInputWnd")) == 0 || _tcsicmp(szClassName, TEXT("NativeHWNDHost")) == 0 || _tcsicmp(szClassName, TEXT("ApplicationManager_DesktopShellWindow")) == 0 || _tcsicmp(szClassName, TEXT("ImmersiveLauncher")) == 0) /*|| _tcsicmp(szClassName, TEXT("TaskListThumbnailWnd")) == 0 || _tcsicmp(szClassName, TEXT("LauncherTipWndClass")) == 0 || _tcsicmp(szClassName, TEXT("SearchPane")) == 0 || _tcsicmp(szClassName, TEXT("Touch Tooltip Window")) == 0 || _tcsicmp(szClassName, TEXT("Windows.UI.Core.CoreWindow")) == 0 || _tcsicmp(szClassName, TEXT("Immersive Chrome Container")) == 0 || _tcsicmp(szClassName, TEXT("ImmersiveBackgroundWindow")) == 0 || _tcsicmp(szClassName, TEXT("Frame Tab")) == 0 || _tcsicmp(szClassName, TEXT("Snapped Desktop")) == 0 || _tcsicmp(szClassName, TEXT("MetroGhostWindow")) == 0 || _tcsicmp(szClassName, TEXT("Shell_Dim")) == 0 || _tcsicmp(szClassName, TEXT("Shell_Dialog")) == 0 || _tcsicmp(szClassName, TEXT("EdgeUiInputWndClass")) == 0)*/ { return 1; } return CallNextHookEx(g_hCBT, nCode, wParam, lParam); } LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam) { TCHAR szWindowText[1024] = { 0 }; TCHAR szClassName[1024] = { 0 }; ::GetWindowText((HWND)wParam, szWindowText, sizeof(szWindowText) / sizeof(szWindowText[0])); ::GetClassName((HWND)wParam, szClassName, sizeof(szClassName) / sizeof(szClassName[0])); //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("[ShellProc] code: %d, wParam: %d, lParam: %d, class: %s, text: %s", nCode, wParam, lParam, szClassName, szWindowText); if (nCode == HSHELL_WINDOWCREATED) { if (_tcsicmp(szWindowText, TEXT("Charm Bar")) == 0) { ShowWindow((HWND)wParam, SW_HIDE); return 1; } } return CallNextHookEx(g_hShell, nCode, wParam, lParam); } __declspec(dllexport) bool DisableCharmbar() { if (g_hCBT == NULL) { auto hModule = GetModuleHandle("Spbase"); g_hCBT = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, hModule, 0); g_hShell = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, hModule, 0); } return g_hCBT != NULL && g_hShell != NULL; } __declspec(dllexport) bool EnableCharmbar() { if (g_hCBT != NULL) { UnhookWindowsHookEx(g_hCBT); g_hCBT = NULL; } if (g_hShell != NULL) { UnhookWindowsHookEx(g_hShell); g_hShell = NULL; } return true; }