当前位置: 首页 > news >正文

让你的静态网站 做后台保定网站建设方案托管

让你的静态网站 做后台,保定网站建设方案托管,r6300v2做网站,外贸开发网站开发检测窗口是否最大化#xff08;窗口覆盖或独占全屏#xff09;兼容 Win10/11 问题描述 在 Win10/11 上有很多 UWP 进程#xff0c;检测窗口是否最大化将迎来新的挑战。这些窗口以其不能够使用 Win32 的 IsWindowVisible 获取窗口可见性为特征。此时#xff0c;必须使用 D…检测窗口是否最大化窗口覆盖或独占全屏兼容 Win10/11 问题描述 在 Win10/11 上有很多 UWP 进程检测窗口是否最大化将迎来新的挑战。这些窗口以其不能够使用 Win32 的 IsWindowVisible 获取窗口可见性为特征。此时必须使用 DWM API 来判断窗口的可见性状态。 代码实现 下面的代码实现了一个工具类检测当前桌面是否被覆盖以及覆盖窗口的信息。此代码参考 CustomDesktop 开源项目并做了预览桌面时的逃逸规则 “Singleton.h” #pragma oncenamespace cd {templateclass Tclass Singleton{protected:Singleton() default;virtual ~Singleton() default;public:static T GetInstance(){static T s_instance;return s_instance;}};#define DECL_SINGLETON(T) friend class SingletonT #define DECL_SINGLETON_DEFAULT(T) \DECL_SINGLETON(T); \private: \T() default; \~T() default }“CheckCovered.h” #pragma once #include Singleton.h #include thread #include memorynamespace cd {// 检测桌面是否被遮挡了class CheckCovered final : public SingletonCheckCovered{DECL_SINGLETON(CheckCovered);public:bool IsReady() { return m_runThreadFlag; }bool Init();bool Uninit();private:CheckCovered();~CheckCovered();std::unique_ptrstd::thread m_thread;bool m_runThreadFlag true;bool m_isCovered false;HWND m_coveredByHwnd NULL;void CheckCoveredThread();bool IsDesktopCovered();}; }“CheckCovered.cpp” #include CheckCovered.h#ifdef _WIN64 #include Dwmapi.h #endifnamespace cd {CheckCovered::CheckCovered(){Init();}CheckCovered::~CheckCovered(){Uninit();}bool CheckCovered::Init(){m_runThreadFlag true;/* 在主线程中执行函数可以用来做 dllmain 中不能完成的初始化通过自定义消息实现// MYDLL_API void WINAPI ExecInMainThread(std::functionvoid() function);CD_API void WINAPI ExecInMainThread(std::functionvoid() function){PostMessage(g_global.m_fileListWnd, WM_EXEC_FUNCTION, reinterpret_castWPARAM(new decltype(function)(std::move(function))), NULL);}*/ExecInMainThread([this]{ m_thread std::make_uniquestd::thread(CheckCovered::CheckCoveredThread, this); });return true;}bool CheckCovered::Uninit(){m_runThreadFlag false;if (m_thread ! nullptr m_thread-joinable())m_thread-join();m_thread nullptr;return true;}void CheckCovered::CheckCoveredThread(){while (m_runThreadFlag){if (IsDesktopCovered()){if (!m_isCovered){m_isCovered true;//ExecInMainThread([]{ g_desktopCoveredEvent(); });#ifdef _DEBUGWCHAR windowName[100], className[100];GetWindowTextW(m_coveredByHwnd, windowName, _countof(windowName));GetClassNameW(m_coveredByHwnd, className, _countof(className));_RPTFW2(_CRT_WARN, L桌面被 %s (%s) 遮挡\n, windowName, className); #endif}}else{if (m_isCovered){m_isCovered false;//ExecInMainThread([]{ g_desktopUncoveredEvent(); });_RPTF0(_CRT_WARN, 桌面从被遮挡恢复\n);}}for (int i 0; i 10; i){if (!m_runThreadFlag)break;Sleep(100);}}}bool CheckCovered::IsDesktopCovered(){m_coveredByHwnd NULL;// 对于 D3D 独占全屏的程序不能用 IsZoomed 判断全屏// TODO兼容多屏幕int screenWidth GetSystemMetrics(SM_CXSCREEN);int screenHeight GetSystemMetrics(SM_CYSCREEN);HWND hwnd GetForegroundWindow();if (hwnd ! GLOBAL_YOUR_WINDOW) // GLOBAL_YOUR_WINDOW 是你要检测是否被全屏幕覆盖的窗口{RECT rect;GetWindowRect(hwnd, rect);if (rect.left 0 rect.top 0 rect.right screenWidth rect.bottom screenHeight){WCHAR wsClassName[MAX_PATH] { 0 };GetClassNameW(hwnd, wsClassName, MAX_PATH);if (wcsstr(wsClassName, LLivePreview) NULL) { // 预览桌面窗口出现时恢复动画播放m_coveredByHwnd hwnd;return true;}else {m_coveredByHwnd nullptr;return false;}}}EnumWindows([](HWND hwnd, LPARAM pCoveredByHwnd)-BOOL { #ifdef _WIN64// 对于 win10 app不能用 IsWindowVisible 判断是否可见DWORD cloaked 0;DwmGetWindowAttribute(hwnd, DWMWA_CLOAKED, cloaked, sizeof(cloaked));if (cloaked ! 0)return TRUE; #endif// 有最大化的窗口而且可见则被遮挡最小化也是不可见if (IsZoomed(hwnd) IsWindowVisible(hwnd)){*(HWND*)pCoveredByHwnd hwnd;return FALSE;}return TRUE;}, (LPARAM)m_coveredByHwnd);if (m_coveredByHwnd ! nullptr) {WCHAR wsClassName[MAX_PATH] { 0 };GetClassNameW(m_coveredByHwnd, wsClassName, MAX_PATH);if (wcsstr(wsClassName, LLivePreview) NULL) { // 预览桌面窗口出现时恢复动画播放return true;}else {m_coveredByHwnd nullptr;return false;}}return false;} }这里有两个点要说一下一是此代码需要完善多桌面的情况二是此代码考虑了预览桌面时候会产生一个窗口覆盖全屏的情况LivePreview为了避免检测失效应该排除此时的覆盖情况代码中也已经初步实现了。 本文发布于2024.06.10.
http://www.hkea.cn/news/14360406/

相关文章:

  • 网站建设代理协议wordpress不显示首页登录
  • 网站式登录页面模板下载无备案网站广告如何做
  • 建网站一定要备案吗河北房地产网站建设
  • 网站建设学校网站网站文字配色
  • 关键词怎么优化到百度首页长沙财优化公司
  • c 小说网站开发教程开发一个平台
  • 家具公司网站模板下载c2c网站的特点
  • 携程旅游网站建设的定位目前做汽配的网站有哪些
  • 青岛网站推广途径wordpress卡登录页面
  • 烟台网站seo世界500强企业平均寿命
  • intitle:网站建设电子政务网站课程设计
  • 合肥专业网站制作承德网站建设电话
  • 代码做网站的软件wordpress无法登录
  • 网站建设到运营需要多少钱wordpress获取当前分类的子分类
  • 做非法网站会怎样网址大全2021
  • 做婚庆找什么网站网页制作购物网站
  • 网页设计与网站制作北京网站建设价位
  • 八师石河子精神文明建设网站没签合同网站做不好
  • wordpress链家谷歌seo文章
  • 设计方案范本百度爱采购优化
  • 小说网站如何赚钱php网站建设的安全性研究
  • 福建网站建设开发软件开发 上海
  • 网站怎么看是什么程序做的网络推广有哪些
  • 网站流量功能更怎么做如何提升关键词的自然排名
  • 合肥网站开发哪家好wordpress 聚美主题
  • 做网站网页需要什么修改wordpress标题图片
  • 电子商城网站建设 模板网站名字词
  • 网站一年多少钱wordpress 点击媒体库
  • 搬家公司网站建设价格wordpress实现语言
  • jianshe导航网站整合wordpress