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

📄 wsminterface.h

📁 手机发送短信的Activex控件
💻 H
字号:
// WSMInterface.h: interface for the CWSMInterface class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_)
#define AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "WSerialComm.h"
#include "WMsgFrameParser.h"
#include "WAtCmdResult.h"
#include "WMsgSentHistory.h"

const char AT_ECHO_OFF[] = "ATE0\r\n";
const char AT_SET_TEXT_MODE[] =  "AT+CMGF=1\r\n";
const char AT_PASSIVE_RECEIVE_MODE[] = "AT+CNMI=3,2,2,0,0\r\n";
const char AT_SET_SMS_CENTER[] = "AT+CSCA=\"%number%\"\r\n";
const char AT_SEND_MSG[] = "AT+CMGS=\"%number%\"\r\n";
const char AT_SHORT_MSG_END[] = "\x1A\r\n";

const DWORD ERR_TOO_MANY_WAITING_FRAMES = 1;  // 排队太多
const DWORD ERR_COM_WRITE_ERROR = 2;	// 写错误
const DWORD ERR_SMS_NO_ANSWER = 3;		// SMS 没响应


class CWSMInterface : protected CWSerialComm  
{
public:
	CWSMInterface();
	 ~CWSMInterface();

	// 设置短信中心号码, return 0 if success
	DWORD SetSMSCenter(LPCTSTR lpcszCenterNumber);

	// hwnd 接收通知的窗口, 
	// msg 需要发送的消息定义
	void SetWinHandleAndNotifyMessage(HWND hwnd, WORD msg);

	// 设置超时,所有的发送用相同的超时设置
	void SetTimeOut(const MsgTimeOutType& timeOut);

	// lpcszPhoneNumber : 接收号码
	// msgType : 命令类型--达示、调度、
	// lpData : 需要发送的数据
	// dwDataSize : 数据长度
	// 返回出错代码,0表示成功
	
	DWORD SendMessage(LPCTSTR lpcszPhoneNumber, BYTE msgType, const BYTE* lpData, DWORD dwDataSize);

	BOOL OpenCom(int portNo);

	void OnSysTimeChanged();

protected:
	
	DWORD SendPacket(const CWMsgPacket& toSent, BOOL bAsPC = TRUE);
	BOOL InitSMSModule();

private:

	enum CurrentCmd
	{
		AT_CMD,
		MSG_FRAME_CMD,
		NOT_DETERMINED
	};

	enum CurrentCmd m_currCmd;

	BOOL InitMembers();
	BOOL WriteString(LPCSTR lpszToWrite);

	// if len == -1 use strlen to get length
	DWORD SendAtCmd(LPCSTR lpszToSend, int len, DWORD dwTimeOut = 60000);

	// overrided
    void OnDataRead( const LPBYTE, DWORD ); 

	void ProcessOneByte(BYTE byData);
	void ParseAtCmd(BYTE byData);
	void ParseMsgFrame(BYTE byData);
	void ResetParsers();
	void ProcessReceivedMsgFrame(const CWMsgPacket& msgFrame);
	void ProcessReceivedAtCmdResult(const CWAtCmdResult& atCmdRes);

	DWORD SendOneFrame(const CWMsgSent& toSent);
	DWORD SendOnePacket(const CWMsgSent& toSent, int packetIndex);
 

	HWND m_hwndNotify;
	WORD m_msgNotify;

	HANDLE m_hSendEvent;

	CWAtCmdParser  m_atParser;
	CWMsgFrameParser m_msgParser;
	CWMsgSentHistory m_msgHistory;

};

#endif // !defined(AFX_WSMINTERFACE_H__456E1F99_8576_4557_A4E8_D735DC246311__INCLUDED_)

⌨️ 快捷键说明

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