123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include "precompile.h"
- #include <tchar.h>
- #include <SpBase.h>
- #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;
- }
|