做免杀的同学可能都会吧,增大文件体积防止云上传是个不错的方法
功能界面:
选择文件,是对话框支持文件拖放(详情见: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