加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何知道我的应用程序是否可见?

发布时间:2020-12-15 09:34:46 所属栏目:大数据 来源:网络整理
导读:我见过一些可以检测表单是否对用户可见的软件.这可能包括最小化,另一个屏幕覆盖,监视器关闭,甚至在远程桌面上,知道远程桌面视图何时不可见.我猜它与是否在应用程序中绘制任何内容有关.也许视频驱动程序可以提供此信息? 如何让我的应用程序检测到这个?是否
我见过一些可以检测表单是否对用户可见的软件.这可能包括最小化,另一个屏幕覆盖,监视器关闭,甚至在远程桌面上,知道远程桌面视图何时不可见.我猜它与是否在应用程序中绘制任何内容有关.也许视频驱动程序可以提供此信息?

如何让我的应用程序检测到这个?是否有我可以监控的Windows消息?

为了记录,所提到的软件是实时流式传输多个监视摄像机的软件(RTSP),其使用该能力以在屏幕不可见时暂停流式传输.

解决方法

大多数条件没有与之关联的窗口消息,因此您必须手动检测条件.

使用TForm.WindowState属性或Win32 API IsIconic()函数来检测窗口的最小化状态.您还可以捕获查找SC_MINIMIZE,SC_MAXIMIZE和SC_RESTORE状态的WM_SYSCOMMAND消息.

使用Win32 API EnumWindows()函数循环遍历所有顶级窗口,在每个窗口上调用GetWindowRect(),以检测窗口的任何区域是否未被其他窗口覆盖.为了考虑z排序,您可能必须使用GetTopWindow()GetNextWindow()来迭代z顺序以查看哪个窗口位于另一个窗口的顶部.

使用MonitorFromWindow()GetDevicePowerState()检测本地监视器的电源状态.您还可以捕获WM_SYSCOMMAND消息,查找SC_MONITORPOWER通知.

检测远程桌面状态有点棘手.您可以使用ProcessIdToSessionId()WTSQuerySessionInformation(WTSIsRemoteSession)(Windows 7)或GetSystemMetrics(SM_REMOTESESSION)来确定您的应用程序是否在远程桌面会话中运行,但我认为您无法检测远程显示是否打开/关闭(尽管WTSQuerySessionInformation()可以查询远程显示器的分辨率和颜色深度,即使会话被锁定/解锁).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读