如何选择并突出显示另一个应用程序中的窗口?
Posted
技术标签:
【中文标题】如何选择并突出显示另一个应用程序中的窗口?【英文标题】:How to select and highlight a window in another application? 【发布时间】:2008-10-23 05:53:06 【问题描述】:我想将 C++ 程序中的一些击键发送到另一个窗口。
出于这个原因,我想让用户选择目标窗口,类似于在 Visual Studio 附带的 Spy++ 实用程序中的操作方式(将十字光标拖到目标窗口上,并用框架突出显示目标窗口)。
在 Windows 中如何进行这种拖动和选择?我完全不知道从哪里开始寻找实现此功能的机制。
【问题讨论】:
【参考方案1】:这是通常的做法:
-
使用SetCapture 捕获鼠标。这将导致所有鼠标消息都被路由到您应用的窗口。
处理WM_MOUSEMOVE 消息。在您的处理程序代码中,使用WindowFromPoint 抓住鼠标下方的窗口。这将为您提供鼠标当前所在窗口的 HWND。
现在您已经获得了窗口,您需要一个设备上下文 (HDC)。您可以使用GetWindowDC 为指定窗口获取一个。
现在您可以使用典型的 GDI 函数绘制到 DC。
您必须注意一些事情 - 干净地擦除选择矩形等,但这是一种方法。
您也可以绘制到屏幕 DC 中来执行此操作,但无论如何您都需要窗口句柄才能获得窗口矩形。
如果您搜索 Spy++ 源代码,您会看到一些这种技术的示例。
【讨论】:
这种方法的问题是 DWM(尤其是 Aero)不知道您绘制精美的图像并随机删除它们。【参考方案2】:以前的答案是错误的。
Spy++ 源代码已在 G.Groups 上提供多年(主要参见 Win32 api ng news://194.177.96.26/comp.os.ms-windows.programmer.win32)
【讨论】:
我熟悉 Spy++ 代码,但有不止一种方法可以做到这一点。您可以使用上述技术在进程外执行此操作,也可以使用挂钩、DLL 注入和子类化在进程内执行此操作。我相信这就是 Spy++ 所做的。但这并不是绘画所必需的。以上是关于如何选择并突出显示另一个应用程序中的窗口?的主要内容,如果未能解决你的问题,请参考以下文章