c++ - 如何在另一个应用程序中选择并突出显示一个窗口?

标签 c++ windows

我想将一些击键从 C++ 程序发送到另一个窗口。

出于这个原因,我想让用户选择目标窗口,就像在 Visual Studio 附带的 Spy++ 实用程序中所做的那样(将十字光标拖到目标窗口上,并用框架突出显示目标窗口)。

这种拖动和选择在 Windows 中是如何完成的?我完全不知道从哪里开始寻找实现此功能的机制。

最佳答案

通常是这样的:

  1. 使用 SetCapture 捕获鼠标。这将导致所有鼠标消息被路由到您应用程序的窗口。
  2. 处理 WM_MOUSEMOVE 消息。在您的处理程序代码中,使用 WindowFromPoint 捕获鼠标下方的窗口。这将为您提供鼠标当前所在窗口的 HWND。
  3. 现在您已经有了窗口,您需要一个设备上下文 (HDC)。您可以在指定窗口使用 GetWindowDC 获得一个。
  4. 现在您可以使用典型的 GDI 函数绘制到 DC 中。

有些事情您必须注意 - 干净地删除选择矩形等等,但这是一种方法。

您也可以绘制到屏幕 DC 中来执行此操作,但无论如何您都需要窗口句柄才能使窗口正确。

如果你谷歌一下 Spy++ 源代码,你会看到一些这种技术的例子。

关于c++ - 如何在另一个应用程序中选择并突出显示一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228675/

相关文章:

c - SetWindowsHookEx 注入(inject)在 Release模式下失败,但在 Debug模式下有效

windows - 检查 ReadDirectoryChangesw 是否适用于给定路径

windows - 远程批量Powershell视频适配器查询

c++ - 为什么编译器在循环中从内存中加载这个指针

c++ - 为什么我必须初始化一个数组?

python - 如何使用 SWIG 在 Python 中将 operator<< 包装到 __str__?

c# - 如何获得已安装软件产品的列表?

c++ - ExtractIcon和ExtractAssociatedIcon之间的区别?需要提取特定大小的图标

c++ - C++ 中 (base->*&Func)() 的含义是什么

c++ - 说 C++ 是一种部分类型安全的语言是否准确?