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

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


  1. <span style="color:#330099;">using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Drawing;  
  5. using System.Drawing.Imaging;  
  6. using System.Windows.Forms;  
  7.   
  8. namespace ConsoleApplication1  
  9. ...{  
  10.     class Program  
  11.     ...{  
  12.         static void Main(string[] args)  
  13.         ...{  
  14.                 //获得当前屏幕的分辨率  
  15.             Screen scr = Screen.PrimaryScreen;  
  16.             Rectangle rc = scr.Bounds;  
  17.             int iWidth = rc.Width;     
  18.             int iHeight = rc.Height;  
  19.                 //创建一个和屏幕一样大的Bitmap  
  20.             Image myImage = new Bitmap(iWidth, iHeight);   
  21.                 //从一个继承自Image类的对象中创建Graphics对象  
  22.             Graphics g = Graphics.FromImage(myImage);  
  23.                 //抓屏并拷贝到myimage里  
  24.             g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight));  
  25.                 //保存为文件  
  26.             myImage.Save(@"c:/1.jpeg");  
  27.   
  28.         }  
  29.   
  30.     }  
  31. }</span> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值