📄 simtestdlg.cpp
字号:
// SIMTestDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "SIMTest.h"
#include "SIMTestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CSIMTestDlg 对话框
CSIMTestDlg::CSIMTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSIMTestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pNumList = &m_NumList;
}
void CSIMTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_NUMLIST, m_NumList);
DDX_Control(pDX, IDC_BUTTON_DEL, m_btnDelete);
}
BEGIN_MESSAGE_MAP(CSIMTestDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON_INIT, &CSIMTestDlg::OnBnClickedButtonInitSIM)
ON_BN_CLICKED(IDC_BUTTON_CANCEL, &CSIMTestDlg::OnBnClickedButtonCancel)
ON_BN_CLICKED(IDC_BUTTON_DEL, &CSIMTestDlg::OnBnClickedButtonDel)
ON_BN_CLICKED(IDC_BUTTON_STORAGE, &CSIMTestDlg::OnBnClickedButtonStorage)
ON_BN_CLICKED(IDC_BUTTON_BOOKSTATUS, &CSIMTestDlg::OnBnClickedButtonBookstatus)
ON_BN_CLICKED(IDC_BUTTON_READPHONE, &CSIMTestDlg::OnBnClickedButtonReadphone)
ON_BN_CLICKED(IDC_BUTTON_WRITEPHONE, &CSIMTestDlg::OnBnClickedButtonWritephone)
ON_BN_CLICKED(IDC_BUTTON_CLEARLIST, &CSIMTestDlg::OnBnClickedButtonClearlist)
ON_BN_CLICKED(IDC_BUTTON_LISTNUM, &CSIMTestDlg::OnBnClickedButtonListnum)
ON_BN_CLICKED(IDC_BUTTON_READSMS, &CSIMTestDlg::OnBnClickedButtonReadsms)
END_MESSAGE_MAP()
// CSIMTestDlg 消息处理程序
BOOL CSIMTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CSIMTestDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_SIMTEST_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_SIMTEST_DIALOG));
}
}
#endif
/*********************************************************************************************
* 名称: SimCallbackProc()
* 功能: SIM通告回调函数,响应因SIM的改变而发出的通告
* 参数: dwNotifyCode -- 输入,通告类型代码
* lpData -- 输入,通告类型的数据结构指针
* dwDataSize -- 输入,数据结构长度
* dwParam -- 输入,传递进SimInitialize()的参数
*
* 返回: --- 无
*
*********************************************************************************************/
void SimCallbackProc(DWORD dwNotifyCode, const void *lpData,
DWORD dwDataSize, DWORD dwParam)
{
// Handle a file change
if(dwNotifyCode == SIM_NOTIFY_FILE_REFRESH)
{
SIMFILEREFRESH *pfileRefresh = (SIMFILEREFRESH *)lpData;
TCHAR tchNotifyMessage[1024] = TEXT("\0");
if(!pfileRefresh)
return;
// Handle the file change notification
if(pfileRefresh->dwParams & SIM_PARAM_FILEREFRESH_FILECOUNT)
{
wsprintf(tchNotifyMessage, TEXT("%d files have changed"), pfileRefresh->dwFileCount);
MessageBoxW(NULL, tchNotifyMessage, TEXT("SIM File Change"), MB_OK);
}
// Get the DWORD address of the SIM files that have changed
if(pfileRefresh->dwParams & SIM_PARAM_FILEREFRESH_FILEARRAY)
{
DWORD dwFiles = 0;
for(dwFiles; dwFiles < pfileRefresh->dwFileCount; dwFiles++)
{
wsprintf(tchNotifyMessage, TEXT("File change #%d. File address: %d"), dwFiles,
pfileRefresh->rgdwAddress[dwFiles]);
MessageBoxW(NULL,tchNotifyMessage, TEXT("SIM Files Change"), MB_OK);
}
}
}
// Handle a phonebook change
else if(dwNotifyCode == SIM_NOTIFY_PBE_STORED ||
dwNotifyCode == SIM_NOTIFY_PBE_DELETED)
{
SIMPBECHANGE *pPBNotify = (SIMPBECHANGE *)lpData;
TCHAR tchNotifyMessage[1024] = TEXT("\0");
TCHAR tchPhonebook[256] = TEXT("\0");
if(!pPBNotify)
return;
switch(pPBNotify->dwStorage)
{
case SIM_PBSTORAGE_EMERGENCY:
wsprintf(tchPhonebook, TEXT("Emergency Number List"));
break;
case SIM_PBSTORAGE_FIXEDDIALING:
wsprintf(tchPhonebook, TEXT("Fixed Dialing List"));
break;
case SIM_PBSTORAGE_LASTDIALING:
wsprintf(tchPhonebook, TEXT("Last Numbered Dialed List"));
break;
case SIM_PBSTORAGE_OWNNUMBERS:
wsprintf(tchPhonebook, TEXT("Own Number List"));
break;
case SIM_PBSTORAGE_SIM:
wsprintf(tchPhonebook, TEXT("General List"));
break;
default:
wsprintf(tchPhonebook, TEXT("Unknown List"));
break;
}
// Build a message
wsprintf(tchNotifyMessage, TEXT("A phonebook entry in the %s at index %d has been "), tchPhonebook, pPBNotify->dwEntry);
// Type of notification
if(dwNotifyCode == SIM_NOTIFY_PBE_DELETED)
_tcscat(tchNotifyMessage, TEXT("deleted."));
else if(dwNotifyCode == SIM_NOTIFY_PBE_STORED)
_tcscat(tchNotifyMessage, TEXT("modified."));
}
return;
}
void CSIMTestDlg::OnBnClickedButtonCancel()
{
// TODO: 在此添加控件通知处理程序代码
// Close the SIM handle
if(m_hSim)
SimDeinitialize(m_hSim);
this->OnCancel();
}
/*********************************************************************************************
* 名称: OnBnClickedButtonInitSIM()
* 功能: 初始化SIM卡
* 参数: 无
*
* 返回: --- TRUE,成功
* FALSE,失败
*
*********************************************************************************************/
void CSIMTestDlg::OnBnClickedButtonInitSIM()
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr = S_OK;
BOOL bResult;
// Initialize and open the SIM w/o a callback
hr = SimInitialize( SIM_INIT_SIMCARD_NOTIFICATIONS,
SimCallbackProc,
0,
&m_hSim);
if(FAILED(hr))
{
ErrorHandle(hr);
MessageBoxW( TEXT("Could not open the SIM"), TEXT("Error"), MB_OK|MB_ICONERROR);
exit(1) ;
}
else
{
bResult = GetSimCaps();
if(bResult == TRUE)
{
MessageBoxW(_T("Init SIM Succeed! Get SIM Caps Succeed!"), _T("OK"), MB_OK|MB_ICONINFORMATION);
}
else
{
MessageBox(_T("SIM open Failed!"), _T("Error"), MB_OK|MB_ICONERROR);
}
}
//return TRUE;
}
/*********************************************************************************************
* 名称: GetSimCaps()
* 功能: 获取SIM卡信息。
* 参数: 无
*
* 返回: 无
*
*********************************************************************************************/
bool CSIMTestDlg::GetSimCaps()
{
// TODO: 在此添加控件通知处理程序代码
// Get the SIM capabilities
HRESULT hr = S_OK;
// The cbSize field must be set to the size of the SIMCAPS structure
//before calling the SimGetDevCaps() function.
memset(&m_simcaps, 0, sizeof(SIMCAPS));
m_simcaps.cbSize = sizeof(SIMCAPS);
hr = SimGetDevCaps( m_hSim,
SIM_CAPSTYPE_ALL,
&m_simcaps);
if(FAILED(hr))
{
//SimDeinitialize(m_hSim);
ErrorHandle(hr);
return FALSE;
}
else
{
return TRUE;
/*** 暂时不需要获取容量分配存储空间 ***
// Allocate PB usage cache
m_pbyteInUse = new BYTE[
(m_simcaps.dwMaxPBIndex - m_simcaps.dwMinPBIndex)/(sizeof(*m_pbyteInUse)*8)];
if (NULL != m_pbyteInUse)
{
MessageBoxW(_T("SIM SimGetDevCaps() Succeed."), _T("OK"), MB_OK);
}
***/
}
}
/*** ***
* 删除SIM卡条目,让此按钮和ListNum关联,在listnum中选择有效条目删除。未完成~~~
***/
void CSIMTestDlg::OnBnClickedButtonDel()
{
HRESULT hr = S_OK;
CString strTmp = _T("\0");
SIMPHONEBOOKENTRY simPhoneEntryRead;
for(DWORD dwIndex = m_simcaps.dwMinPBIndex ; dwIndex <= m_simcaps.dwMaxPBIndex; dwIndex++)
{
strTmp.Format(_T("%s"), simPhoneEntryRead.lpszText);
hr = SimReadPhonebookEntry( m_hSim, SIM_PBSTORAGE_SIM, dwIndex,&simPhoneEntryRead);
if( 0 == strTmp.Compare( _T("Jeremy"))) //如果
{
hr = SimDeletePhonebookEntry(m_hSim, SIM_PBSTORAGE_SIM, dwIndex);
if(FAILED(hr))
MessageBox(TEXT("Could not delete entry"), TEXT("Error"), MB_OK|MB_ICONERROR);
else
{
strTmp.Format(_T("Deleted: %d %s"), dwIndex, simPhoneEntryRead.lpszText);
m_pNumList->AddString(strTmp);
m_pNumList->UpdateData(TRUE);
m_pNumList->UpdateWindow();
}
}
}
}
void CSIMTestDlg::OnBnClickedButtonStorage()
{
// TODO: 在此添加控件通知处理程序代码
HRESULT hr = S_OK;
// Get the SIM general storage usage
DWORD dwUsed = 0, dwTotal = 0;
TCHAR tchStorage[1024] = TEXT("\0");
hr = SimGetSmsStorageStatus(m_hSim,
SIM_SMSSTORAGE_SIM,
&dwUsed,
&dwTotal);
if(FAILED(hr))
{
ErrorHandle(hr);
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -