我想在C#中获取外部窗口(如Firefox或Explorer)的内部大小和位置。我试过,但我没有什么可以开始的(只有整个窗口或自己的表格大小)。
答案 0 :(得分:1)
要使用任意窗口执行此操作,您需要转到Win32 API。
对于位置,您需要窗口矩形。您需要窗口句柄(HWND)才能执行此操作。 Here's an answer describing how to do that.以下是该答案的代码:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public 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
}
Rectangle myRect = new Rectangle();
private void button1_Click(object sender, System.EventArgs e)
{
RECT rct;
if(!GetWindowRect(new HandleRef(this, this.Handle), out rct ))
{
MessageBox.Show("ERROR");
return;
}
MessageBox.Show( rct.ToString() );
myRect.X = rct.Left;
myRect.Y = rct.Top;
myRect.Width = rct.Right - rct.Left + 1;
myRect.Height = rct.Bottom - rct.Top + 1;
}
他正在使用前景窗口(请参阅上面链接中StackOverflow页面顶部的问题)。我不知道你想要什么窗口或者你打算如何获得它;你没有提供任何相关的信息。
一旦你有了窗口句柄,就可以调用GetClientRect()
Win32函数来获取窗口的内部“客户区”尺寸:这意味着除了标题栏和边框之外的所有内容。一旦你有GetWindowRect()
在C#中工作,PInvoke声明就很容易推断,但here it is anyway。