Получение области окна - PullRequest
4 голосов
/ 21 июня 2011

Я пытаюсь получить высоту и ширину окна, используя это:

    [DllImport("User32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr handle, out Rectangle rect);

    private void timer1_Tick(object sender, EventArgs e)
    {
        Rectangle bonds = new Rectangle();
        GetWindowRect(GetForegroundWindow(), out bonds);
        Bitmap bmp = new Bitmap(bonds.Width, bonds.Height);
        Graphics memoryGraphics = Graphics.FromImage(bmp);
        IntPtr dc = memoryGraphics.GetHdc();
        PrintWindow(GetForegroundWindow(), dc, 0x1);
        memoryGraphics.ReleaseHdc(dc);
        bmp.Save("C:\\Test.gif", ImageFormat.Gif);
    }

, но bond.width и height больше, чем реальное окно.

Пример: мое окно имеет размер 100x150, bond.height составляет 400, а bond.width - как 500. Я получаю изображение размером 400x500, которое состоит из окна в углу изображенияхорошо), а остальное чёрное, так как картинка намного больше окна (что плохо)

ПРИМЕЧАНИЕ: мне все равно, что окно без аэродинамики, это хорошо для меня.* Таким образом, любое предложение, или, возможно, лучший способ получить регион?

1 Ответ

2 голосов
/ 21 июня 2011

Вам необходимо использовать ScreenToClient и переводить координаты.

GetWindowRect возвращает область окна относительно верхнего левого угла экрана (0, 0).

...