tags:

views:

16

answers:

2

Hello,

I have the following code :

System.Drawing.Rectangle desktop_Rectangle = System.Windows.Forms.Screen.PrimaryScreen.Bounds

which gives me the Bounds of the Desktop.

I am now looking to get the Bounds of a specific Window using the caption of the Window.

Do I have to use Interop in order to accomplish that ?

any sample code would be greatly appreciated.

Thank you

A: 

You are going to need FindWindow and GetWindowRect (or perhaps GetClientRect).

dkackman
+1  A: 
namespace NativeInterop {
    using System.Runtime.InteropServices;

    public static partial class User32 {
        private const string DLL_NAME = "user32.dll";

        [StructLayout(LayoutKind.Sequential)]
        private struct RECT {
            int left, top, right, bottom;

            public Rectangle ToRectangle() {
                return new Rectangle(left, top, right - left, bottom - top);
            }
        }

        [DllImport(DLL_NAME, SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, String className, String windowTitle);

        [DllImport(DLL_NAME)]
        private static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

        public static Rectangle GetClientRect(IntPtr hWnd) {
            var nativeRect = new RECT();
            GetClientRect(hWnd, out nativeRect);
            return nativeRect.ToRectangle();
        }
    }
}

usage:

var handle = User32.FindWindowEx(IntPtr.Zero, IntPtr.Zero, String.Empty, "My Caption");
var rect = User32.GetClientRect(handle);
Mark H