www.pudn.com > 手机短信二次开发接口.zip > NkiDll.h
#ifndef __NKIDLL__ #define __NKIDLL__ #include#pragma pack( push ) #pragma pack( 1 ) #define SMS_SUB WM_USER + 300 //发送短消息返回,当Sms_Send函数中的bAsyn为True时,短信发送完毕将会向窗口发送的消息 //WPARAM 发送返回值,意义同Sms_Send中的返回值 //LPARAM Sms_Send是返回的对应序列号 #define SMS_RECV WM_USER + 301 //收到一短消息 //WPARAM 指向SMS_Recv 结构的指针 //LPARAM 固定为0 #define MOBILE_GSM 0 //手机类型,标准GSM手机。现能支持的是Siemens与其它还红外通讯的手机。 #define MOBILE_NOKIA 1 //手机类型,NOKIA系列手机。现能支持所有NOKIA手机。 #define CONNECT_CABLE 0 //连接方式-数据线 #define CONNECT_IRDA 1 //连接方式-红外线 #define MSGTYPE_SMS 0 //信息类型,普通短信 #define MSGTYPE_REPORT 1 //信息类型,状态报告短信 #define SMARTSMS_NKI_LOGO 2 //定义SMARTSMS类型,Nokia待机图片,显示在手机屏幕上的待机图片 #define SMARTSMS_NKI_PICT 3 //定义SMARTSMS类型,Nokia图片短信,同时发送图片与文字,图文并茂 #define SMARTSMS_NKI_CLI 4 //定义SMARTSMS类型,Nokia分组图片,来电时用于区分组的图片 #define SMARTSMS_NKI_MIDI 5 //定义SMARTSMS类型,Nokia手机铃声,来电时手机的振铃声音 typedef struct _SMS_Recv //收到信息的通知结构 { long lMsgType; //短信类型:MSGTYPE_SMS 或 MSGTYPE_REPORT char szSmsc[32]; //短信中心 char szSender[32]; //发送者号码,如果lMsgType==MSGTYPE_REPORT,则是状态报告的目标手机号码 char szTime[32]; //发送时间 char szMsg[512]; //信息内容 }SMS_Recv; long WINAPI Sms_Init(long lMobileType , long lConnectType , long lPort , long lTimeOut, char * pSMCA , HWND hWnd=NULL); //Sms_Init //功能:初始化串口并与手机连接 //入参:lMobType 手机类型:MOBILE_GSM/MOBILE_NOKIA // lConnectType 连接方式:CONNECT_CABLE/CONNECT_IRDA // lPort 串口号 当lConnectType == CONNECT_IRDA , 此参数无效 // lTimeOut 超时时间,根据当地信号状况,值为:10-50 , 单位:秒,建议值为15 // pSMCA 短消息中心 // hWnd 用于返回信息的窗口句柄,如果不用可置NULL或0 //返回:0 初始化成功 // -1 连接串口失败 // -2 初始化红外连接错误 // -3 检测不到手机 // -4 加密狗错误(正式版需要加密狗配合使用) long WINAPI Sms_GetMobileName(char * pName ); //Sms_GetMobileName //功能:返回所连接手机的名称或型号 //入参:pName 返回所连接手机的名称或型号 //返回:0 成功 // -1 失败,建议先Sms_exit再Sms_Init long WINAPI Sms_GetIMEI(char * pIMEI); //Sms_GetIMEI //功能:取手机串号(IMEI) //入参:pIMEI 返回所连接手机的串号(IMEI) //返回:=0 取IMEI成功 // -1 取IMEI失败 // -2 返回超时,可能是串口与手机的连接出错 // -4 接口还没有初始化,请先调用Sms_Init // -5 未知错误 long WINAPI Sms_Send(char *pNo , char *pMsg , BOOL bReport , BOOL bHandFree , BOOL bAsyn = false); //Sms_Send //功能:发送指定的短信,它能自动分段发送,每段信息最大长度为70个字 //入参:pNo 发送目标号码 // pMsg 需要发送的消息 // bReport 是否需要状态报告,如果是,当对方收到所发送的短消息时,发送的手机会收到通知短信,通过接口所取得的消息为"状态报告:发送成功!" // bHandFree 是否为免提短信,如果是,则此短消息直接显示在对方的手机屏幕,不用按键也可看到,想不看也不行。 // bAsyn 是否以异步方式发送,如果是的话,发送成功后将会有消息SMS_SUB发送到Sms_Init时设置的窗口 //返回:>0 if bAsyn=false 发送成功,返回为实际发出信息的数目(因为会自动分段发送,所以返回可能会大于1) // if bAsyn=true 提交成功,返回发送序列号,当信息发送成功后,窗口会收到SMS_SUB的消息通知 // -1 发送失败,可能是短消息中心有错 // -2 发送超时,可能是串口与手机的连接出错 // -3 上次短信尚未发送完毕,暂不能发送 // -4 接口还没有初始化,请先调用Sms_Init // -5 未知错误 long WINAPI Sms_SendSmart(char *pNo , char *pFileName , char * pMsg , long lSmartType , BOOL bAsyn = false); //Sms_SendSmart //功能:发送增值短信,如LOGO,铃声等,目前只能发送图片短信、待机图片、分组图片与铃音到Nokia的手机 //入参:pNo 发送目标号码 // pFileName LOGO/铃声的文件名,格式为黑白BMP与Midi // pMsg 当增值短消息类型为SMARTSMS_NKI_PICT时附带的信息,其它请使用空字串"" // lSmartType 增值短信类型,具体见常量的定义 // bAsyn 是否以异步方式发送,如果是的话,发送成功后将会有消息SMS_SUB发送到Sms_Init时设置的窗口 //返回:>0 if bAsyn=false 发送成功,返回为实际发出信息的数目(因为会自动分段发送,所以返回可能会大于1) // if bAsyn=true 提交成功,返回发送序列号,当信息发送成功后,窗口会收到SMS_SUB的消息通知 // -1 发送失败,可能是短消息中心有错 // -2 发送超时,可能是串口与手机的连接出错 // -3 上次短信尚未发送完毕,暂不能发送 // -4 接口还没有初始化,请先调用Sms_Init // -5 未知错误 // -6 试用版本没此功能 // -7 增值短信类型不正确 // -8 打开图像文件错误 // -9 图像太大,现在只能处理宽或高小于128像点的图像 // -10 图像颜色太高,现在只能处理单色位图! // -11 取位图数据出错 // -12 生成铃声失败,请检查文件! // -13 发送的图片太大,正常值是78*14 long WINAPI Sms_Get(SMS_Recv * pSms); //Sms_Get //功能:返回接收队列中短信 //入参:pSms 用于取短信返回的结构 //返回:>=0 取短信成功,短信内容在pSms中,返回队列中还剩下的短信数目 // -1 短信队列为空,取短信失败 long WINAPI Sms_Get2(char * pNo , char * pMsg , char * pTime ); //Sms_Get2 //功能:返回接收队列中的短信,功能与Sms_Get一样,只是不需要结构即可返回 //入参:pNo 返回短消息的发送者号码 // pMsg 返回短消息的内容 // pTime 返回短消息的发送时间 //返回:>=0 取短信成功,短信内容在pSms中,返回队列中还剩下的短信数目 // -1 短信队列为空,取短信失败 long WINAPI Sms_GetSimSms(void); //Sms_GetSimSms //功能:返回手机SIM卡中原已接收到的短消息,并将其返回接收队列中,可使用Sms_Get/Sms_Get2获得。 // 由于此操作所需要的时间较长,超时时间为所设置的3倍 //入参:void //返回:>=0 取短信成功,返回接收队列中的短信数目 // -2 取SIM卡短信超时 // -4 接口还没有初始化,请先调用Sms_Init long WINAPI Sms_ClearSim(void); //Sms_ClearSim //功能:清空Sim卡中原已接收到的短消息,建议在Sms_GetSimSms后执行 //入参:void //返回:0 清空成功 // -2 清空超时 // -4 接口还没初始化,请先调用Sms_Init long WINAPI Sms_Delete(long lIndex); //Sms_Delete //功能:删除SIM卡中指定的短信记录,由于接口收到短消息后不会自动删除SIM卡中的短信,所以在收到短信后需要调用此函数来删除记录,防止SIM卡短信满 //入参:lIndex SIM卡中短信记录号 //返回:=0 删除成功 // -1 删除失败,可能是记录号超出范围,记录范围可使用Sms_GetSimNum来获得 // -2 返回超时,可能是串口与手机的连接出错 // -4 接口还没有初始化,请先调用Sms_Init // -5 未知错误 long WINAPI Sms_GetSimNum(void); //Sms_GetSimNum //功能:取SIM卡短信容量 //入参:void //返回:>0 SIM卡的短信容量 // 其它 取短信容量错误 long WINAPI Sms_GetRecvNum(void); //Sms_GetRecvNum //功能:返回接收队列中短信的数目 //入参:void //返回: 接收队列中短信的数目 long WINAPI Sms_Exit(void); //Sms_Exit //功能:释放资源,断开串口与手机的连接 //入参:void //返回:0 正常结束 // 其它 异常结束 /* 注意事项: 一、使用此短信接口前请写调用Sms_Init,使用完毕后请调用Sms_Exit。 二、如果以异步方式发送短信,必须等到主窗口收到SMS_SUB消息时才可发送下一条信息。 三、收到短信时,如果有设置消息通知窗口,则会收到SMS_RECV消息,不管有没需要都必须调用Sms_Get以删除短信队列中的短信内容,否则会造成短信队列堵塞。 四、如果使用VB或其它较难处理窗口消息的语言,请建立独立的线程,使用Sms_Get函数不断来获取新的短信息。 五、无论以何种方式来接收短信,收到后都必须调用Sms_Delete(1)来删除SIM卡中的第一条记录,防止SIM卡满而接收不到新的短信。 六、由于手机短消息只能为单向,当手机在接收短消息时,手机是不能同时发送短消息的,所以此时会返回发送失败,在选择了状态报告后更是如此。可以通过重新此消息发送来解决。 七、大量发送信息时,尽量不要使用状态报告,也尽量不要使用循环,而改用时间控件(Timer),给接口留点处理时间。 八、当需要大量发送带状态报告的短消息或者需要边接收边发送大量短消息时,请尽量使用Nokia手机的数据线连接方式。因为Siemens手机或其它标准GSM手机会经常会因信息堵塞而丢失接收到的信息。 九、正式版用户需要附本接口发行软件时,须将\dog目录下的所有文件拷到NkiDll.dll同一目录下一起发行。 十、正常情况下,短信接口会自动安装加密狗驱动程序,如果Sms_Init返回-4(加密狗错误),请检查以下几种情况: 1、加密狗是否插好 2、计算机并口是否安装与正常。 3、是否已将加密狗驱动程序拷到与NkiDll.dll同一目录。 4、手工安装加密狗驱动程序,运行\Dog目录下的Instdrv.exe文件。 5、加密狗已损坏,请与我公司联系。 */ #pragma pack( pop ) #endif