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

📄 demonkidlldlg.cpp

📁 手机短信二次开发接口
💻 CPP
字号:
// DemoNkiDllDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DemoNkiDll.h"
#include "DemoNkiDllDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#include "NkiDll/NkiDll.h"

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoNkiDllDlg dialog

CDemoNkiDllDlg::CDemoNkiDllDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDemoNkiDllDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDemoNkiDllDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_bConnect = false;   //尚未连接
}

void CDemoNkiDllDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoNkiDllDlg)
	DDX_Control(pDX, IDC_ASYN, m_B_Asyn);
	DDX_Control(pDX, IDC_HANDFREE, m_B_HandFree);
	DDX_Control(pDX, IDC_REPORT, m_B_Report);
	DDX_Control(pDX, IDC_FILENAME, m_E_FileName);
	DDX_Control(pDX, IDC_PORT, m_L_Port);
	DDX_Control(pDX, IDC_MOBILE, m_L_Mobile);
	DDX_Control(pDX, IDC_CONNECTTYPE, m_L_ConnectType);
	DDX_Control(pDX, IDC_CONNECT, m_B_Connect);
	DDX_Control(pDX, IDC_SMCA, m_E_Smca);
	DDX_Control(pDX, IDC_NUM, m_E_No);
	DDX_Control(pDX, IDC_MSG, m_E_Msg);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDemoNkiDllDlg, CDialog)
	//{{AFX_MSG_MAP(CDemoNkiDllDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CONNECT, OnConnect)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_BN_CLICKED(IDC_GET, OnGet)
	ON_BN_CLICKED(IDC_SMSNUM, OnSmsnum)
	ON_BN_CLICKED(IDC_RECVNUM, OnRecvnum)
	ON_BN_CLICKED(IDC_READSIM, OnReadsim)
	ON_BN_CLICKED(IDC_CLEARSIM, OnClearsim)
	ON_BN_CLICKED(IDC_GETIMEI, OnGetimei)
	//}}AFX_MSG_MAP
	ON_MESSAGE( SMS_SUB  , On_Sms_Sub )
	ON_MESSAGE( SMS_RECV , On_Sms_Recv )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoNkiDllDlg message handlers

BOOL CDemoNkiDllDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	CButton *  pButton = (CButton *)GetDlgItem( IDC_MSG_TXT );
	pButton->SetCheck(true);


	m_E_Smca.SetWindowText( "+8613800200500" );
	m_E_No.SetWindowText( "139" );
	m_E_Msg.SetWindowText("欢迎访问http://www.mobset.com");

	m_L_Mobile.SetCurSel(0);
	m_L_ConnectType.SetCurSel(0);
	m_L_Port.SetCurSel(0);
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDemoNkiDllDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDemoNkiDllDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDemoNkiDllDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CDemoNkiDllDlg::OnConnect() 
{
    if ( m_bConnect )  //如果已经连接,则为断开
	{
		Sms_Exit();
		m_B_Connect.SetWindowText( "连接(&C)" );
		m_bConnect = false;
		return ;
	}
	char szSmca[32];
	char szBuf[256];
	m_E_Smca.GetWindowText( szSmca , sizeof(szSmca) );
	if ( lstrlen( szSmca ) <= 0 )
	{
		MessageBox( "短信中心输入错误!" , "错误" , MB_ICONWARNING|MB_OK );
		m_E_Smca.SetFocus();
		return ;
	}

	long lMobileType = m_L_Mobile     .GetCurSel() == 0 ? MOBILE_GSM    : MOBILE_NOKIA ;  //取得当前选择的手机类型
	long lConnectType= m_L_ConnectType.GetCurSel() == 0 ? CONNECT_CABLE : CONNECT_IRDA ;  //取得当前选择的连接方式
	long lPort       = m_L_Port.GetCurSel() + 1; //取得连接端口号

	//初始化短信接口
	int lRec = Sms_Init( lMobileType , lConnectType , lPort , 15 , szSmca , this->GetSafeHwnd() );
	if ( lRec<0 )
	{
		switch( lRec )
		{
		case -1:
			 lstrcpy( szBuf , "初始化短信接口错误:连接串口失败!" );
			 break;
		case -2:
			 lstrcpy( szBuf , "初始化短信接口错误:初始化红外连接错误!" );
			 break;
		case -3:
			 lstrcpy( szBuf , "初始化短信接口错误:检测不到手机!" );
			 break;
		case -4:
			 lstrcpy( szBuf , "初始化短信接口错误:加密狗错误!" );
			 break;
		default:
			 lstrcpy( szBuf , "初始化短信接口错误:未知错误!" );
			 break;
		}
		MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK );
		return ;
	}
	else
	{
		char szName[32]; 
		Sms_GetMobileName( szName );   //取手机名称
		m_B_Connect.SetWindowText( "断开(&C)" );
		m_bConnect = true;
		wsprintf( szBuf , "初始化短消息接口成功,手机型号为:%s!" , szName );
		MessageBox( szBuf );
		return ;
	}
}

LONG CDemoNkiDllDlg::On_Sms_Sub( WPARAM wParam , LPARAM lParam )
{
	long lRec = wParam;
	long lSeq = lParam;
	char szBuf[256];
	if ( lRec >= 0 )  //发送成功或提交成功
	{
		wsprintf( szBuf , "序列号为:%d的短信已成功发送,发送数目为:%d!" , lSeq,lRec );
		MessageBox( szBuf , "信息" , MB_OK );
		return 1;
	}
	else
	{
		//发送失败
		switch( lRec )
		{
		case -1:
			 lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" );
			 break;
		case -2:
			 lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" );
			 break;
		case -3:
			 lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" );
			 break;
		default:
			 lstrcpy( szBuf , "发送失败,未知错误!" );
			 break;
		}
	}
	MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK );
	return 1;
}

LONG CDemoNkiDllDlg::On_Sms_Recv( WPARAM wParam , LPARAM lParam )
{
	//因为NkiDll是通过PostMessage来传消息的,所以必须尽快将原SMS_Recv的内容Copy过来
	SMS_Recv * Sms = (SMS_Recv *)wParam;
	char szBuf[512];
	wsprintf( szBuf , "你收到一短信,内容如下: \n短信中心: %s \n发送者  : %s\n发送时间: %s\n短信内容: %s "  \
					   , Sms->szSmsc , Sms->szSender , Sms->szTime , Sms->szMsg );

	AfxMessageBox( szBuf);
	return 1;
}

void CDemoNkiDllDlg::OnSend() 
{
	if (!m_bConnect )
	{
		MessageBox( "尚未连接,请按连接!" );
		return;
	}
	char szNo[32];
	char szMsg[512];
	char szBuf[256];
	char szFile[256];

	BOOL bAsyn = m_B_Asyn.GetCheck();

	m_E_No  .GetWindowText( szNo   , sizeof( szNo ) );
	m_E_Msg .GetWindowText( szMsg  , sizeof(szMsg ) );
	m_E_FileName.GetWindowText( szFile , sizeof(szFile));
	if ( lstrlen( szNo ) <= 0 )
	{
		MessageBox( "发送目标号码输入错误!" , "错误" , MB_ICONWARNING|MB_OK );
		m_E_No.SetFocus();
		return ;
	}
	if ( lstrlen( szMsg ) <= 0 )
	{
		MessageBox( "发送内容不能不能为空!" , "错误" , MB_ICONWARNING|MB_OK );
		m_E_Msg.SetFocus();
		return ;
	}


	long lMsgType = 0;

	CButton * pButton = (CButton *)GetDlgItem( IDC_MSG_PICT );
	if (pButton->GetCheck())
		lMsgType = SMARTSMS_NKI_PICT;   //增值短信类型为NOKIA图片短信
	pButton = (CButton *)GetDlgItem( IDC_MSG_LOGO );
	if (pButton->GetCheck())
		lMsgType = SMARTSMS_NKI_LOGO;   //增值短信类型为NOKIA待机图片
	pButton = (CButton *)GetDlgItem( IDC_MSG_CLI );
	if (pButton->GetCheck())
		lMsgType = SMARTSMS_NKI_CLI;   //增值短信类型为NOKIA分组图片
	pButton = (CButton *)GetDlgItem( IDC_MSG_MIDI );
	if (pButton->GetCheck())
		lMsgType = SMARTSMS_NKI_MIDI;   //增值短信类型为NOKIA铃声消息
	
	if ( lMsgType == 0 )   //发送文字消息
	{
		int lRec = Sms_Send( szNo , szMsg , m_B_Report.GetCheck() , m_B_HandFree.GetCheck() , bAsyn );
		if ( lRec >= 0 )  //发送成功或提交成功
		{
			if ( bAsyn) 
				wsprintf( szBuf , "短信已成功提交,发送序列号为:%d请等待返回发送结果!" , lRec);
			else
				wsprintf( szBuf , "短信已成功发送,发送数目为:%d!" , lRec );
			MessageBox( szBuf , "信息" , MB_OK );
			return ;
		}
		else
		{
			//发送失败
			switch( lRec )
			{
			case -1:
				lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" );
				break;
			case -2:
				lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" );
				break;
			case -3:
				lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" );
				break;
			case -4:
				lstrcpy( szBuf , "接口还没初始化,请先调用Sms_Init!" );
				break;
			default:
				lstrcpy( szBuf , "发送失败,未知错误!" );
				break;
			}
		}
	}
	else   //发送增值短消息
	{
		int lRec = Sms_SendSmart( szNo , szFile , szMsg , lMsgType , bAsyn );
		if ( lRec >= 0 )  //发送成功或提交成功
		{
			if ( bAsyn) 
				wsprintf( szBuf , "短信已成功提交,发送序列号为:%d请等待返回发送结果!" , lRec);
			else
				wsprintf( szBuf , "短信已成功发送,发送数目为:%d!" , lRec );
			MessageBox( szBuf , "信息" , MB_OK );
			return ;
		}
		else
		{
			//发送失败

			switch( lRec )
			{
			case -1:
				lstrcpy( szBuf , "发送失败,可能是短消息中心有错!" );
				break;
			case -2:
				lstrcpy( szBuf , "发送超时,可能是串口与手机的连接出错!" );
				break;
			case -3:
				lstrcpy( szBuf , "上次短信尚未发送完毕,暂不能发送!" );
				break;
			case -4:
				lstrcpy( szBuf , "接口还没初始化,请先调用Sms_Init!" );
				break;
			case -6:
				lstrcpy( szBuf , "试用版没有发送Logo与铃声的功能!" );
				break;
			case -7:
				lstrcpy( szBuf , "增值短信类型不正确!" );
				break;
			case -8:
				lstrcpy( szBuf , "打开图像文件错误!" );
				break;
			case -9:
				lstrcpy( szBuf , "图像太大,现在只能处理宽或高小于128像点的图像!" );
				break;
			case -10:
				lstrcpy( szBuf , "图像颜色太高,现在只能处理单色位图!" );
				break;
			case -11:
				lstrcpy( szBuf , "取位图数据出错!" );
				break;
			case -12:
				lstrcpy( szBuf , "生成铃声失败,请检查文件!" );
				break;
			case -13:
				lstrcpy( szBuf , "发送的图片太大,正常值是78*14!" );
				break;
			default:
				lstrcpy( szBuf , "发送失败,未知错误!" );
				break;
			}
		}
	}
	MessageBox( szBuf , "错误" , MB_ICONWARNING|MB_OK );
}

void CDemoNkiDllDlg::OnDelete() 
{
	long lRet = Sms_Delete(1);  //删除第一条记录
	if ( lRet == 0 )
		MessageBox( "删除第一条短消息记录成功!" );
	else
	{
		char Buf[256];
		wsprintf( Buf , "删除短消息记录失败,错误号为:%d" , lRet );
		MessageBox( Buf );
	}
}

void CDemoNkiDllDlg::OnGet() 
{
	SMS_Recv Sms;
	long l = Sms_Get(&Sms);
	char szBuf[512];
	if ( l>=0 )
	{
		wsprintf( szBuf , "取到一短信,内容如下: \n短信中心: %s \n发送者  : %s\n发送时间: %s\n短信内容: %s \n队列剩余短信数:%d"  \
			, Sms.szSmsc , Sms.szSender , Sms.szTime , Sms.szMsg , l);
	}
	else
	{
		wsprintf(szBuf , "取短消息失败:短信队列为空!" );
	}
	MessageBox(szBuf , "信息" , MB_OK );

}

void CDemoNkiDllDlg::OnSmsnum() 
{
	char Buf[256];
	wsprintf( Buf , "此手机SIM卡的短信容量为:%d!" , Sms_GetSimNum() );
	MessageBox(Buf , "信息" , MB_OK );
}

void CDemoNkiDllDlg::OnRecvnum() 
{
	char Buf[256];
	wsprintf( Buf , "接收队列中的短信数量为:%d!" , Sms_GetRecvNum() );
	MessageBox(Buf , "信息" , MB_OK );
}

void CDemoNkiDllDlg::OnReadsim() 
{
	long lRet = Sms_GetSimSms();               //取Sim卡短消息

	char szMsg[64];
	switch( lRet )
	{
	case -2:
		 lstrcpy( szMsg , "取Sim卡短消息失败:通讯超时!" );
		 break;
	case -4:
		 lstrcpy( szMsg , "取Sim卡短消息失败:接口还没初始化,请调用Sms_Init!" );
		 break;
	default:
		 wsprintf( szMsg , "取Sim卡短消息成功,取回来记录数为:%d,已贮存于接收队列!" , lRet );
		 break;
	}
	MessageBox(szMsg , "信息" , MB_OK );
}

void CDemoNkiDllDlg::OnClearsim() 
{
	long lRet = Sms_ClearSim();               //清空Sim卡短消息

	char szMsg[64];
	switch( lRet )
	{
	case 0:
		 lstrcpy( szMsg , "已成功清空Sim卡短消息!" );
		 break;
	case -2:
		 lstrcpy( szMsg , "清空Sim卡短消息失败:通讯超时!" );
		 break;
	case -4:
		 lstrcpy( szMsg , "清空Sim卡短消息失败:接口还没初始化,请调用Sms_Init!" );
		 break;
	default:
		 lstrcpy( szMsg , "未知错误" );
		 break;
	}
	MessageBox(szMsg , "信息" , MB_OK );
}

void CDemoNkiDllDlg::OnGetimei() 
{
	char szMsg[64];
	char szIMEI[32];
	long lRet = Sms_GetIMEI(szIMEI);  //取IMEI
	if ( lRet == 0 )
	{
		wsprintf( szMsg , "取IMEI成功,IMEI为:%s" , szIMEI );
		MessageBox( szMsg );
	}
	else
	{
		wsprintf( szMsg , "取IMEI失败,错误号为:%d" , lRet );
		MessageBox( szMsg );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -