您的位置:首页 > 编程语言 > C#

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

2013-08-12 08:38 627 查看


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

 

需调用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抓屏的功能。

<span style="color:#330099;">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");  
  
        }  
  
    }  
}</span> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: