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");

        }

    }
}


 

 

### 如何在荣耀平板上安装 Ubuntu 系统 要在荣耀平板这样的 Android 设备上运行 Ubuntu,可以通过 Termux 或其他工具实现虚拟化环境下的安装。以下是具体方法: #### 使用 Termux 安装 Ubuntu Termux 是一款功能强大的终端模拟器应用,支持在 Android 上运行 Linux 发行版。 1. **安装 Termux** 首先从 Google Play 商店或其他可信来源下载并安装 Termux 应用程序[^3]。 2. **配置 Termux 和安装基础依赖** 打开 Termux 后,执行以下命令来设置基本环境: ```bash pkg update && pkg upgrade ``` 3. **安装 Proot-Distro 工具** Proot-Distro 是一个用于管理基于 proot 的 Linux 发行版的工具,可以轻松安装和切换不同的发行版。 ```bash pkg install proot-distro proot-distro install ubuntu ``` 这些命令会自动下载并安装最新版本的 Ubuntu 到您的设备中。 4. **启动 Ubuntu** 完成安装后,您可以随时通过以下命令启动 Ubuntu: ```bash proot-distro login ubuntu ``` 5. **更新和升级系统** 登录到 Ubuntu 系统后,建议立即更新软件包列表并升级已有的软件包: ```bash apt update && apt full-upgrade -y ``` 6. **配置 APT 源(可选)** 如果您希望加快软件包下载速度,可以选择国内镜像源,例如清华大学开源软件镜像站: 编辑 `/etc/apt/sources.list` 文件并将默认内容替换为适合 ARM 架构的地址: ```plaintext deb http://ports.ubuntu.com/ focal main restricted universe multiverse deb http://ports.ubuntu.com/ focal-security main restricted universe multiverse deb http://ports.ubuntu.com/ focal-updates main restricted universe multiverse ``` 更多关于 Tsinghua TUNA 镜像的帮助文档可见于指定链接。 7. **验证安装成功** 输入 `uname -a` 命令查看当前系统的内核信息,确认是否进入了 Ubuntu 环境。 --- #### 替代方案:使用 XDA 提供的方法 如果希望通过更复杂的方式手动部署 Ubuntu,则可以参考 XDA 论坛中的讨论[^2]。此方式通常涉及解锁引导加载程序以及刷入自定义恢复模式(如 TWRP),但这可能会影响设备保修状态,并存在一定的风险。 --- ### 注意事项 - 荣耀平板采用的是 ARM 架构处理器,因此需要特别注意选择针对 arm64 平台优化过的 Ubuntu 版本或资源库。 - 整个过程不会覆盖原有 Android 系统,但如果操作不当可能会导致数据丢失,请提前做好备份工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值