句柄是什么
句柄在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();
}
}
}
Украинские Хиты – Shmiska – Пластир скачать песню в mp3 и слушать онлайн
Украинские Хиты – Shmiska – Пластир скачать песню в mp3 и слушать онлайн
Sabrina Carpenter – On Purpose скачать песню бесплатно в mp3 и слушать онлайн
Sabrina Carpenter – On Purpose скачать песню бесплатно в mp3 и слушать онлайн
Скачать песню Жасмин – Шаг По Лезвию Любви бесплатно в mp3
Скачать песню Жасмин – Шаг По Лезвию Любви бесплатно в mp3
Арт Группа Ларго – Ты Моя Мати Царице Небесная скачать бесплатно песню и слушать онлайн в mp3
Арт Группа Ларго – Ты Моя Мати Царице Небесная скачать бесплатно песню и слушать онлайн в mp3
Armadasever Feat. Metro Pro – Mazafucka Die (Feat. Metro Pro) скачать песню в mp3 и слушать онлайн
Armadasever Feat. Metro Pro – Mazafucka Die (Feat. Metro Pro) скачать песню в mp3 и слушать онлайн
Hammali & Navai – Девочка-Война – Hammali & Navai – Девочка-Война скачать бесплатно песню и слушать онлайн в mp3
Hammali & Navai – Девочка-Война – Hammali & Navai – Девочка-Война скачать бесплатно песню и слушать онлайн в mp3
Скачать песню Фристайл – Белая Береза (Фристайл: Нина Кирсо И Сергей Кузнецов 2013) бесплатно в mp3
Скачать песню Фристайл – Белая Береза (Фристайл: Нина Кирсо И Сергей Кузнецов 2013) бесплатно в mp3
Крис Норман – Gypsy Queen ("Цыганская Королева"), 2013 Г. скачать песню бесплатно в mp3 и слушать онлайн
Крис Норман – Gypsy Queen ("Цыганская Королева"), 2013 Г. скачать песню бесплатно в mp3 и слушать онлайн
Иван Кучин – Кровинка скачать бесплатно песню в mp3
Иван Кучин – Кровинка скачать бесплатно песню в mp3
Скачать песню Royksopp Feat. Jamie Mcdermott – Here She Comes Again(Dj Antonio Extended Mix) бесплатно в mp3
Скачать песню Royksopp Feat. Jamie Mcdermott – Here She Comes Again(Dj Antonio Extended Mix) бесплатно в mp3
Настя Задорожная – Буду (Remake 2024) скачать песню в mp3 и слушать онлайн бесплатно
Настя Задорожная – Буду (Remake 2024) скачать песню в mp3 и слушать онлайн бесплатно
Ленинград – Свобода(Ленинград Feat.кипелов) скачать в mp3 и слушать онлайн бесплатно
Ленинград – Свобода(Ленинград Feat.кипелов) скачать в mp3 и слушать онлайн бесплатно
Дуэт Любаня – Смуглянка скачать песню бесплатно в mp3 и слушать онлайн
Дуэт Любаня – Смуглянка скачать песню бесплатно в mp3 и слушать онлайн
Masego – Tadow скачать бесплатно песню в mp3
Masego – Tadow скачать бесплатно песню в mp3
Dj Polkovnik Feat. Тимур Вагапов – На Восток скачать песню в mp3 и слушать онлайн бесплатно
Dj Polkovnik Feat. Тимур Вагапов – На Восток скачать песню в mp3 и слушать онлайн бесплатно
Dj Eurodriver – No Limit (Galezard Edit 2024) скачать песню бесплатно в mp3 и слушать онлайн
Dj Eurodriver – No Limit (Galezard Edit 2024) скачать песню бесплатно в mp3 и слушать онлайн
Lil Wayne Ft. Bruno Mars – Mirror скачать бесплатно песню в mp3
Lil Wayne Ft. Bruno Mars – Mirror скачать бесплатно песню в mp3
Олег Погудин – Любовь Останется (2008) – Олег Погудин – Что Так Сердце Растревожено скачать бесплатно песню и слушать онлайн в mp3
Олег Погудин – Любовь Останется (2008) – Олег Погудин – Что Так Сердце Растревожено скачать бесплатно песню и слушать онлайн в mp3
Скачать песню 50 Cent – Hustler’s Ambition бесплатно в mp3
Скачать песню 50 Cent – Hustler’s Ambition бесплатно в mp3
Camylio – Unbreak скачать бесплатно песню в mp3
Camylio – Unbreak скачать бесплатно песню в mp3
Скачать песню The Klf – The Klf – Last Train To Trancentral бесплатно в mp3
Скачать песню The Klf – The Klf – Last Train To Trancentral бесплатно в mp3
Михаил Шуфутинский – Наколочка (Для Тех, У Кого Есть Тату) скачать бесплатно песню и слушать онлайн в mp3
Михаил Шуфутинский – Наколочка (Для Тех, У Кого Есть Тату) скачать бесплатно песню и слушать онлайн в mp3
Кино – Антология Кино (Remastered 2011) (2011) – Кино – Война скачать песню в mp3 и слушать онлайн бесплатно
Кино – Антология Кино (Remastered 2011) (2011) – Кино – Война скачать песню в mp3 и слушать онлайн бесплатно
Лорд Пневмослон – Голая Жопа Митрофана скачать бесплатно песню в mp3
Лорд Пневмослон – Голая Жопа Митрофана скачать бесплатно песню в mp3
Украинские Хиты – Love, Mary & На Її Основі – Вуста скачать песню в mp3 и слушать онлайн
Украинские Хиты – Love, Mary & На Її Основі – Вуста скачать песню в mp3 и слушать онлайн
Лама (Lama) – Лиш Тiльки Ти скачать песню бесплатно в mp3 и слушать онлайн
Лама (Lama) – Лиш Тiльки Ти скачать песню бесплатно в mp3 и слушать онлайн
Виктор Цой – Цой. К 50-Летию Артиста (Cd1) (2012) – Виктор Цой – Кончится Лето скачать бесплатно песню и слушать онлайн в mp3
Виктор Цой – Цой. К 50-Летию Артиста (Cd1) (2012) – Виктор Цой – Кончится Лето скачать бесплатно песню и слушать онлайн в mp3
3-Ий Январь Feat. Тайпан X Ilgiz – Дождись Меня скачать песню в mp3 и слушать онлайн бесплатно
3-Ий Январь Feat. Тайпан X Ilgiz – Дождись Меня скачать песню в mp3 и слушать онлайн бесплатно
Антиреспект – Жаль ( "Тишина" 2019) скачать бесплатно песню в mp3
Антиреспект – Жаль ( "Тишина" 2019) скачать бесплатно песню в mp3
Скачать песню Хиты В Современной Обработке – Francesco Napoli – Balla Balla (Mega Party Mix) бесплатно в mp3
Скачать песню Хиты В Современной Обработке – Francesco Napoli – Balla Balla (Mega Party Mix) бесплатно в mp3