• symbian 学习笔记(3) 手机独有


    UUID 机器的全球唯一吗

    IMEI:与每台手机一一对应,而且该码是全世界唯一的,读写于手机内存中。它也是该手机在厂家的"档案"和"身份证号"。 由15位数字组成

    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //get IMEI in windows mobile
    // come from net.
    *************************/  
    #pragma comment(lib, "cellcore.lib")
    #include <tapi.h>
    #include <extapi.h>
    #define CELLTSP_LINENAME_STRING (L"Cellular Line")
    #define TAPI_API_LOW_VERSION    0x00010003
    #define TAPI_CURRENT_VERSION	0x00020000
    #define EXT_API_LOW_VERSION     0x00010000
    #define EXT_API_HIGH_VERSION    0x00010000
    int
    GetDeviceIMEI( char *StrIMEI)
    {
    	LINEINITIALIZEEXPARAMS LineExtParams;
    	HLINEAPP	hLineApp;
    	HLINE		hLine;
    	DWORD		dwNumDevs, dwTSPILineDeviceID_DD, dwAPIVersion, dwExtVersion;
    	LINEGENERALINFO lviGeneralInfo;
    	LPLINEGENERALINFO plviGeneralInfo;
    	LPBYTE 		pLineGeneralInfoBytes = NULL;
    	LONG      lRes = -1;
    	int length =1;
    
    	LineExtParams.dwTotalSize = sizeof(LineExtParams);
    	LineExtParams.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
    	dwAPIVersion = TAPI_CURRENT_VERSION;
    	if (lineInitializeEx(&hLineApp, 0, 0, _T("Developer.com Test"), &dwNumDevs, &dwAPIVersion, &LineExtParams)) 
    		return -1;
    
    	dwTSPILineDeviceID_DD = GetLineDeviceID(CELLTSP_LINENAME_STRING, hLineApp, dwAPIVersion, dwNumDevs);
    	if ( dwTSPILineDeviceID_DD == (DWORD)-1 ){
    		goto exit;
    	}
    
    	// open the line
    	if( lineOpen(hLineApp, dwTSPILineDeviceID_DD, &hLine, dwAPIVersion, 
    		0, 0, LINECALLPRIVILEGE_OWNER, LINEMEDIAMODE_DATAMODEM, 0) ){
    			goto exit;
    	}
    
    	// set up ExTAPI
    	if ( lineNegotiateExtVersion(hLineApp, dwTSPILineDeviceID_DD, dwAPIVersion, 
    		EXT_API_LOW_VERSION, EXT_API_HIGH_VERSION, &dwExtVersion) ){
    			goto exit;
    	}
    
    	lviGeneralInfo.dwTotalSize = sizeof(lviGeneralInfo);
    	lRes = lineGetGeneralInfo(hLine, &lviGeneralInfo);
    	if (lRes != 0 && lRes != LINEERR_STRUCTURETOOSMALL){
    		goto exit;
    	}
    
    	// get IMEI infomation
    	pLineGeneralInfoBytes = (BYTE*)malloc(lviGeneralInfo.dwNeededSize*sizeof(BYTE));
    	if(pLineGeneralInfoBytes == NULL)
    		goto exit;
    
    	plviGeneralInfo = (LPLINEGENERALINFO)pLineGeneralInfoBytes;
    	plviGeneralInfo->dwTotalSize = lviGeneralInfo.dwNeededSize;
    	if((lRes = lineGetGeneralInfo(hLine, plviGeneralInfo)) != 0 ){
    		goto exit;
    	}
    	else{
    		//--IMEI号,设备唯一标识
    		LPTSTR tsSerialNumber;
    		length = plviGeneralInfo->dwSerialNumberSize;
    		if(length)
    			tsSerialNumber = (WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSerialNumberOffset);
    		else{
    			tsSerialNumber = L"Unavailable";
    		}
    		// conver the wide char to sign char
    		wtoa( (short*)tsSerialNumber, StrIMEI, length);
    	}
    
    	lRes = strlen(StrIMEI); //out_imei这就是获得的IMEI,unicode表示
    exit:
    	if( hLine ) lineClose(hLine);
    	if( hLineApp ) lineShutdown(hLineApp);
    	if( pLineGeneralInfoBytes ) free(pLineGeneralInfoBytes);
    	return lRes;
    	return -1;
    }
    
    static DWORD 
    GetLineDeviceID(const TCHAR* const psTSPLineName, HLINEAPP hLineApp, DWORD dwAPIVersion, DWORD dwNumDevs)
    {
    	DWORD dwReturn =-1, dwCurrentDevID =0;
    	for(dwCurrentDevID = 0 ; dwCurrentDevID < dwNumDevs; dwCurrentDevID++)
    	{
    		LINEEXTENSIONID LineExtensionID;
    		if( lineNegotiateAPIVersion(hLineApp, dwCurrentDevID, TAPI_API_LOW_VERSION, 
    			TAPI_CURRENT_VERSION, &dwAPIVersion, &LineExtensionID) == 0 ) 
    		{
    			LINEDEVCAPS LineDevCaps;
    			LineDevCaps.dwTotalSize = sizeof(LineDevCaps);
    			if( lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, &LineDevCaps) == 0 ) 
    			{
    				BYTE* pLineDevCapsBytes = (BYTE*)malloc(LineDevCaps.dwNeededSize*sizeof(BYTE));
    				if(pLineDevCapsBytes != NULL) 
    				{
    					LINEDEVCAPS* pLineDevCaps = (LINEDEVCAPS*)pLineDevCapsBytes;
    					pLineDevCaps->dwTotalSize = LineDevCaps.dwNeededSize;
    					if( lineGetDevCaps(hLineApp, dwCurrentDevID, dwAPIVersion, 0, pLineDevCaps) == 0 ) 
    					{
    						if(0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset),psTSPLineName)) 
    							dwReturn = dwCurrentDevID;
    					}
    					free(pLineDevCapsBytes);
    				}
    			}
    		}
    	}
    	return dwReturn;
    }
    
    
    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //QQ67666938
    //open backlight in windows mobile
    *************************/  
    //	open reg
    lResult=RegOpenKeyEx(HKEY_CURRENT_USER,L"ControlPanel\\Backlight",0,0,&hOpenKey);
    if( RegQueryValueEx(hOpenKey,L"BatteryTimeoutUnchecked",NULL,&type,(BYTE*)&dwBatValue,&lenght)==ERROR_SUCCESS )
    {
    	RegSetValueEx(hOpenKey,L"BatteryTimeout",0,type,(BYTE*)&dwBatValue,lenght);
    	RegSetValueEx(hOpenKey,L"BatteryTimeoutUnchecked",0,type,(BYTE*)&dwKeyValue,lenght);
    }
    		if( RegQueryValueEx(hOpenKey,L"ACTimeoutUnchecked",NULL,&type,(BYTE*)&dwAcValue,&lenght) == ERROR_SUCCESS )
    {
    	RegSetValueEx(hOpenKey,L"ACTimeout",0,type,(BYTE*)&dwAcValue,lenght);
    	RegSetValueEx(hOpenKey,L"ACTimeoutUnchecked",0,type,(BYTE*)&dwKeyValue,lenght);
    }
    
    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //QQ67666938
    //get power status in windows mobile
    *************************/  
    	SYSTEM_POWER_STATUS_EX status;
    	GetSystemPowerStatusEx( &status, TRUE );
    	
    	
    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //QQ67666938
    //get UUID (17byte) in windows mobile ..  UUID in OutUUID
    *************************/  
    int
    DEV_GetDeviceUUID( char *OutUUID )
    {
    
    	DWORD dwOutBytes, i, len, nBuffSize = 256;
    	unsigned char arrOutBuff[256], temp[64], strDeviceInfo[256];
    	KernelIoControl(IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize, &dwOutBytes);
    		memset( strDeviceInfo, '\0', 256 );
    		for ( i = 0; i<dwOutBytes; i++){
    			sprintf( temp, "%02X", arrOutBuff[i] );
    			strcat( strDeviceInfo, temp );
    		}
    		memset( arrOutBuff, '\0', 256 );
    		memcpy( arrOutBuff, strDeviceInfo+40, 2 );
    		memcpy( arrOutBuff+2, strDeviceInfo+45, 9 );
    		memcpy( arrOutBuff+2+9, strDeviceInfo+70, 6 );
     		{
    			unsigned short wbuffer[128];
    			atow( arrOutBuff, wbuffer, 128 );
    		}
    	len = strlen(arrOutBuff);
    	memcpy( OutUUID, arrOutBuff, len );
    	return len;
    }
    
    
    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //QQ67666938
    //get UUID (17byte) in symbian ..  UUID in OutUUID
    *************************/  
    	CTelephony *iTelephony = CTelephony::NewL();
    	CleanupStack::PushL(iTelephony);
    	TRequestStatus iStatus;
    	CTelephony::TSubscriberIdV1 iSubscriberId;
    	CTelephony::TSubscriberIdV1Pckg iSubscriberIdPckg(iSubscriberId);
    	iTelephony->GetSubscriberId(iStatus, iSubscriberIdPckg);
    	User::WaitForRequest(iStatus);
    	User::LeaveIfError(iStatus.Int());
    	TBuf8<50> in_uuid;
    	in_uuid.Copy(iSubscriberIdPckg().iSubscriberId);
    	sprintf(OutUUID, "%s", in_uuid);
    	iTelephony->CancelAsync(CTelephony::EGetSubscriberIdCancel);
    	CleanupStack::PopAndDestroy(iTelephony);
    	return in_uuid.Length();
    
    	
    /******************************************\
    //sylar 
    //2010.4.22 PM 2:59:31
    //cug@live.cn
    //QQ67666938
    //get IMEI (17byte) in symbian ..  IMEI in OutIMEI
    *************************/  
    	CTelephony* iTelephony = CTelephony::NewL();
    	CleanupStack::PushL(iTelephony);
    	CTelephony::TPhoneIdV1 iIdV1;
    	CTelephony::TPhoneIdV1Pckg iIdV1Pkg(iIdV1);
    	TRequestStatus iStatus;
    	iTelephony->GetPhoneId(iStatus, iIdV1Pkg);
    	User::WaitForRequest(iStatus);
    	User::LeaveIfError(iStatus.Int());
    	TBuf8<50> in_imei;
    	in_imei.Copy(iIdV1Pkg().iSerialNumber);
    	sprintf(OutIMEI, "%s", in_imei.Ptr());
    	iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
    	CleanupStack::PopAndDestroy(iTelephony);
    	iStatus.Int();
  • 相关阅读:
    多线程——Thread与Runnable的区别(28)
    多线程——Runnable接口实现多线程(27)
    多线程——调用start()方法与直接调用run()方法的区别
    动态规划---优化编辑器问题(计算字符串距离)
    网易2017春招笔试真题编程题集合(4)——消除重复元素
    网易2017春招笔试真题编程题集合(3)——调整队形
    网易2017春招笔试真题编程题集合(2)——赶去公司
    网易2017春招笔试真题编程题集合(1)——双核处理
    Delphi2010安装win10不能编译问题
    数据类型转换byteushotint64(long)
  • 原文地址:https://www.cnblogs.com/SuperXJ/p/1718094.html
Copyright © 2020-2023  润新知