c# 获取当前活动窗口句柄,获取窗口大小及位置

c# 获取当前活动窗口句柄,获取窗口大小及位置  

2011-11-23 19:50:36|  分类: 电脑编程|字号 订阅

需调用API函数

需在开头引入命名空间
using System.Runtime.InteropServices;

获取当前窗口句柄:GetForegroundWindow()

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();

返回值类型是IntPtr,即为当前获得焦点窗口的句柄

使用方法 :   IntPtr myPtr=GetForegroundWindow();

获取到该窗口句柄后,可以对该窗口进行操作.比如,关闭该窗口或在该窗口隐藏后,使其显示

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

其中ShowWindow(IntPtr hwnd, int nCmdShow);

nCmdShow的含义

0    关闭窗口

1    正常大小显示窗口

2    最小化窗口

3    最大化窗口

使用实例:    ShowWindow(myPtr, 0);

获取窗口大小及位置:需要调用方法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;                        //最下坐标
        }

示例:

                    InPtr awin = GetForegroundWindow();    //获取当前窗口句柄
                    RECT rect = new RECT();
                    GetWindowRect(awin, ref rect);
                   int width = rc.Right - rc.Left;                        //窗口的宽度
                   int height = rc.Bottom - rc.Top;                   //窗口的高度
                    int x = rc.Left;                                              
                    int y = rc.Top;


可以利用Graphics类的CopyFromScreen方法来实现屏幕截取,舍弃了比较麻烦的API函数,只要几句代码就能实现了,而且这个这个方法能实现只抓取部分区域的屏幕,可以实现类似qq抓屏的功能。

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace ConsoleApplication1
...{
    class Program
    ...{
        static void Main(string[] args)
        ...{
                //获得当前屏幕的分辨率
            Screen scr = Screen.PrimaryScreen;
            Rectangle rc = scr.Bounds;
            int iWidth = rc.Width;   
            int iHeight = rc.Height;
                //创建一个和屏幕一样大的Bitmap
            Image myImage = new Bitmap(iWidth, iHeight); 
                //从一个继承自Image类的对象中创建Graphics对象
            Graphics g = Graphics.FromImage(myImage);
                //抓屏并拷贝到myimage里
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));
                //保存为文件
            myImage.Save(@"c:/1.jpeg");

        }

    }
}


 

 

你可能感兴趣的:(c# 获取当前活动窗口句柄,获取窗口大小及位置)