GetWindowRect в UWP - PullRequest
       12

GetWindowRect в UWP

0 голосов
/ 20 ноября 2018

Так как разрешения 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 .

Как правильно использовать этот метод и как интерпретировать эти значения?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Ваше определение структуры для Rect должно быть неверным.Из строкового представления я могу сказать, что его члены в настоящее время являются двойными.Если вы посмотрите на MSDN, структура RECT содержит только целые числа .

Определите это так:

struct Rect
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}
0 голосов
/ 20 ноября 2018

В UWP мы можем использовать ApplicationView.GetForCurrentView().VisibleBounds, чтобы получить VisibleBounds в главных окнах.

Мы можем вызывать многие библиотеки как приложение Win32.

Мы можем использовать Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().VisibleBounds, чтобы получить ограничивающий прямоугольник окна приложения. Другой способ получить текущие окна - использовать Window.Current.Bounds для получения границ.

...