C# GetWindowRect始终返回相同的值

C# GetWindowRect始终返回相同的值,c#,winapi,C#,Winapi,我知道类似的问题已经发布了,但是提议的解决方案对我不起作用 我正试图在屏幕上找到一个窗口位置。我真正关心的唯一值是该窗口的左上角点,没有顶部标题栏 这是我正在使用的函数: [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); 其中,R

我知道类似的问题已经发布了,但是提议的解决方案对我不起作用

我正试图在屏幕上找到一个窗口位置。我真正关心的唯一值是该窗口的左上角点,没有顶部标题栏

这是我正在使用的函数:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
其中,RECT的定义如下:

    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }
因此,对于屏幕不同位置的窗口,我总是得到相同的值:

Bottom = screen_height
Right = screen_width
Top = -4 // <--
Left = -4 // <--
感谢您的帮助。谢谢

为了提供更多信息,下面是我想要得到的图片(忽略底部的键盘):


我认为您要查找的是,它将为您提供窗口的客户端矩形。
左侧
顶部
的值将是
(0,0)
,但
右侧
底部
提供了宽度和高度


然后可以调用,传递窗口句柄和
(0,0)
点。这将为您提供客户端区域左上角的屏幕坐标。只需添加宽度和高度(从上一次调用到
GetClientRect
),就可以了。

我想您要找的是,它将为您提供窗口的客户端矩形。
左侧
顶部
的值将是
(0,0)
,但
右侧
底部
提供了宽度和高度


然后可以调用,传递窗口句柄和
(0,0)
点。这将为您提供客户端区域左上角的屏幕坐标。只需添加宽度和高度(从上一次调用到
GetClientRect
),就可以了。

这些坐标看起来像是窗口被最大化了,是吗?“没有顶部标题栏”是什么意思?你说的是客户区的位置吗?不,窗口没有最大化。我所说的顶部标题栏是指包含窗口名称的标题栏,以及最小化/最大化/关闭窗口的小图标。抱歉,输入了错误的术语。那么,
GetWindowRect
返回什么?我们怎样才能复制这个呢?IIRC,最大坐标为-8,-8,屏幕右侧+8,屏幕底部+8@DavidHeffernanGetWindowRect返回true。TBH,我不确定这是如何复制的。我的应用程序是Surface(SDK 2.0)应用程序。这有关系吗?那篇博文的链接很难令人信服。使用Spy++代替。这些坐标看起来像是窗口被最大化了-是吗?“没有顶部标题栏”是什么意思?你说的是客户区的位置吗?不,窗口没有最大化。我所说的顶部标题栏是指包含窗口名称的标题栏,以及最小化/最大化/关闭窗口的小图标。抱歉,输入了错误的术语。那么,
GetWindowRect
返回什么?我们怎样才能复制这个呢?IIRC,最大坐标为-8,-8,屏幕右侧+8,屏幕底部+8@DavidHeffernanGetWindowRect返回true。TBH,我不确定这是如何复制的。我的应用程序是Surface(SDK 2.0)应用程序。这有关系吗?那篇博文的链接很难令人信服。改用Spy++。我用FindWindow()解决了这个问题。这给了我正确的窗户把手。我仍然感谢吉姆的努力。ThanksI使用FindWindow()解决。这给了我正确的窗户把手。我仍然感谢吉姆的努力。谢谢
public partial class SurfaceWindow1 : SurfaceWindow
{

    public SurfaceWindow1()
    {
        InitializeComponent();

        IntPtr handle = new WindowInteropHelper(this).Handle;
        ....
    }
}