wince RAS
RAS功能需要引入#include <ras.h>
相關錯誤信息需要引入#include <Raserror.h>
功能1:枚舉所有活動的連接并hangup指定的gprs
?RASCONN entries[25];
//::memset(entries,0,sizeof(RASCONN)); DWORD bufsize=0; DWORD numEntries=0; bufsize=25*sizeof(RASCONN); entries[0].dwSize=sizeof(RASCONN);//必須 RASCONNSTATUS status;//RAS狀態在ras.h中可以查找到。 status.dwSize=sizeof(RASCONNSTATUS); if(RasEnumConnections(entries,&bufsize,&numEntries)==0)//枚舉所有活動的連接 { for(DWORD i=0;i<numEntries;i++) { if(lstrcmp(entries[i].szEntryName,_T("GPRS"))==0 && RasHangUp(entries[i].hrasconn)==0)//掛斷名稱為gprs的連接 { while(RasGetConnectStatus(entries[i].hrasconn,&status)==0)//得到連接的狀態(能獲取得到) { Sleep(0); //Sleep(n)的作用是讓當前線程睡眠n毫秒,以便執行其他線程,如果沒有其他線程,那睡眠n毫秒后,繼續執行。? ? //而如果n=0,Sleep(0)是指CPU交出當前線程的執行權,讓CPU去執行其他線程。也就是放棄當前線程的時間片,轉而執行其他線程。?
} } } }功能2:枚舉所有電話簿(獲取本地的gprs名稱),對應的注冊表為HKEY_CURRENT_USER\Comm\RasBook下的值
RASENTRYNAME *lprasentryname; DWORD cEntries; DWORD cb; lprasentryname=(LPRASENTRYNAME)LocalAlloc(LPTR,sizeof(RASENTRYNAME)); lprasentryname->dwSize=sizeof(RASENTRYNAME); DWORD nRet; //首次調用RasEnumEntries函數來獲取緩沖區的大小 if((nRet=RasEnumEntries(NULL,NULL,lprasentryname,&cb,&cEntries))==0) { ::LocalFree(lprasentryname); lprasentryname=(LPRASENTRYNAME)GlobalAlloc(GPTR,cb); lprasentryname->dwSize=sizeof(RASENTRYNAME); } //再次調用RasEnumEntries函數列舉電話簿條目 nRet=RasEnumEntries(NULL,NULL,lprasentryname,&cb,&cEntries); if(nRet !=ERROR_SUCCESS) { printf("aaaaaaaaa\n"); } else { for(int i=0;i<cEntries;i++) { printf("%s\n",lprasentryname->szEntryName); lprasentryname++; } }? ? GlobalFree(lprasentryname);?
?功能3:建立拔號連接
RASDIALPARAMS rdParams; HRASCONN hRasConn=NULL; //初始化參數 rdParams.dwSize=sizeof(RASDIALPARAMS); lstrcpy(rdParams.szEntryName,_T("GPRS")); lstrcpy(rdParams.szPhoneNumber,_T("")); lstrcpy(rdParams.szCallbackNumber,_T("")); lstrcpy(rdParams.szPhoneNumber,_T("")); lstrcpy(rdParams.szUserName,_T("")); lstrcpy(rdParams.szPassword,_T("")); lstrcpy(rdParams.szDomain,_T("")); DWORD dwRet;? ? ? // WINCE下GPRS 只支持以下兩種拔號方式
//同步建立拔號連接 //dwRet=RasDial(NULL,NULL,&rdParams,NULL,NULL,&hRasConn);//同步 //異步 dwRet=RasDial(NULL,NULL,&rdParams,0xFFFFFFFF,窗體句柄,&hRasConn);//通過給窗體發送WM_RASDIALEVENT消息。 ?(RASCONNSTATE)?wParam;?dwError = (DWORD) lParam; // error that may have occurred? if(dwRet !=0)//拔號失敗 {}?
?功能4:刪除gprs本地連接?
? ? ? ? ? ? ? ? ? RasDeleteEntry(NULL,_T("GPRS"));?//第一個參數為NULL(NULL?uses the current default phone-book file)
?功能5:創建gprs本地連接??
DWORD CreateGPRS(const LPWSTR pszEntryName,const LPCTSTR pszUserName,const LPCTSTR pszPassWord) { RASENTRY rasEntry; RASDIALPARAMS rdParams; DWORD rasEntrySize,dwResult; /*驗證RASENTRY名稱是否有效*/ dwResult = RasValidateEntryName(NULL, pszEntryName); if(dwResult!=ERROR_SUCCESS) { if(dwResult==ERROR_ALREADY_EXISTS) { return -1; } else { return -2; } } memset(&rasEntry,0,sizeof(rasEntry)); rasEntrySize=sizeof(rasEntry); rasEntry.dwSize=rasEntrySize; DEVMINICFG tmpsDevConfig; DWORD tmpsDevConfigLength=sizeof(DEVMINICFG); if(RasGetEntryProperties(NULL,_T(""),&rasEntry,&rasEntrySize,(LPBYTE)&tmpsDevConfig,&tmpsDevConfigLength) !=0) { return -2; } lstrcpy(rasEntry.szDeviceType,RASDT_Modem); lstrcpy(rasEntry.szDeviceName, TEXT("COM1 上的 Hayes 兼容調制解調器:")); lstrcpy(rasEntry.szAreaCode, TEXT("10")); lstrcpy(rasEntry.szLocalPhoneNumber,_T("*99***1#")); rasEntry.dwCountryCode=86;//國家代碼 tmpsDevConfig.wVersion = 0x30 ; tmpsDevConfig.dwBaudRate = 115200 ; tmpsDevConfig.ByteSize = 8 ; tmpsDevConfig.StopBits = 0; tmpsDevConfig.Parity = 0 ; tmpsDevConfig.dwModemOptions = MDM_BLIND_DIAL ; lstrcpy( tmpsDevConfig.szDialModifier,_T("+CGDCONT=1,\"IP\",\"CMNET\"")) ; if(RasSetEntryProperties(NULL,pszEntryName,&rasEntry, sizeof(rasEntry),(LPBYTE)(&tmpsDevConfig),tmpsDevConfigLength)!=0) { return -2; } ZeroMemory(&rdParams, sizeof(RASDIALPARAMS)); rdParams.dwSize = sizeof(RASDIALPARAMS); /*設置拔號的用戶名和密碼*/ lstrcpy(rdParams.szEntryName, pszEntryName); lstrcpy(rdParams.szUserName, pszUserName); lstrcpy(rdParams.szPassword, pszPassWord); if(RasSetEntryDialParams(NULL, &rdParams, FALSE)!=0) { return -2; } return 1;}?
?DEVMINICFG為記錄TAPI相關的配置信息,定義如下:
#ifndef _DEVMINICFG_H_ #define _DEVMINICFG_H_ #define DIAL_MODIFIER_LEN 256 #define MAX_CFG_BLOB126 #define MAX_NAME_LENGTH ? 8 // Modem Options #define MDM_COMPRESSION ? ? ?0x00000001 #define MDM_ERROR_CONTROL ? ?0x00000002 #define MDM_FORCED_EC ? ? ? ?0x00000004 #define MDM_CELLULAR ? ? ? ? 0x00000008 #define MDM_FLOWCONTROL_HARD 0x00000010 #define MDM_FLOWCONTROL_SOFT 0x00000020 #define MDM_CCITT_OVERRIDE ? 0x00000040 #define MDM_SPEED_ADJUST ? ? 0x00000080 #define MDM_TONE_DIAL ? ? ? ?0x00000100 #define MDM_BLIND_DIAL ? ? ? 0x00000200 #define MDM_V23_OVERRIDE ? ? 0x00000400 typedef struct ?tagDEVMINICFG ?{? WORD ?wVersion; //0 WORD ?wWaitBong; ? ? ? ? ? ?// DevCfgHdr 2 DWORD dwCallSetupFailTimer; ?// CommConfig.ModemSettings 4 DWORD dwModemOptions; ? ? ? ?// CommConfig.ModemSettings 8 // MDM_BLIND_DIAL ? MDM_FLOWCONTROL_SOFT? // MDM_CCITT_OVERRIDE MDM_FORCED_EC? // MDM_CELLULAR ? ? ?MDM_SPEED_ADJUST? // MDM_COMPRESSION ? ?MDM_TONE_DIAL? // MDM_ERROR_CONTROL ?MDM_V23_OVERRIDE? // MDM_FLOWCONTROL_HARD? DWORD dwBaudRate; ? ? ? ? ? ?// DCB 12 WORD ?fwOptions; ? ? ? ? ? ?// DevCfgHdr 16 // TERMINAL_PRE ?TERMINAL_POST? // MANUAL_DIAL? BYTE ?ByteSize; ? ? ? ? ? ? ?// DCB 18 BYTE ?StopBits; ? ? ? ? ? ? ?// DCB 19 BYTE ?Parity; ? ? ? ? ? ? ? ?// DCB 20 WCHAR szDialModifier[DIAL_MODIFIER_LEN+1]; ? ?// Unique to MiniCfg 256+1 // Dynamic devices configuration? WCHAR ?wszDriverName[MAX_NAME_LENGTH+1]; //8+1 BYTE ? ?pConfigBlob[MAX_CFG_BLOB]; //126+1 HANDLE ?hPort; //4 } DEVMINICFG;?#endif?
?
轉載于:https://www.cnblogs.com/fujinliang/archive/2012/11/12/2766344.html
總結
- 上一篇: 专注jQurey的博客【2012年度IT
- 下一篇: dbgrid的最小高度设置。否则出现滚动