gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:22:08 26 4
gpt4 key购买 nike

我见过一些软件可以检测表单是否对用户可见。这可能包括最小化、另一个屏幕覆盖它、关闭显示器,甚至在远程桌面上时也知道远程桌面 View 何时不可见。我猜这与应用程序中是否绘制任何内容有关。也许视频驱动程序可以提供此信息?

我怎样才能让我的应用程序检测到这一点?我可以监控 Windows 消息吗?

郑重声明,上述软件可以实时流式传输多个监控摄像头 (RTSP),该软件利用这种功能在屏幕不可见时暂停流式传输。

最佳答案

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

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

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

使用MonitorFromWindow()GetDevicePowerState()检测本地显示器的电源状态。您还可以捕捉WM_SYSCOMMAND寻找 SC_MONITORPOWER 通知的消息。

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

关于delphi - 如何知道我的应用程序是否可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19826256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com