在屏幕坐标中获取桌面上任何窗口的边界,是否可能?

时间:2011-12-26 18:48:22

标签: c# java windows coordinates bounds

我正在寻找一种方法来获取任何可能在Windows机器上显示在桌面上的任意窗口的屏幕坐标范围。例如,假设您在桌面上的adobe中打开了pdf文档,我希望能够通过一些书面程序获取该任意窗口的坐标/边界,使用哪种语言并不重要。

我的具体问题:上述情况可能吗?

到目前为止我所做的只是使用PointerInfo类,特别是getPointerInfo()方法,在Java中获取鼠标的屏幕位置。 (此处为API:http://docs.oracle.com/javase/6/docs/api/java/awt/PointerInfo.html)。同样,我所做的就是找出鼠标在屏幕坐标中的位置,这与我的问题没有直接关系,但我认为这是一个很好的起点。

我不是在找人给我一个如何完成的代码片段,只是承认它可以完成,也许是一个API或类文档的链接来帮助我。同样,我不是在寻找任何特定语言的解决方案。

感谢您的时间, -Kevin

编辑:我在c#中发布了这个,因为它似乎可能是解决此问题的最佳语言。

3 个答案:

答案 0 :(得分:2)

是的,当然有可能。 (在Windows下,用于此工作的最佳语言是C#。)

通过仅使用dotnet对象并仅调用dotnet函数,可能有某种方法可以做到这一点,但我不知道任何这样的方法。

我所知道的方式涉及pinvoke,这是dotnet中的托管代码可以调用本机Windows dll中的非托管代码的机制。

查看WindowFromPoint函数: http://www.pinvoke.net/default.aspx/user32.windowfrompoint

找到窗口后,查看GetWindowRect功能: http://www.pinvoke.net/default.aspx/user32.getwindowrect

答案 1 :(得分:0)

查看this Javadoc for Window(Java AWT)。它似乎做了一些尝试,但它无法保证。

答案 2 :(得分:0)

最终用户是否有足够的动力来提供帮助?如果是这样很容易。

  1. 获取整个屏幕的屏幕截图。
  2. 以图片图标向用户显示 - >标签 - >滚动窗格 - >帧。
  3. 在标签上添加鼠标监听器。
  4. 要求用户选择标签的矩形部分。
  5. 使用鼠标拖动的开始/结束点作为矩形的角。
  6. 当然,可以做一些调整。提供边界角的扩展视图,提供逐个像素地调整每个角落的方法。如果采用这种策略,您可以从设计用于选择屏幕上的点的this code开始。