VC++ 实现增大可执行文件的体积 自定义文件大小

做免杀的同学可能都会吧,增大文件体积防止云上传是个不错的方法


功能界面:


选择文件,是对话框支持文件拖放(详情见:http://blog.csdn.net/eldn__/article/details/8394060)



为对话框添加成员变量:CString m_filepath   用于保存用户选择的文件路径

Slider Control  控件 关联变量: 控件变量   m_slider   (用于操纵控件)   UINT  m_size (用于方便获取控件的当前值)

编辑框控件:ID    IDC_EDIT_FILESIZE     关联变量:UINT  m_num(方便设置控件值)


控件属性相关设置:

对话框:Accept Files: True

Slider 控件:

Enable Selection Rang :True

Point :Top/Left

Tick Marks:True

Auto Ticks:True


另外如果不希望对话框可以被调节大小,可以设置对话框的Border :  Dialg Frame



功能函数实现:

一,两种选择文件的方式(弹出选择对话框, 拖放)

  (详情见:http://blog.csdn.net/eldn__/article/details/8394060)


二,根据Slider位置,增加文件的大小


首先在OnInitDialog()中初始化Slider的相关属性:

	// TODO: 在此添加额外的初始化代码
	m_slider.SetRange(0,100);//设置滑块的取值范围
	m_slider.SetTicFreq(10);//设置滑块每格的大小
	m_slider.SetPos(0);//设置滑块的初始位置
	SetDlgItemText(IDC_EDIT_FILESIZE,"0");//设置编辑框的默认值


选择文件按钮功能函数:

void CAddFileSizeDlg::OnBnClickedBtnSelectfile()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog fileDlg(true);
	fileDlg.m_ofn.lpstrTitle = "选择你要增大的文件";
	fileDlg.m_ofn.lpstrFilter = "Executeable File(*.exe)\0*.exe\0\0";

	if(IDOK==fileDlg.DoModal())
	{
		m_filepath = fileDlg.GetPathName();
		SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);
	}

}


增大文件函数实现:

为Slider控件添加响应事件NM_RELEASEDCAPTURE


在事件函数中获取控件值:

void CAddFileSizeDlg::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	m_size = m_sliderNum;
	UpdateData(false);
	*pResult = 0;
}


单击增加按钮实现增大文件大小:

void CAddFileSizeDlg::OnBnClickedBtnDo()
{
	// TODO: 在此添加控件通知处理程序代码
	typedef HANDLE
		(WINAPI
		*CreateFileAT)(
		__in     LPCSTR lpFileName,
		__in     DWORD dwDesiredAccess,
		__in     DWORD dwShareMode,
		__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
		__in     DWORD dwCreationDisposition,
		__in     DWORD dwFlagsAndAttributes,
		__in_opt HANDLE hTemplateFile
		);

	CreateFileAT pCreateFileA=(CreateFileAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"CreateFileA");

	typedef DWORD
		(WINAPI
		*SetFilePointerT)(
		__in     HANDLE hFile,
		__in     LONG lDistanceToMove,
		__in_opt PLONG lpDistanceToMoveHigh,
		__in     DWORD dwMoveMethod
		);

	SetFilePointerT pSetFilePointer=(SetFilePointerT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"SetFilePointer");

	HANDLE hFile1;
	DWORD dwBytes1;
	hFile1 = pCreateFileA(m_filepath, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
	pSetFilePointer(hFile1, 0, NULL,FILE_END);  
	int ii = 0;
	int DesSize = m_slider.GetPos();
	char *szStrAdd;
	szStrAdd=new char[1024*1024];
	memset(szStrAdd,'.',1024*1024);	
	while(ii < DesSize)
	{

		typedef int
			(WINAPI
			*lstrlenAT)(
			__in LPCSTR lpString
			);

		lstrlenAT plstrlenA=(lstrlenAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"lstrlenA");
		WriteFile(hFile1, szStrAdd, plstrlenA(szStrAdd), &dwBytes1, NULL);
		ii++;	
	}
	MessageBox("增加文件体积成功");
	CloseHandle(hFile1);
}

另外i补充个我总喜欢犯糊涂的地方:

updateData(true)  //用窗口中的数据去初始化控件关联的变量

UpdateData(false);  //更新数据到窗口


源代码:


http://download.csdn.net/detail/eldn__/4920248


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值