首页 > 解决方案 > UWP 中的 GetWindowRect

问题描述

由于添加了 AppDiagnostics 权限,我认为应该可以获取当前在前台的窗口大小。这是我已经尝试过的:

    async private void DoThing()
    {
        Rect angle = GetRectValues();

        reportString += angle.Y + " ";
        reportString += angle.X + " ";
        reportString += angle.Height + " ";
        reportString += angle.Width;
    }

    private unsafe Rect GetRectValues()
    {

        IntPtr hWID = GetForegroundWindow();

        Rect angle;

        Rect* pAngle = ∠

        GetWindowRect(GetForegroundWindow(), pAngle);

        return angle;
    }

    [DllImport("user32.dll", CharSet = CharSet.Ansi)]
    private static extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll", CharSet = CharSet.Ansi)]
    private unsafe static extern Boolean GetWindowRect(IntPtr intPtr, Rect* lpRect);

它运行,也返回值。问题是,这些值很奇怪。

3.47522019152555E-43 1.50919844607783E-42 1.60448674165192E-42 3.50885135466934E-42 

这些是在我的屏幕中间运行的资源管理器窗口的值。当我移动窗口时它们会改变,但我不知道如何解释它们。此外,如果窗口是全屏的,它们会变为 NaN。-2147483648 -2147483648 0 0 除非我将它们转换为整数,否则无论出于何种原因,值都会变成整数。

如何正确使用此方法,以及如何解释这些值?

标签: uwpdllimport

解决方案


您的结构定义Rect必须不正确。从字符串表示,我可以告诉它的成员目前是双打。如果您查看 MSDN,RECT 结构中只有整数

像这样定义它:

struct Rect
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

推荐阅读