PadMisc.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "precompile.h"
  2. #include <tchar.h>
  3. #include <SpBase.h>
  4. #pragma data_seg("HookShared")
  5. HHOOK g_hCBT = NULL;
  6. HHOOK g_hShell = NULL;
  7. #pragma data_seg()
  8. #pragma comment(linker, "/SECTION:HookShared,RWS")
  9. LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
  10. {
  11. TCHAR szWindowText[1024] = { 0 };
  12. TCHAR szClassName[1024] = { 0 };
  13. ::GetWindowText((HWND)wParam, szWindowText, sizeof(szWindowText) / sizeof(szWindowText[0]));
  14. ::GetClassName((HWND)wParam, szClassName, sizeof(szClassName) / sizeof(szClassName[0]));
  15. //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);
  16. if (_tcsicmp(szWindowText, TEXT("Charm Bar")) == 0)
  17. {
  18. if (nCode == HCBT_ACTIVATE)
  19. ShowWindow((HWND)wParam, SW_HIDE);
  20. return 1;
  21. }
  22. if (_tcsicmp(szClassName, TEXT("ModeInputWnd")) == 0
  23. || _tcsicmp(szClassName, TEXT("NativeHWNDHost")) == 0
  24. || _tcsicmp(szClassName, TEXT("ApplicationManager_DesktopShellWindow")) == 0
  25. || _tcsicmp(szClassName, TEXT("ImmersiveLauncher")) == 0)
  26. /*|| _tcsicmp(szClassName, TEXT("TaskListThumbnailWnd")) == 0
  27. || _tcsicmp(szClassName, TEXT("LauncherTipWndClass")) == 0
  28. || _tcsicmp(szClassName, TEXT("SearchPane")) == 0
  29. || _tcsicmp(szClassName, TEXT("Touch Tooltip Window")) == 0
  30. || _tcsicmp(szClassName, TEXT("Windows.UI.Core.CoreWindow")) == 0
  31. || _tcsicmp(szClassName, TEXT("Immersive Chrome Container")) == 0
  32. || _tcsicmp(szClassName, TEXT("ImmersiveBackgroundWindow")) == 0
  33. || _tcsicmp(szClassName, TEXT("Frame Tab")) == 0
  34. || _tcsicmp(szClassName, TEXT("Snapped Desktop")) == 0
  35. || _tcsicmp(szClassName, TEXT("MetroGhostWindow")) == 0
  36. || _tcsicmp(szClassName, TEXT("Shell_Dim")) == 0
  37. || _tcsicmp(szClassName, TEXT("Shell_Dialog")) == 0
  38. || _tcsicmp(szClassName, TEXT("EdgeUiInputWndClass")) == 0)*/
  39. {
  40. return 1;
  41. }
  42. return CallNextHookEx(g_hCBT, nCode, wParam, lParam);
  43. }
  44. LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam)
  45. {
  46. TCHAR szWindowText[1024] = { 0 };
  47. TCHAR szClassName[1024] = { 0 };
  48. ::GetWindowText((HWND)wParam, szWindowText, sizeof(szWindowText) / sizeof(szWindowText[0]));
  49. ::GetClassName((HWND)wParam, szClassName, sizeof(szClassName) / sizeof(szClassName[0]));
  50. //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);
  51. if (nCode == HSHELL_WINDOWCREATED)
  52. {
  53. if (_tcsicmp(szWindowText, TEXT("Charm Bar")) == 0)
  54. {
  55. ShowWindow((HWND)wParam, SW_HIDE);
  56. return 1;
  57. }
  58. }
  59. return CallNextHookEx(g_hShell, nCode, wParam, lParam);
  60. }
  61. __declspec(dllexport) bool DisableCharmbar()
  62. {
  63. if (g_hCBT == NULL)
  64. {
  65. auto hModule = GetModuleHandle("Spbase");
  66. g_hCBT = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, hModule, 0);
  67. g_hShell = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, hModule, 0);
  68. }
  69. return g_hCBT != NULL && g_hShell != NULL;
  70. }
  71. __declspec(dllexport) bool EnableCharmbar()
  72. {
  73. if (g_hCBT != NULL)
  74. {
  75. UnhookWindowsHookEx(g_hCBT);
  76. g_hCBT = NULL;
  77. }
  78. if (g_hShell != NULL)
  79. {
  80. UnhookWindowsHookEx(g_hShell);
  81. g_hShell = NULL;
  82. }
  83. return true;
  84. }