?? usbinfopage.cpp
字號:
// UsbInfoPage.cpp : implementation file
//
#include "stdafx.h"
#include "UsbKey.h"
#include "UsbInfoPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUsbInfoPage property page
IMPLEMENT_DYNCREATE(CUsbInfoPage, CPropertyPage)
CUsbInfoPage::CUsbInfoPage() : CPropertyPage(CUsbInfoPage::IDD)
{
//{{AFX_DATA_INIT(CUsbInfoPage)
//}}AFX_DATA_INIT
m_handle=((CUsbKeyApp * )AfxGetApp())->m_handle;
m_type=-1;
}
CUsbInfoPage::~CUsbInfoPage()
{
}
void CUsbInfoPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUsbInfoPage)
DDX_Control(pDX, IDC_LIST_INFO, m_List);
DDX_Control(pDX, IDC_TREE, m_Tree);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUsbInfoPage, CPropertyPage)
//{{AFX_MSG_MAP(CUsbInfoPage)
ON_NOTIFY(NM_RCLICK, IDC_TREE, OnRclickTree)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
ON_COMMAND(ID_MENU_CREATEDIR, OnMenuCreatedir)
ON_COMMAND(ID_MENU_DELDIR, OnMenuDeldir)
ON_COMMAND(ID_MENU_KEYFILE, OnMenuKeyfile)
ON_COMMAND(ID_MENU_POPFILE, OnMenuPopfile)
ON_COMMAND(ID_MENU_DELFILE, OnMenuDelfile)
ON_COMMAND(ID_MENU_PUTFILE, OnMenuPutfile)
ON_BN_CLICKED(IDC_B_OK, OnBOk)
ON_BN_CLICKED(IDC_B_CANLE, OnBCanle)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////
bool CUsbInfoPage::OperateMsg(CString operand,EPAS_STATUS status)//狀態,何種操作
{
CString info;
bool b_result=false;
switch( status )
{
case FT_SUCCESS:
info="操作成功";
b_result=true;
break;
case FT_CANNOT_OPEN_DRIVER:
info=("Error: Can't open the driver");
break;
case FT_INVALID_DRVR_VERSION:
info=("Error : Driver version not supported.");
break;
case FT_INVALID_COMMAND:
info= ("Error : Invalid command sent to API.");
break;
case FT_ACCESS_DENIED:
info= ("Error : Access denied.");
break;
case FT_ALREADY_ZERO:
info= ("Error : Counter already zero.");
break;
case FT_UNIT_NOT_FOUND:
info= ("Error : Device not found.");
break;
case FT_DEVICE_REMOVED:
info= ("Error : Device removed.");
break;
case FT_COMMUNICATIONS_ERROR:
info= ("Error : Device communication error.");
break;
case FT_DIR_NOT_FOUND:
info= ("Error : Directory does not exist.");
break;
case FT_FILE_NOT_FOUND:
info= ("Error : File not found.");
break;
case FT_MEM_CORRUPT:
info= ("Error : Device memory is corrupted.");
break;
case FT_INTERNAL_HW_ERROR:
info= ("Error : Internal hardware error.");
break;
case FT_INVALID_RESP_SIZE:
info= ("Error : Invalid response received from the device.");
break;
case FT_PIN_EXPIRED:
info= ("Error : PIN retry attempts has expired.");
break;
case FT_ALREADY_EXISTS:
info= ("Error : Directory or file already exist.");
break;
case FT_NOT_ENOUGH_MEMORY:
info= ("Error : Not enough memory to perform the operation.");
break;
case FT_INVALID_PARAMETER:
info= ("Error : Invalid parameter sent to API.");
break;
case FT_INPUT_TOO_LONG:
info= ("Error : Input data is too long.");
break;
case FT_INVALID_FILE_SELECTED:
info= ("Error : Invalid file selected or operation.");
break;
case FT_DEVICE_IN_USE:
info= ("Error : The device is currently in use.");
break;
case FT_INVALID_API_VERSION:
info= ("Error : The version of this library is not supported.");
break;
case FT_TIME_OUT_ERROR:
info= ("Error : Communication time-out.");
break;
case FT_ITEM_NOT_FOUND:
info= ("Error : Item not found.");
break;
case FT_COMMAND_ABORTED:
info= ("Error : Communication error, command aborted.");
break;
case FT_INVALID_STATUS:
info= ("Error : Invalid status.");
break;
default:
info= ("Error : An unknown error occurred.");
}
if(b_result!=true)
m_List.AddMsg(operand+" "+info,M_ERROR);
return b_result;
}
/////////////////////////////////////////////////////////////////////////////
// CUsbInfoPage message handlers
bool CUsbInfoPage::ListDir(unsigned long parDid,HTREEITEM hItem)//查找目錄結構
{
EPAS_STATUS retval = FT_SUCCESS;
EPAS_FILEINFO fi;
ZeroMemory(&fi,sizeof(fi));
retval = epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,parDid,NULL);
if(!OperateMsg("epas_ChangeDir",retval))
return false;
for(int i=0;i<255;i++)
{
retval = epas_Directory(m_handle,0,i,&fi,sizeof(fi));
if(FT_SUCCESS!=retval)
break;
if(EPAS_FILETYPE_DIR == fi.ucFileType)
{
CString strID;
strID.Format("%X",fi.ulID);
HTREEITEM hItemB=m_Tree.InsertItem(strID,1,2,hItem);
m_Tree.SetItemData(hItemB,1);//目錄1
ListDir(fi.ulID,hItemB);
retval = epas_ChangeDir(m_handle,EPAS_DIR_BY_LONG_ID,parDid,NULL);
if(!OperateMsg("epas_ChangeDir",retval))
return false;
}
if(EPAS_FILETYPE_DATA == fi.ucFileType)
{
CString strID;
strID.Format("%X",fi.ulID);
HTREEITEM hItemA=m_Tree.InsertItem(strID,3,3,hItem);
m_Tree.SetItemData(hItemA,2);//文件2
}
if(EPAS_FILETYPE_KEY== fi.ucFileType)//密藥
{
CString strID;
strID.Format("%X",fi.ulID);
HTREEITEM hItemA=m_Tree.InsertItem(strID,4,4,hItem);
m_Tree.SetItemData(hItemA,2);//文件2
}
if(EPAS_FILETYPE_UNUSED == fi.ucFileType)
break;
}
m_Tree.Expand(hItem,TVE_EXPAND);
m_Tree.SetRedraw(TRUE);
return true;
}
bool CUsbInfoPage::GetDir() //取得目錄結構
{
// TODO: Add your control notification handler code here
m_Tree.SetRedraw(FALSE);
m_Tree.DeleteAllItems();
HTREEITEM m_hRoot=m_Tree.InsertItem("Root",0,0);
m_Tree.SetItemData(m_hRoot,0);//跟目錄
return ListDir(0,m_hRoot);
}
bool CUsbInfoPage::GetSysInfo()
{
EPAS_SYSINFO sysInfo;
ZeroMemory(&sysInfo,sizeof(sysInfo));
EPAS_STATUS m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_SYSINFO,NULL,&sysInfo,sizeof(sysInfo));
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Free memory space: %d bytes",sysInfo.ulFreeSpace);
m_FreeDevice=sysInfo.ulFreeSpace;//得到剩余磁盤空間
printf("\n=>> Max directory levels: %d",sysInfo.ucMaxDirLevels);
printf("\n=>> File system type: %d",sysInfo.ucFileSysType);
}
/*
EPAS_VERSIONINFO version;
ZeroMemory(&version,sizeof(version));
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_VERSIONINFO,NULL,&version,sizeof(version));
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Firmware Version: %d.%d\n=>> Product Code: %X",
version.ucFwVerMajor,
version.ucFwVerMinor,
version.ucProductCode);
}
unsigned long capa = 0;
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_CAPABILITIES,NULL,&capa,sizeof(capa));
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Capabilities: %X",capa);
}
unsigned long memSize = 0;
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_MEM_SIZE,NULL,&memSize,sizeof(memSize));
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Total memory size: %d bytes",memSize);
}
char fName[EPAS_FRIENDLY_NAME_SIZE+1];
ZeroMemory(fName,EPAS_FRIENDLY_NAME_SIZE);
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_FRIENDLY_NAME,NULL,fName,EPAS_FRIENDLY_NAME_SIZE);
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Friendly token name: %s",fName);
}
unsigned long sn[2];
m_epsRet = epas_GetProperty(m_handle,EPAS_PROP_SERNUM,NULL,sn,sizeof(sn));
if(OperateMsg("epas_GetProperty",m_epsRet))
{
printf("\n=>> Hardware serial number: 0x%08lX%08lX",sn[0],sn[1]);
}
*/ return true;
}
void CUsbInfoPage::GetFreeDevice()
{
GetSysInfo();
CString strFree;
strFree.Format("%d",m_FreeDevice);
GetDlgItem(IDC_EDIT)->SetWindowText(strFree);
}
ULONG CUsbInfoPage::GetID()//得到文件、目錄ID
{
HTREEITEM handle=m_Tree.GetSelectedItem();
if(handle==0)
return -1;
CString selectF=m_Tree.GetItemText(handle);
char iBuf[80]={0};
ULONG id;
strcpy(iBuf,selectF);
sscanf(iBuf,"%lx",&id);
return id;
}
ULONG CUsbInfoPage::GetParentID()//得到父id
{
HTREEITEM handle=m_Tree.GetSelectedItem();
if(handle==0)
return -1;
ULONG id;
HTREEITEM hParent=m_Tree.GetParentItem(handle);
CString selectF=m_Tree.GetItemText(hParent);
if(m_Tree.GetItemText(hParent)=="Root")
id=0;
else
{
char iBuf[80]={0};
strcpy(iBuf,selectF);
sscanf(iBuf,"%lx",&id);
}
return id;
}
CString CUsbInfoPage::Conver(int i)
{
if(i==0)
return "任何人";
if(i==1)
return "用戶";
if(i==2)
return "管理員";
if(i==7)
return "禁止";
else
return "不知道";
}
void CUsbInfoPage::GetFileDirInfo(UINT type,DWORD id)//得到目錄、文件信息
{
if(type==1000)//跟目錄
{
SetDlgItemText(IDC_EDIT_ID,"ROOT");
SetDlgItemText(IDC_EDIT_TYPE,"ROOT");
SetDlgItemText(IDC_EDIT_SPACE,"ROOT");
SetDlgItemText(IDC_EDIT_READ,"ROOT");
SetDlgItemText(IDC_EDIT_WRITE,"ROOT");
SetDlgItemText(IDC_EDIT_CRYPT,"ROOT");
return;
}
EPAS_FILEINFO fileInfo;
m_epsRet=epas_GetFileInfo(m_handle,type,id,0,&fileInfo,sizeof(EPAS_FILEINFO));
if(OperateMsg("epas_GetFileInfo",m_epsRet))
{
char buf[10]={0};
SetDlgItemText(IDC_EDIT_ID,itoa(fileInfo.ulID,buf,16));
SetDlgItemText(IDC_EDIT_TYPE,itoa(fileInfo.ucFileType,buf,10));
SetDlgItemText(IDC_EDIT_SPACE,itoa(fileInfo.ulFileSize,buf,10));
SetDlgItemText(IDC_EDIT_READ,Conver(fileInfo.ucReadAccess));
SetDlgItemText(IDC_EDIT_WRITE,Conver(fileInfo.ucWriteAccess));
SetDlgItemText(IDC_EDIT_CRYPT,Conver(fileInfo.ucCryptAccess));
}
}
BOOL CUsbInfoPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
m_imgList.Create(24,24,TRUE|ILC_COLOR8,2,2);
HICON hIcon = NULL;
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON_ROOT), IMAGE_ICON, 24, 24, 0);
m_imgList.Add(hIcon);
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON_DIRC), IMAGE_ICON, 24, 24, 0);
m_imgList.Add(hIcon);
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON_DIRO), IMAGE_ICON, 24, 24, 0);
m_imgList.Add(hIcon);
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICONFILE), IMAGE_ICON, 24, 24, 0);
m_imgList.Add(hIcon);
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICONKEY), IMAGE_ICON, 24, 24, 0);
m_imgList.Add(hIcon);
m_Tree.SetImageList(&m_imgList,TVSIL_NORMAL);
// m_Tree.SetBkColor(RGB(200,100,0));
epas_ResetSecurityState(m_handle,0);
GetDir();
GetFreeDevice();
// GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CUsbInfoPage::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
HTREEITEM handle=m_Tree.GetSelectedItem();
if(handle==NULL) return;
// m_Tree.SetCheck(handle,TRUE);
DWORD info=m_Tree.GetItemData(handle);
POINT point;
GetCursorPos(&point);
CMenu menu;
menu.LoadMenu(IDR_MENU_INFO);
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup);
// if(m_VerifySo==false)
// pPopup->EnableMenuItem(ID_MENU_FORMAT,MF_BYCOMMAND|MF_GRAYED);
switch(info)
{
case 0: //根目錄
pPopup->EnableMenuItem(ID_MENU_DELDIR,MF_BYCOMMAND|MF_GRAYED);
pPopup->EnableMenuItem(ID_MENU_DELFILE,MF_BYCOMMAND|MF_GRAYED);
break;
case 1://目錄
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -