📄 cryptapi_appdlg.cpp
字号:
// CryptAPI_AppDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "CryptAPI_App.h"
#include "CryptAPI_AppDlg.h"
#include "WinCrypt.h"
#include "CryptAPICommon.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCryptAPI_AppDlg 对话框
CCryptAPI_AppDlg::CCryptAPI_AppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCryptAPI_AppDlg::IDD, pParent)
, GLB_PROVHANDLE(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCryptAPI_AppDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBOPROV, cbProv);
DDX_Control(pDX, IDC_EDT_SRC, m_SrcPath);
DDX_Control(pDX, IDC_EDT_DESTINATE, m_DestPath);
}
BEGIN_MESSAGE_MAP(CCryptAPI_AppDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CCryptAPI_AppDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BTNENUMPROV, &CCryptAPI_AppDlg::OnBnClickedBtnenumprov)
ON_CBN_SELCHANGE(IDC_COMBOPROV, &CCryptAPI_AppDlg::OnCbnSelchangeComboprov)
// ON_BN_CLICKED(IDC_BTN_SRC, &CCryptAPI_AppDlg::OnBnClickedBtnSrc)
ON_BN_CLICKED(IDC_BTN_SRC, &CCryptAPI_AppDlg::OnBnClickedBtnSrc)
ON_BN_CLICKED(IDC_BTN_DESTINATE, &CCryptAPI_AppDlg::OnBnClickedBtnDestinate)
ON_BN_CLICKED(IDC_BTN_ENCRYPT, &CCryptAPI_AppDlg::OnBnClickedBtnEncrypt)
END_MESSAGE_MAP()
// CCryptAPI_AppDlg 消息处理程序
BOOL CCryptAPI_AppDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CCryptAPI_AppDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CCryptAPI_AppDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CCryptAPI_AppDlg::OnBnClickedButton1()
{
HCRYPTPROV hCryptProv;
LPCTSTR lpcProvName=NULL;
CString strSelText;
if(cbProv.GetCurSel()>=0)
{
cbProv.GetLBText(cbProv.GetCurSel(),strSelText);
lpcProvName=strSelText;
}
if(CryptAcquireContext(
&hCryptProv,
NULL,
lpcProvName,//TEXT("Gemplus GemSAFE Card CSP v1.0"),//
PROV_RSA_FULL,
0
))
{
::MessageBox(NULL,TEXT("CSP调用成功!"),TEXT("提示"),MB_ICONINFORMATION );
}
else
{
// if (GetLastError() == NTE_BAD_KEYSET)
{
if(CryptAcquireContext(
&hCryptProv,
NULL,
lpcProvName,
PROV_RSA_FULL,
CRYPT_NEWKEYSET))
{
::MessageBox(NULL,TEXT("建立新CSP容器成功!"),TEXT("提示"),MB_ICONINFORMATION );
}
else
{
::MessageBox(NULL,TEXT("建立新CSP容器失败!"),TEXT("提示"),MB_ICONEXCLAMATION );
return;
}
}
//::MessageBox(NULL,TEXT("CSP调用失败!"),TEXT("提示"),MB_ICONEXCLAMATION );
}
}
void CCryptAPI_AppDlg::OnBnClickedBtnenumprov()
{
// TODO: 在此添加控件通知处理程序代码
DWORD cbName;
DWORD dwType;
DWORD dwIndex;
LPWSTR pszName=NULL;
//-------------------
cbProv.Clear();
dwIndex=0;
while(CryptEnumProviders(
dwIndex,
NULL,
0,
&dwType,
NULL,
&cbName
))
{
if(!(pszName=(LPTSTR)LocalAlloc(LMEM_ZEROINIT,cbName)))
{
::MessageBox(NULL,TEXT("LocalAlloc失败!"),TEXT("提示"),MB_ICONEXCLAMATION );
exit(1);
}
// Get the provider name.
if (CryptEnumProviders(
dwIndex++,
NULL,
0,
&dwType,
pszName,
&cbName
))
{
/* printf (" %4.0d\t%s\n",dwType, pszName);
::MessageBox(NULL,pszName,TEXT("提示"),MB_ICONINFORMATION );*/
//IDC_COMBOPROV->Disabled=True;
cbProv.AddString(pszName);
}
else
{
printf("ERROR - CryptEnumProviders failed.\n");
exit(1);
}
LocalFree(pszName);
}
}
void CCryptAPI_AppDlg::OnCbnSelchangeComboprov()
{
// TODO: 在此添加控件通知处理程序代码
}
//void CCryptAPI_AppDlg::OnBnClickedBtnSrc()
//{
// // TODO: 在此添加控件通知处理程序代码
// //CString m_Path;
// //CFileDialog Dlg(TRUE);
// //if(Dlg.DoModal()==IDOK)
// //{
// // m_Path=Dlg.GetPathName();
// // UpdateData(FALSE);
// // edtSrcPath.SetWindowTextW(m_Path);
//
// //}
//}
void CCryptAPI_AppDlg::OnBnClickedBtnSrc()
{
// TODO: 在此添加控件通知处理程序代码
CString m_Path;
CFileDialog Dlg(TRUE);
if(Dlg.DoModal()==IDOK)
{
m_Path=Dlg.GetPathName();
UpdateData(FALSE);
m_SrcPath.SetWindowTextW(m_Path);
}
}
void CCryptAPI_AppDlg::OnBnClickedBtnDestinate()
{
// TODO: 在此添加控件通知处理程序代码
CString m_Path;
CFileDialog Dlg(FALSE);
if(Dlg.DoModal()==IDOK)
{
m_Path=Dlg.GetPathName();
UpdateData(FALSE);
m_DestPath.SetWindowTextW(m_Path);
}
}
void CCryptAPI_AppDlg::OnBnClickedBtnEncrypt()
{
// TODO: 在此添加控件通知处理程序代码
CString _SrcFileName,_DestFileName;
m_SrcPath.GetWindowTextW(_SrcFileName);
m_DestPath.GetWindowTextW(_DestFileName);
//-------------------
LPWSTR chrSrc,chrDest;
chrSrc=_SrcFileName.GetBuffer(_SrcFileName.GetLength());
chrDest=_DestFileName.GetBuffer(_DestFileName.GetLength());
//-------------------------------
char *chrPassword;
chrPassword="111";
if (EncryptFileX(chrSrc,chrDest,chrPassword))
MessageBox(TEXT("加密成功"),TEXT("系统提示"),0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -