介绍 在本文中,我们将描述的方法来执行用户模式区域监测指定的窗口。 本文将有助于软件开发人员需要运行时监视指定窗口位置信息和该地区在Windows操作系统。 一般的描述 区域是一个矩形,多边形、椭圆(或这些形状的组合两个或两个以上),可以填补,作画,倒置,框架,用于执行测试(测试光标位置)。在一般情况下,窗口的区域的矩形集构造一个窗口的可见部分。 指定窗口的区域监控,例如,可以用于虚拟渠道发展。 虚拟通道软件扩展,可用于远程桌面服务应用程序添加功能增强。功能增强的例子可能包括支持硬件、特殊类型的音频,或其他增加提供的核心功能远程桌面服务远程桌面协议(RDP)。 要使用虚拟通道,您应该提供虚拟通道应用程序的服务器端和客户端模块。服务器端模块可以是一个用户模式应用程序或一个内核模式驱动程序。客户端模块应该是一个DLL。 客户端模块通常是mstsc插件。有时这样的应用程序需要执行一些操作窗口的区域变化。所以我们可以监视服务器窗口,对其区域客户端发送信息。在客户端,我们可以利用这些信息来获得服务器窗口的可见部分。 例如,我们需要改善视频呈现在终端会话。我们可以创造一些最优方案的数据从服务器传输到客户端并显示电影窗口在客户端而不是服务器。这种技术可以让用户在本地机器上看电影。客户端视频窗口应该画在服务器。但是如果服务器窗口部分被其他窗口,我们应该更新我们的客户窗口。 在本文中,我们目前的用户采用库运行时的信息窗口。 库描述 输入信息:处理窗口的监控,时间,观察人士举办地区和错误通知。 输出信息:RGNDATA地区数据结构、错误报告。 单独的线程开始在图书馆的核心。根据超时,它收集的信息窗口的区域并将其发送给观察者。如果我们得到一些线程的问题,我们使用NotifyZero()方法发送零区域大小。Windows地区api被用来收集这些信息(参见参考资料)。主要步骤如下所示: 设备上下文: 隐藏,复制CodeHDC hDC =: GetDC (m_window); 创建空的区域: 隐藏,复制CodeHRGN hRgn =:应用(0,0,0,0); 复制选定的窗口区域: 隐藏,复制代码::GetRandomRgn (hDC、hRgn SYSRGN); 确定数据区域的大小: 隐藏,复制CodeDWORD大小= GetRegionData (hRgn, 0, 0); 保护区缓冲区: 隐藏,复制Codestd: vector< char>rgnDataBuf(大小); 得到区域数据: 隐藏,复制CodeRGNDATA * pRgnData = reinterpret_cast< RGNDATA *祝辞(和rgnDataBuf.front ()); GetRegionData (hRgn、大小pRgnData) 通过观察通知客户: 隐藏,复制CodepEventObserver→WinEventNotify (pRgnData); 公共接口描述 回调接口发送地区数据到客户端代码: 隐藏,复制Code
struct IWinRegionObserver { virtual ~IWinEventObserver(){} virtual void WinEventNotify(const _RGNDATA *) = 0; };
回调接口通知关于错误: 隐藏,复制Code
struct IErrorObserver { virtual ~IWinEventErrorObserver(){} virtual void OnWinEventError(__in const char *) = 0; };
限制 这个方法行不通在Windows 7和更高的系统如果aero主题被选中。 在aero主题,总是由一个矩形窗口区域,即使部分被其他窗口的窗口。Windows 7只显示可见部分使用其核心机制。所以图书馆总是报道一个矩形窗口地区。 如何使用 要使用这个库,您应该创建核心对象和事件的旁观者。创建核心,使用下一个构造函数: 隐藏,复制Code
CWinRegionObserver(
HWND hWnd,
IWinRegionObserver * pEventObserver,
IErrorObserver* pErrorObserver,
DWORD TimeOut = 200
);
所有数据将被发送到应用程序通过IWinRegionObserver和IErrorObserver接口。 在您的客户端代码中,您可以解析区域信息来确定窗口的可见部分,例如。在我们的测试应用程序中,我们只写矩形,构造窗口区域,日志文件。 样品描述 MFC的基于对话框的应用程序的目的是为了展示图书馆工作。此应用程序的主窗口是监控的图书馆。监测结果,在样例文件夹使用日志文件。例如,假设我们有一个窗口。 我们将使用我们的图书馆来监测其矩形区域。 在这幅图像中,窗口的可见区域由1矩形。 在接下来的图像,该地区仍然由1矩形。 但在第二图像,地区公司的窗口2个区域的nsists。 因此,使用这个库,我们可以找到可见区域,并在你的程序中使用这些信息。 图书馆建设需求 软件 Visual Studio 2008 sp1 Boost 1.40.0源代码(参见http://boost.org) 环境变量 BOOST_ROOT—应该包含Boost目录的路径 准备构建系统 在从源代码构建示例解决方案之前,您应该执行几个简单的初步步骤。首先,您应该安装Software部分中指定的所有应用程序,并设置所提到的环境变量。 然后,您应该从源代码构建Boost库。为此,转到Boost目录(BOOST_ROOT)并依次调用以下两个命令: 隐藏,复制Code
bootstrap.bat bjam.exe toolset=msvc --build-type=complete
有关更多详细信息,请参见Boost文档。 链接 http://msdn.microsoft.com/en-us/library/dd162940 http://msdn.microsoft.com/ru-ru/default.aspx http://msdn.microsoft.com/en-us/library/dd162913 (v = VS.85) . aspx (VS.85) . aspx 历史 2010年11月4日:初任 本文转载于:http://www.diyabc.com/frontweb/news5369.html