User-Profile-Image
hankin
  • 5
  • 首页
  • 留言
  • 仓库
  • 云端
  • 分类
    • 随笔
    • 安卓逆向
    • php
    • node.js
    • C#
  • 页面
    • 个人技术栈
    • 留言
  • 友链
    • 沉沦云API
    • 沉沦云端
    • SinKingMusic
    • 美和易思刷课
    • 神奇的七云
    • khaos编程小站
    • 小九实验室
    • 一叶三秋
    • 青年的故事
    • :李白云博客
    • 噜阿噜-资源站
    • 小k
Help?

Please contact us on our email for need any support

Support
    首页   ›   C#   ›   正文
C#

c#通过句柄进行模拟操作

2020-05-08 21:43:07
260172  1256 7

句柄是什么

句柄在windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。在windows环境中,句柄是用来标识项目的,这些项目包括:

(1)模块(module)

(2)任务(task)

(3)实例(instance)

(4)文件(file)

(5)内存块(block of memory)

(6)菜单(menu)

(7)控制(control)

(8)字体(font)

(9)资源(recource),包括图标(icon),光标(cursor),字符串(string)等

(10)GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)

Windows是一个以虚拟内存为基础的操作系统,在这种环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的需要。对象被移动意味着它的地址变化了。由于地址总是如此变化,所以Windows操作系统为各应用程序腾出一些内存地址,用来专门登记各应用对象在内存中的地址变化,而这地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

因此,Windows程序中并不是用物理地址来标识一个内存块,文件,任务,或动态装入模块的,相反,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

句柄地址(稳定)->记载着对象在内存中的地址->对象在内存中的地址(不稳定)->实际对象。但是,必须注意注意的是,程序每次重新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确是不一样的。

句柄可以做什么

句柄所有操作是通过windows的user32接口完成,因此需要导入user32.dll,通过句柄我们可以跨程序的执行任何操作,修改任何windows窗体,这是一个十分强大的功能,可以帮助我们实现很多人工繁琐的操作

以下是我封装的句柄操作类,可以直接使用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;

namespace AutoLogin
{
    public struct WindowInfo
    {
        public IntPtr hWnd;
        public string szWindowName;
        public string szClassName;
    }
    public struct ControInfo
    {
        public IntPtr hWnd;
        public string ControName;
        public string ClassName;
    }
    class GetWindowInfo
    {
        [DllImport("shell32.dll")]
        public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);
        [DllImport("user32.dll")]
        private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lparam);
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]//查找窗口
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
        [DllImport("user32.dll")]
        private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
        [DllImport("user32.dll")]
        private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
        private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam);
        //查找子控件
        [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
        //发送消息
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
        //窗口置顶
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
        //遍历子控件
        [DllImport("user32.dll")]
        public static extern int EnumChildWindows(IntPtr hWndParent, CallBack lpfn, int lParam);
        //回调函数
        public delegate bool CallBack(IntPtr hwnd, int lParam);
        public static IntPtr FindWindowInfo(string soft, string classname = "")
        {
            WindowInfo[] a = GetAllDesktopWindows();
            int i = 0;
            int index = 0;
            for (i = 0; i < a.Length; i++)
            {
                if (!classname.Equals(""))
                {
                    if (a[i].szWindowName.ToString().Contains(soft) && classname == a[i].szClassName.ToString())
                    {
                        index = i;
                        break;
                    }
                }
                else
                {
                    if (a[i].szWindowName.ToString().Contains(soft))
                    {
                        index = i;
                        break;
                    }
                }
            }
            if (i == 0)
            {
                return (IntPtr)0;
            }
            return a[index].hWnd;
        }
        public static WindowInfo GetInfo(IntPtr hWnd)
        {
            WindowInfo wnd = new WindowInfo();
            StringBuilder sb = new StringBuilder(256);
            wnd.hWnd = hWnd;
            GetWindowTextW(hWnd, sb, sb.Capacity);
            wnd.szWindowName = sb.ToString();
            GetClassNameW(hWnd, sb, sb.Capacity);
            wnd.szClassName = sb.ToString();
            return wnd;
        }
        //枚举控件
        public static ControInfo[] GetALLContros(IntPtr parent)
        {
            List<ControInfo> ConList = new List<ControInfo>();
            EnumChildWindows(parent,delegate (IntPtr hWnd, int lParam)
            {
                ControInfo wnd = new ControInfo();
                wnd.hWnd = hWnd;
                StringBuilder sb = new StringBuilder(256);
                GetClassNameW(hWnd, sb, sb.Capacity);
                wnd.ClassName = sb.ToString();
                GetWindowTextW(hWnd, sb, sb.Capacity);
                wnd.ControName = sb.ToString();
                ConList.Add(wnd);
                return true;
            }, 0);
            return ConList.ToArray();
        }
        //枚举窗体
        private static WindowInfo[] GetAllDesktopWindows()
        {
            List<WindowInfo> wndList = new List<WindowInfo>();
            EnumWindows(delegate (IntPtr hWnd, int lParam)
            {
                WindowInfo wnd = new WindowInfo();
                StringBuilder sb = new StringBuilder(256);
                wnd.hWnd = hWnd;
                GetWindowTextW(hWnd, sb, sb.Capacity);
                wnd.szWindowName = sb.ToString();
                GetClassNameW(hWnd, sb, sb.Capacity);
                wnd.szClassName = sb.ToString();
                //Console.WriteLine("Window handle=" + wnd.hWnd.ToString().PadRight(20) + " szClassName=" + wnd.szClassName.PadRight(20) + " szWindowName=" + wnd.szWindowName);
                wndList.Add(wnd);
                return true;
            }, 0);
            return wndList.ToArray();
        }
    }
}

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

7 打赏
评论 (5,572)

回复给 点击这里取消回复。

欢迎您 游客  

  • Алексей Романюта – Непокорные Ресницы скачать песню бесплатно в mp3 и слушать онлайн
    Алексей Романюта – Непокорные Ресницы скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Blackpink Lisa – Rockstar скачать песню в mp3 и слушать онлайн бесплатно
    Blackpink Lisa – Rockstar скачать песню в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Tchami & Marshall Jefferson – Move Your Body (Future House) (Original Mix) скачать бесплатно песню в mp3
    Tchami & Marshall Jefferson – Move Your Body (Future House) (Original Mix) скачать бесплатно песню в mp3

    9个月前
    回复
  • Скачать песню Эльдар Аленуров – Глазками Стреляешь бесплатно в mp3
    Скачать песню Эльдар Аленуров – Глазками Стреляешь бесплатно в mp3

    9个月前
    回复
  • Игорь Шаров – Первая Любовь скачать песню бесплатно в mp3 и слушать онлайн
    Игорь Шаров – Первая Любовь скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Украинские Хиты – Наталія Могилевська – День Народження Кожен День скачать бесплатно песню и слушать онлайн в mp3
    Украинские Хиты – Наталія Могилевська – День Народження Кожен День скачать бесплатно песню и слушать онлайн в mp3

    9个月前
    回复
  • Gabry Ponte & Tai Woffinden Feat. Yasmin Jane – Body скачать в mp3 и слушать онлайн бесплатно
    Gabry Ponte & Tai Woffinden Feat. Yasmin Jane – Body скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Максим Серов – Романтики скачать песню в mp3 и слушать онлайн бесплатно
    Максим Серов – Романтики скачать песню в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Хиты 2024 – Orville Peck – Midnight Ride скачать песню в mp3 и слушать онлайн
    Хиты 2024 – Orville Peck – Midnight Ride скачать песню в mp3 и слушать онлайн

    9个月前
    回复
  • Ірина Білик – Так Просто – 1996 скачать бесплатно песню в mp3
    Ірина Білик – Так Просто – 1996 скачать бесплатно песню в mp3

    9个月前
    回复
  • Скачать песню Hanumankind Feat. Kalmi – Big Dawgs бесплатно в mp3
    Скачать песню Hanumankind Feat. Kalmi – Big Dawgs бесплатно в mp3

    9个月前
    回复
  • Алия Ташуева – Я В Короне скачать песню бесплатно в mp3 и слушать онлайн
    Алия Ташуева – Я В Короне скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Лисицын – Никому-Никому (Remix) скачать в mp3 и слушать онлайн бесплатно
    Лисицын – Никому-Никому (Remix) скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Аркадий Кобяков – Ветерок (2015) – Аркадий Кобяков – Все Позади скачать песню в mp3 и слушать онлайн
    Аркадий Кобяков – Ветерок (2015) – Аркадий Кобяков – Все Позади скачать песню в mp3 и слушать онлайн

    9个月前
    回复
  • Deemy – Панацея скачать песню в mp3 и слушать онлайн бесплатно
    Deemy – Панацея скачать песню в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Dj Kuba & Neitan X Bounce Inc. Vs Artemas – Blade I Like The Way You Kiss Me (Johnny De City Mashup) скачать в mp3 и слушать онлайн бесплатно
    Dj Kuba & Neitan X Bounce Inc. Vs Artemas – Blade I Like The Way You Kiss Me (Johnny De City Mashup) скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Рок Балады – Animals-House Of The Rising Sun скачать песню в mp3 и слушать онлайн
    Рок Балады – Animals-House Of The Rising Sun скачать песню в mp3 и слушать онлайн

    9个月前
    回复
  • Zuba – Давай Всё Вернём скачать песню бесплатно в mp3 и слушать онлайн
    Zuba – Давай Всё Вернём скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Скачать песню Archi – Ночные Крыши бесплатно в mp3
    Скачать песню Archi – Ночные Крыши бесплатно в mp3

    9个月前
    回复
  • Hande Yener – Bana Olanlar скачать песню бесплатно в mp3 и слушать онлайн
    Hande Yener – Bana Olanlar скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Музыка Для Души – Мелодия Для Души. – Очень Красивая Песня скачать песню в mp3 и слушать онлайн
    Музыка Для Души – Мелодия Для Души. – Очень Красивая Песня скачать песню в mp3 и слушать онлайн

    9个月前
    回复
  • Детские Украинские & Дитячі Українські – Валентинка (Минус) скачать бесплатно песню и слушать онлайн в mp3
    Детские Украинские & Дитячі Українські – Валентинка (Минус) скачать бесплатно песню и слушать онлайн в mp3

    9个月前
    回复
  • Terror Squad – Lean Back скачать в mp3 и слушать онлайн бесплатно
    Terror Squad – Lean Back скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Владимир Высоцкий – Владимир Высоцкий – Уголовный Кодекс скачать в mp3 и слушать онлайн бесплатно
    Владимир Высоцкий – Владимир Высоцкий – Уголовный Кодекс скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Nightwish While Your Lips Are Still Red (Ost – While Your Lips Are Still Red (Ost Eight Below) скачать песню в mp3 и слушать онлайн
    Nightwish While Your Lips Are Still Red (Ost – While Your Lips Are Still Red (Ost Eight Below) скачать песню в mp3 и слушать онлайн

    9个月前
    回复
  • Музыка В Машину 2024 – Оксана Почепа Feat. Настя Негода – На Ее Улице Дождь (Silver Ace Radio Edit) скачать песню в mp3 и слушать онлайн бесплатно
    Музыка В Машину 2024 – Оксана Почепа Feat. Настя Негода – На Ее Улице Дождь (Silver Ace Radio Edit) скачать песню в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Beatles – All You Need Is Love скачать песню бесплатно в mp3 и слушать онлайн
    Beatles – All You Need Is Love скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Anastacia, Umberto Tozzi, Umberto Tozzi & Anastacia – Ti Amo скачать песню бесплатно в mp3 и слушать онлайн
    Anastacia, Umberto Tozzi, Umberto Tozzi & Anastacia – Ti Amo скачать песню бесплатно в mp3 и слушать онлайн

    9个月前
    回复
  • Хиты 2024 – Foster The People – Lost In Space скачать в mp3 и слушать онлайн бесплатно
    Хиты 2024 – Foster The People – Lost In Space скачать в mp3 и слушать онлайн бесплатно

    9个月前
    回复
  • Руся – Будь Що Буде скачать песню в mp3 и слушать онлайн бесплатно
    Руся – Будь Що Буде скачать песню в mp3 и слушать онлайн бесплатно

    9个月前
    回复
1 … 47 48 49 50 51 … 186
流逝中沉沦
12文章 50957评论 1470点赞 4417945浏览

随机文章
美和易思app协议分析及功能实现(美和易思刷课)
5年前
今日校园app协议分析(自动提交问卷,自动打卡等等)
5年前
安卓QQ协议登陆示例(c#)
5年前
QQWeb登陆P值算法
5年前
YY模拟操作
5年前
最新评论
+376
网站留言
Copyright © 2025 网站备案号: 皖ICP备18022767号-3
沉沦云网络. SinKingCloud
主页
页面
  • 个人技术栈
  • 留言
博主
流逝中沉沦
流逝中沉沦 管理员
一个热爱生活热爱技术的00后少年
12 文章 50957 评论 4417945 浏览
测试
测试
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付