⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yeetoomd5pdlg.cpp

📁 YeeTooMD5是免费的,开源的,它是在GPL许可下发布的,所有人都可以免费的使用它,修改它,并将它再次发布。 能够快速的计算出任意长度的字符串及任意类型文件的MD5值,并且用户能方便的检验结果.
💻 CPP
字号:
// YeeTooMD5PDlg.cpp : implementation file
//

#include "stdafx.h"
#include "YeeTooMD5P.h"
#include "YeeTooMD5PDlg.h"

#include "md5module.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CYeeTooMD5PDlg dialog

CYeeTooMD5PDlg::CYeeTooMD5PDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CYeeTooMD5PDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CYeeTooMD5PDlg)
	m_Text = _T("");
	m_MD5 = _T("");
	m_FileName = _T("");
	m_CheckMD5 = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CYeeTooMD5PDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CYeeTooMD5PDlg)
	DDX_Control(pDX, IDC_RESULT, m_Result);
	DDX_Text(pDX, IDC_TEXT, m_Text);
	DDX_Text(pDX, IDC_MD5, m_MD5);
	DDX_Text(pDX, IDC_FILENAME, m_FileName);
	DDX_Text(pDX, IDC_CHECKMD5, m_CheckMD5);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CYeeTooMD5PDlg, CDialog)
	//{{AFX_MSG_MAP(CYeeTooMD5PDlg)
	ON_EN_CHANGE(IDC_TEXT, OnChangeText)
	ON_BN_CLICKED(IDC_OPEN, OnOpen)
	ON_EN_CHANGE(IDC_FILENAME, OnChangeFilename)
	ON_EN_CHANGE(IDC_CHECKMD5, OnChangeCheckmd5)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CYeeTooMD5PDlg message handlers

BOOL CYeeTooMD5PDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CYeeTooMD5PDlg::OnChangeText() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	this->UpdateData(TRUE);
	m_MD5.Empty();
	
	int nLength=m_Text.GetLength();
	if(nLength>0)
	{
		unsigned char szmd5sum[16];
		md5_context ctx;
		md5_starts(&ctx);
		char *text;
		text=new char [m_Text.GetLength()];
		
		//转换
		int actuallength=0;	
		actuallength=WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)m_Text.GetBuffer(0),m_Text.GetLength(),(LPSTR)text,0,NULL,NULL);	
		delete text;
		
		text=new char [actuallength];
		ZeroMemory(text,actuallength);
		WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)m_Text.GetBuffer(0),m_Text.GetLength(),(LPSTR)text,actuallength,NULL,NULL);
		
		md5_update(&ctx,(unsigned char*)text,actuallength);
		md5_finish(&ctx,szmd5sum);
		
		delete text;

		char szChar[3];
		for(int i=0;i<16;i++)
		{
			_itoa(szmd5sum[i],szChar,16);
			if(strlen(szChar)==1)
				m_MD5+="0";
			m_MD5+=szChar;
		}
	}
	this->UpdateData(FALSE);
	
	if(m_MD5 == m_CheckMD5)
		m_Result.SetCheck(1);
	else
		m_Result.SetCheck(0);
	
}

void CYeeTooMD5PDlg::OnOpen() 
{
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,TEXT("All Files(*.*)|*.*||"));
	if(dlg.DoModal()==IDOK)
	{
		m_FileName=dlg.GetPathName();
	}
	this->UpdateData(FALSE);
	
	OnChangeFilename();
}

void CYeeTooMD5PDlg::OnChangeFilename() 
{
	this->UpdateData(TRUE);
	m_MD5.Empty();

	if(m_FileName.GetLength()<1)
		return;

	WIN32_FIND_DATA fData;

	if(FindClose(FindFirstFile(m_FileName,&fData)) == TRUE)
	{
		DWORD nFileSize=fData.nFileSizeHigh+fData.nFileSizeLow;
		HANDLE hFile=CreateFile(m_FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
		if(hFile != (HANDLE)0xffffffff)
		{
			char * lpFile=new char[nFileSize];
			DWORD dwRead;
			ReadFile(hFile,lpFile,nFileSize,&dwRead,NULL);
			CloseHandle(hFile);

			//get md5 sum - start
			unsigned char szmd5sum[16];
			md5_context ctx;
			md5_starts(&ctx);
			md5_update(&ctx,(unsigned char *)lpFile,nFileSize);
			md5_finish(&ctx,szmd5sum);

			char szChar[3];
			for(int i=0;i<16;i++)
			{
				_itoa(szmd5sum[i],szChar,16);
				if(strlen(szChar)==1)
					m_MD5+="0";
				m_MD5+=szChar;
			}
			//get md5 sum - end

			delete [] lpFile;
		}
	}
	this->UpdateData(FALSE);
	
	if(m_MD5 == m_CheckMD5)
		m_Result.SetCheck(1);
	else
		m_Result.SetCheck(0);
}

void CYeeTooMD5PDlg::OnChangeCheckmd5() 
{
	this->UpdateData(TRUE);
	if(m_MD5 == m_CheckMD5)
		m_Result.SetCheck(1);
	else
		m_Result.SetCheck(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -