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

📄 simtestdlg.cpp

📁 Windows Mobile 6下的SIM卡操作测试程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -