📄 usbinfopage.cpp
字号:
pPopup->EnableMenuItem(ID_MENU_CREATEDIR,MF_BYCOMMAND|MF_GRAYED);
pPopup->EnableMenuItem(ID_MENU_POPFILE,MF_BYCOMMAND|MF_GRAYED);
pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED);
break;
case 2://文件
pPopup->EnableMenuItem(ID_MENU_DELDIR,MF_BYCOMMAND|MF_GRAYED);
// pPopup->EnableMenuItem(ID_MENU_POPFILE,MF_BYCOMMAND|MF_GRAYED);
// pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED);
break;
}
pPopup->TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN,
point.x, point.y, this, NULL);
menu.DestroyMenu();
// *pResult = 0;
}
void CUsbInfoPage::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM handle=m_Tree.GetSelectedItem();
if(handle==0)
return ;
DWORD info=m_Tree.GetItemData(handle);
if(!info)
{
GetFileDirInfo(1000,0);
return;//跟目录
}
ULONG id=GetID();
if(info==1)//目录
{
EPAS_STATUS m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,0,NULL);
if(OperateMsg("epas_ChangeDir",m_epsRet))
GetFileDirInfo(EPAS_DIR_BY_ID,id);//得到目录信息
}
if(info==2) //文件,移动当前目录为父窗口
{
BeginWaitCursor();
EPAS_STATUS m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,GetParentID(),NULL);
OperateMsg("epas_ChangeDir",m_epsRet);
//得到文件信息
GetFileDirInfo(0,id);
EndWaitCursor();
return;
}
BeginWaitCursor(); //目录
if(m_Tree.GetItemText(handle)=="Root")
id=0;
m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,id,NULL);
OperateMsg("epas_ChangeDir",m_epsRet);
EndWaitCursor();
*pResult = 0;
}
bool CUsbInfoPage::CreateDir(CString id)
{
EPAS_DIRINFO di;
ZeroMemory(&di,sizeof(EPAS_DIRINFO));
char iBuf[80]={0};
strcpy(iBuf,id);
sscanf(iBuf,"%lx",&di.ulID);
BeginWaitCursor();
m_epsRet=epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,0,NULL);
m_epsRet = epas_CreateDir(m_handle,0,NULL,NULL,&di,sizeof(di));
EndWaitCursor();
if(!OperateMsg("epas_CreateDir",m_epsRet))
return false;
else
return true;
}
void CUsbInfoPage::OnMenuCreatedir()
{
// TODO: Add your command handler code here
m_type=0;
m_List.AddMsg("请输入目录ID",M_WARING);
GetDlgItem(IDC_EDIT_INPUTID)->SetFocus();
}
void CUsbInfoPage::OnMenuDeldir()
{
// TODO: Add your command handler code here
ULONG id=GetID();
if(id==-1) return;
BeginWaitCursor();
m_epsRet = epas_DeleteDir(m_handle,EPAS_DIR_BY_LONG_ID,id,NULL);
EndWaitCursor();
if(!OperateMsg("epas_DeleteDir",m_epsRet))
return ;
GetDir();
GetFreeDevice();
((CUsbKeyApp * )AfxGetApp())->m_ChangeKey=true;
}
void CUsbInfoPage::OnMenuKeyfile()
{
// TODO: Add your command handler code here
BeginWaitCursor();
EPAS_FILEINFO fi;
unsigned char pucKey1[16];
unsigned char pucKey2[16];
unsigned char pucTarget[16];
unsigned long ulWritten;
UCHAR buf[2]={11};
UCHAR *p=buf;
MD5_HMAC(
NULL,
0,
p,
lstrlen((char*)p),
pucKey1,
pucKey2,
pucTarget
);
// Create first key file.
ZeroMemory(&fi, sizeof(EPAS_FILEINFO));
fi.ulID = 100;
fi.ulFileSize = 16;
fi.ucFileType = EPAS_FILETYPE_KEY;
fi.ucReadAccess = EPAS_ACCESS_NONE;
fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
m_epsRet = epas_CreateFile(
m_handle,
0,
&fi,
sizeof(EPAS_FILEINFO)
);
m_epsRet = epas_Write(
m_handle,
0,
0,
pucKey1,
16,
&ulWritten);
OperateMsg("epas_key1",m_epsRet);
// Create second key file.
ZeroMemory(&fi, sizeof(EPAS_FILEINFO));
fi.ulID = 200;
fi.ulFileSize = 16;
fi.ucFileType = EPAS_FILETYPE_KEY;
fi.ucReadAccess = EPAS_ACCESS_NONE;
fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
m_epsRet = epas_CreateFile(
m_handle,
0,
&fi,
sizeof(EPAS_FILEINFO)
);
m_epsRet = epas_Write(
m_handle,
0,
0,
pucKey2,
16,
&ulWritten);
OperateMsg("epas_key2",m_epsRet);
EndWaitCursor();
GetDir();
GetFreeDevice();
}
bool CUsbInfoPage::PutFile(CString id)
{
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"所有文件(*.*)|*.*||",NULL );
if(dlg.DoModal()!=IDOK) return false;
CString filename=dlg.GetPathName();
CFile File;
if(!File.Open(filename, CFile::modeRead | CFile::typeBinary))
return false;
int len=File.GetLength(); //得到文件大小
EPAS_FILEINFO fi;
ZeroMemory(&fi,sizeof(EPAS_FILEINFO));
BeginWaitCursor();
char iBuf[80]={0};
strcpy(iBuf,id);
sscanf(iBuf,"%lx",&fi.ulID);
fi.ucFileType = EPAS_FILETYPE_DATA;
fi.ulFileSize = len;
fi.ucReadAccess = EPAS_ACCESS_ANYONE;
fi.ucWriteAccess = EPAS_ACCESS_ANYONE;
fi.ucCryptAccess = EPAS_ACCESS_ANYONE;
m_epsRet = epas_CreateFile(
m_handle,//设备上下文
0,//必须为0
&fi,
sizeof(EPAS_FILEINFO)//fi参数缓冲区尺寸
);
if(!OperateMsg("epas_CreateFile",m_epsRet))
return false;
File.Seek(0,CFile::begin);
BYTE m_buf[8000]={0};
unsigned long num=File.Read(m_buf, 8000);
unsigned long ulWritten;
m_epsRet = epas_Write(
m_handle,//设备上下文
0,//必须为0
0,//相对文件头的偏移seek
m_buf,//保存文件内容的缓冲区
num,//要写入尺寸
&ulWritten//成功写入尺寸
);
OperateMsg("epas_Write",m_epsRet);
if(num!=ulWritten)
{
m_List.AddMsg("写入大小不相等",M_ERROR);
return false;
}
epas_CloseFile(m_handle);
OperateMsg("epas_CloseFile",m_epsRet);
EndWaitCursor();
return true;
}
void CUsbInfoPage::OnMenuPutfile()
{
// TODO: Add your command handler code here
m_type=1;
m_List.AddMsg("请输入文件ID",M_WARING);
GetDlgItem(IDC_EDIT_INPUTID)->SetFocus();
}
void CUsbInfoPage::OnMenuPopfile()
{
// TODO: Add your command handler code here
EPAS_FILEINFO fi;
unsigned long ulReaded;
BYTE pBuf[8000];
// First, you must open the file and get the information
// of it.
ULONG id=GetID();
if(id==-1) return;
BeginWaitCursor();
m_epsRet = epas_OpenFile(//打开文件
m_handle,
0,//基于当前权限
id,//文件ID
&fi,//文件结构
sizeof(EPAS_FILEINFO)//结构长度
);
if (OperateMsg("Open file",m_epsRet))
{
m_epsRet = epas_Read(//读文件
m_handle,
0,//必须为0
0,//偏移
pBuf,//目的缓冲区
fi.ulFileSize,//要读尺寸
&ulReaded//成功尺寸
);
if(!OperateMsg("Read file",m_epsRet))
{
EndWaitCursor();
return ;
}
}
else
{
EndWaitCursor();
return ;
}
EndWaitCursor();
CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"所有文件(*.*)|*.*||",NULL );
if(dlg.DoModal()!=IDOK) return ;
CString filename=dlg.GetPathName();
CFile File;
if(!File.Open(filename, CFile::modeCreate|CFile::modeWrite))
return ;
File.Write(pBuf,ulReaded);
File.Close();
m_List.AddMsg("操作成功");
}
void CUsbInfoPage::OnMenuDelfile()
{
// TODO: Add your command handler code here
ULONG id=GetID();
if(id==-1) return;
BeginWaitCursor();
m_epsRet = epas_DeleteFile(
m_handle,
0,//必须为0
id//文件ID
);
if(!OperateMsg("del file",m_epsRet))
return ;
EndWaitCursor();
GetDir();
GetFreeDevice();
((CUsbKeyApp * )AfxGetApp())->m_ChangeKey=true;
}
bool CUsbInfoPage::GetAccessInfo(BYTE * create,BYTE * del,BYTE *max, BYTE *counter)
{
EPAS_ACCESSINFO aInfo;
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_ACCESSINFO,NULL,&aInfo,sizeof(aInfo));
if(!OperateMsg("epas_GetProperty",m_epsRet))
return false;
*create=aInfo.ucCreateAccess;
*del=aInfo.ucDeleteAccess;
*max=aInfo.ucMaxPinRetries;
*counter=aInfo.ucCurPinCounter;
return true;
}
bool CUsbInfoPage::SetProperty(BYTE * create, BYTE * del)
{
BYTE crea,delte,max,counter;
GetAccessInfo(&crea,&delte,&max,&counter);
EPAS_ACCESSINFO ai;
ZeroMemory(&ai,sizeof(ai));
ai.ucCreateAccess = *create;
ai.ucDeleteAccess = *del;
ai.ucMaxPinRetries = max;
ai.ucCurPinCounter = counter;
m_epsRet = epas_SetProperty(m_handle,
EPAS_PROP_ACCESSINFO,
NULL,
&ai,
sizeof(ai));
return OperateMsg("epas_SetProperty",m_epsRet);
}
BOOL CUsbInfoPage::OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
GetDir();
GetFreeDevice();
return CPropertyPage::OnSetActive();
}
void CUsbInfoPage::OnBOk() //执行操作
{
// TODO: Add your control notification handler code here
if(m_type==-1)
return;
CString id;
GetDlgItemText(IDC_EDIT_INPUTID,id);
if(id=="")
{
m_List.AddMsg("ID为空",M_WARING);
return;
}
if(m_type==0)//目录
{
if(CreateDir(id))
m_List.AddMsg("建立目录成功");
else
m_List.AddMsg("建立目录失败",M_ERROR);
}
else if(m_type==1)//文件
{
if(PutFile(id))
m_List.AddMsg("上传文件成功");
else
m_List.AddMsg("上传文件失败",M_ERROR);
}
m_type=-1;
GetDir();
GetFreeDevice();
}
void CUsbInfoPage::OnBCanle() //取消操作
{
// TODO: Add your control notification handler code here
m_type=-1;
}
bool CUsbInfoPage::Format()
{
BeginWaitCursor();
m_epsRet = epas_DeleteDir(m_handle,EPAS_DIR_BY_LONG_ID,EPAS_ROOT_DIR,NULL);
EndWaitCursor();
if(OperateMsg("FORMAT",m_epsRet))
return true;
else
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -