第491篇-Get the window position on the screen

Sometimes, we need to get the current positon of the window on the screen, you can just invoke the following methods to achieve that purpose.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormRect
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Get the current window's position compared to the screen.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPosition_Click(object sender, EventArgs e)
        {
            var awin = GetForegroundWindow(); //获取当前窗口句柄
            RECT rc = new RECT();
            GetWindowRect(awin, ref rc);
            int width = rc.Right - rc.Left; //窗口的宽度
            int height = rc.Bottom - rc.Top; //窗口的高度
            int x = rc.Left;
            int y = rc.Top;
            // show position
            richTextBox1.Text += string.Format("Bottom:{0},Left {1}, Top {2}, Right {3} {4}",rc.Bottom,rc.Left,rc.Top,rc.Right,System.Environment.NewLine);
        }

        // 获取当前窗口句柄:GetForegroundWindow()
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetForegroundWindow();

        //返回值类型是IntPtr,即为当前获得焦点窗口的句柄
        //获取到该窗口句柄后,可以对该窗口进行操作.比如,关闭该窗口或在该窗口隐藏后,使其显示
        /// <summary>
        /// nCmdShow的含义
        //0 关闭窗口
        //1 正常大小显示窗口
        //2 最小化窗口
        //3 最大化窗口
        /// </summary>
        /// <param name="hwnd"></param>
        /// <param name="nCmdShow"></param>
        /// <returns></returns>
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
        // 获取窗口大小及位置:需要调用方法GetWindowRect(IntPtr hWnd, ref RECT lpRect)

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
        public int Left; //最左坐标
        public int Top; //最上坐标
        public int Right; //最右坐标
        public int Bottom; //最下坐标
    }
}

 

posted @ 2013-01-20 20:59  Shanghai Jim Zhou  阅读(242)  评论(0编辑  收藏  举报