0

目前,我在处理双屏配置的 ac# 项目中使用 WinAPI。我的问题很简单:如何在特定监视器上获取大约 75% 大小的所有窗口句柄的列表?

此致,

4

2 回答 2

1

要获得具有最大窗口部分的屏幕,您可以使用以下命令:

System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(form.Handle);

然后你只需要计算这个屏幕上有多少%。

Rectangle screenBounds = screen.Bounds;
Rectangle formBounds = form.Bounds;


Rectangle intersection = formBounds.Intersect(screenBounds);
int formArea = formBounds.Width * formBounds.Height;
int intersectArea = intersection.Width * intersection.Height;

int percent = intersectArea * 100 / formArea;
于 2012-11-25T20:25:31.477 回答
0

好的,我创建了一个更通用的版本,可以使用任何窗口句柄。谢谢大家的答案!

//Get the Screen object where the Hwnd handle is
System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(Hwnd);

//Create rectangles object
Rectangle screenBound = screen.Bounds;
RECT handleRect = new RECT();

//Get dimensions of the Hwnd handle /!\ don't pass a Rectangle object
if (!GetWindowRect(Hwnd, ref handleRect))
{
    //ERROR
}

//Getting the intersection between the two rectangles
Rectangle handleBound = new Rectangle(handleRect.Left, handleRect.Top,                 handleRect.Right-handleRect.Left, handleRect.Bottom-handleRect.Top);

Rectangle intersection = Rectangle.Intersect(screenBound, handleBound);

//Get the area of the handle
int formArea = handleBound.Width * handleBound.Height;

//Get the area of the intersection
int intersectArea = intersection.Width * intersection.Height;

//Calculate percentage
int percentage = intersectArea * 100 / formArea;

这是 RECT 结构:

    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int Left;        // x position of upper-left corner
        public int Top;         // y position of upper-left corner
        public int Right;       // x position of lower-right corner
        public int Bottom;      // y position of lower-right corner
    }
于 2012-11-28T13:51:41.993 回答