作用:

在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。

1.      默认的皮肤压缩包或语言包。一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件(你可以尝试将Media Player或千千静听等软件的Skins目录下的文件的扩展名改为.zip,然后使用WinZip打开看一下),但为了防止Skin文件丢失导致软件无 法显示,他们常常会在EXE文件中内置一套Skin作为默认的皮肤文件。同样,一些支持多语言的EXE文件中存在默认语言包也是这个道理(当然也可以使用 "String Table"资源类型);

2.      做为一些病毒/木马程序的寄生方式。如果不小心执行了带有病毒/木马的程序,它们会在你运行时释放出病毒/木马文件。当然许多病毒是将自身写入PE文件头来实现;

3.      合并EXE与它所需要的DLL文件。出于某些原因程序作者有时可能需要将DLL文件嵌入到可执行的EXE文件中,这可以通过使用自定义资源来实现;

4.      其它需要在程序中播放一个AVI动画等等,都可以通过将二进制的数据文件作为自定义资源加入到可执行文件中来实现;

来自:https://www.cnblogs.com/gakusei/articles/1352922.html

//获取指定模块的资源
HRSRC hRsrc1 = FindResource(NULL, MAKEINTRESOURCE(IDR_GUISHOU1), TEXT("GUISHOU"));
HRSRC hRsrc2 = FindResource(NULL, MAKEINTRESOURCE(IDR_GUISHOU2), TEXT("GUISHOU")); if (hRsrc1==NULL|| hRsrc2==NULL)
{
m_Edit += L"查找资源失败\r\n";
}
else
{
m_Edit += L"查找资源成功\r\n";
} //获取资源大小
DWORD dwSize1 = SizeofResource(NULL, hRsrc1);
DWORD dwSize2 = SizeofResource(NULL, hRsrc2);
if (dwSize1&&dwSize2)
{
m_Edit += L"获取资源大小成功\r\n";
}
else
{
m_Edit += L"获取资源大小失败\r\n";
} //将资源加载到内存
HGLOBAL hGlobal1 = LoadResource(NULL, hRsrc1);
HGLOBAL hGlobal2 = LoadResource(NULL, hRsrc2);
if (hGlobal1&&hGlobal1)
{
m_Edit += L"资源加载成功\r\n";
}
else
{
m_Edit += L"资源加载失败\r\n";
} //锁定资源
LPVOID lpVoid1 = LockResource(hGlobal1);
LPVOID lpVoid2 = LockResource(hGlobal2);
if (lpVoid1&&lpVoid2)
{
m_Edit += L"资源锁定成功\r\n";
}
else
{
m_Edit += L"资源锁定失败\r\n";
} //将资源保存为文件
FILE* fp1 = NULL;
FILE* fp2 = NULL;
fopen_s(&fp1, "MyHookDll.dll", "wb+");
fopen_s(&fp2, "TestDll.dll", "wb+");
if (fp1&&fp2)
{
m_Edit += L"资源载入本地成功\r\n";
}
fwrite(lpVoid1,sizeof(char),dwSize1,fp1);
fwrite(lpVoid2,sizeof(char),dwSize2,fp2);
fclose(fp1);
fclose(fp2);
UpdateData(FALSE);

FindResource用来在一个指定的模块中定位所指定的资源:

HRSRC FindResource(

HMODULE hModule,                //包含所需资源的模块句柄,如果是程序本身,可以置为NULL

LPCTSTR lpName,         //可以是资源名称或资源ID

LPCTSTR lpType          //资源类型,在这里也就是我们自己指定的资源类型

);

LoadResource用来将所指定的资源加载到内存当中;

HGLOBAL LoadResource(

HMODULE hModule,                //模块句柄,同上

HRSRC hResInfo          //需要加载的资源句柄,这里也就是FindResource的返回值

);

LockResource用来锁定内存中的资源数据块,它的返回值也就是我们要使用的直系指向资源数据的内存指针;

LPVOID LockResource(

HGLOBAL hResData                //指向内存中要锁定的资源数据块,这里也就是LoadResource的返回值

);

项目来自:https://github.com/TonyChen56/HackerTools

mfc HackerTools释放资源的更多相关文章

  1. mfc HackerTools防止程序双开

    来自:https://github.com/TonyChen56/HackerTools 1 HANDLE hMutex = CreateMutexA(NULL, FALSE, "GuiSh ...

  2. mfc HackerTools监控键盘按键

    string GetKey(int Key) { string KeyString = ""; //判断符号输入 const int KeyPressMask = 0x800000 ...

  3. mfc HackerTools远程线程注入

    在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程).创建的线程一般为Windows API函 ...

  4. mfc HackerTools进程令牌设置为debug权限

    博客园:https://www.cnblogs.com/ndyxb/p/12734717.html 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作, ...

  5. mfc HackerTools全局钩子

    钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术. 如在键盘中按下一键,操作系统将收到键按下消息,把消息放入消息队列,然后消息队列对消息进行派发,发给相应的应 ...

  6. mfc HackerTools拖动文件

    VOID DragAcceptFiles(          HWND hWnd,    BOOL fAccept); 这个函数的调用,表示你要让某个窗体能够接受文件的拖入.第一个参数指定是哪个窗口, ...

  7. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)

    1.3.1 应用程序对象 MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口.当包含头文件<afxwin.h>, ...

  8. MFC对话框中显示BMP,JPG图片

    //************************************ // 方法说明:    显示JPG和GIF.BMP图片 // 参数说明:    CDC * pDC           设 ...

  9. 孙鑫MFC学习笔记4:MFC画图

    1.画线方法 *1.捕获鼠标按下和弹起消息,获取两个点 *2.消息响应,画线 2.在CMainFrame类中的鼠标左键事件得不到响应的原因是CNameView覆盖了CMainFrame 3.注释宏 4 ...

随机推荐

  1. C语言共同体

    结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为: union 共用体名{    ...

  2. Qt5MV自定义模型与实例浅析

    1. Model/View结构 这种结构,其实就是将界面组件与所编辑的数据分离开来,又通过数据源的方式连接起来,相当于解耦,视图层只关心显示和与用户交互,而数据层负责与实际的数据进行通信,并为视图组件 ...

  3. Java基础00-接口组成更新31

    1. 接口组成更新 1.1 接口组成更新概述 1.2 接口中默认方法 代码示例: 需求: 1:定义一个接口MyInterface,里面有两个抽象方法: void show1(); void show2 ...

  4. Python语言的技术领域

    第一部分:各个领域应用的语言 大家看这个内容,其实你很明显发现,其实各个语言都有他的用处.我们可以说Python是应用最广的.但是暂时还是不能说它是全能的,因为他也有它的短板,但是对于一般的小公司和小 ...

  5. LeetCode 895. Maximum Frequency Stack

    题目链接:https://leetcode.com/problems/maximum-frequency-stack/ 题意:实现一种数据结构FreqStack,FreqStack需要实现两个功能: ...

  6. 前端开发入门到进阶第三集【获取cookie然后单点登录后重定向】

    /* var token ;//https://blog.csdn.net/qq_29207823/article/details/81745757 if( $.cookie('BBK_TOKEN') ...

  7. tomcat禁用PUT,DELETE等一些不必要的HTTP方法

    一.背景 公司进行安全整改, 技术要求:系统软件所需支撑的WEB容器环境应禁止除GET和POST外其他HTTP(S)方法. 提供凭证:建议在不影响业务的前提下,禁用PUT.DELETE.HEAD.OP ...

  8. 2个Double字符串进行

    public static int compare(double d1, double d2) { if (d1 < d2) return -1; // Neither val is NaN, ...

  9. js排序——sort()排序用法

    sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点. 语法:array.sort(fun):参数fun可选.规定排序顺序.必须是函数.注:如果调用该方法 ...

  10. 【LeetCode】209. 长度最小的子数组

    209. 长度最小的子数组 知识点:数组:前缀和:二分法:双指针:滑动窗口 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小 ...