如何获取任何特定进程窗口大小?

3

我在form1的顶部尝试了这个

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string strClassName, string strWindowName);

[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hwnd, ref Rect1 rectangle);

public struct Rect1
{
    public int Left { get; set; }
    public int Top { get; set; }
    public int Right { get; set; }
    public int Bottom { get; set; }
}

然后在构造函数中

Process[] processes1 = Process.GetProcessesByName("mspaint");
Process lol = processes1[0];
IntPtr ptr = lol.MainWindowHandle;
Rect1 mspaintRect = new Rect1();
GetWindowRect(ptr, ref mspaintRect);

但是我认为结果很奇怪。在mspainRect中,使用断点我看到
Bottom = -31972
Left = -32000
Right = -31840
Top = -32000

http://pinvoke.net/default.aspx/user32/IsIconic.html - Hans Passant
1个回答

2
当窗口最小化时,窗口的位置是{X=-32000,Y=-32000}。因此,在您的示例中,mspaint窗口被最小化了。
这个奇怪坐标背后的原因是为了与旧版本的Windows向后兼容。

任务栏出现之前窗口最小化到哪里了?

Windows NT坚持使用-32000坐标,并且由于某种原因没有采用兼容性修复程序。我想他们认为,等到Windows NT变得流行起来时,所有这些破碎的程序都会被修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接