1 取得设备ID #include extern "C" __declspec(dllimport) BOOL KernelIoControl( DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned ); #define IOCTL_HAL_GET_DEVICEID CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) CString GetSerialNumberFromKernelIoControl() { DWORD dwOutBytes; const int nBuffSize = 4096; byte arrOutBuff[nBuffSize]; BOOL bRes = ::KernelIoControl(IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize, &dwOutBytes); if (bRes) { CString strDeviceInfo; for (unsigned int i = 0; i CString strNextChar; strNextChar.Format(TEXT("%02X"), arrOutBuff); strDeviceInfo += strNextChar; } CString strDeviceId = strDeviceInfo.Mid(40,2) + strDeviceInfo.Mid(45,9) + strDeviceInfo.Mid(70,6); return strDeviceId; } else { return _T(""); } } 说明:Windows Mobile 5.0已经添加了专门的API完成此任务,对于2003以下的设备可以用 此方法。此方法是否能取道ID还取决与硬件制造商是否已经实现了改方法。因为 smartphone具备2-Tie安全性,所以此方法如果没有授权证书可能会调用失败。 


2 取得设备信息 TCHAR wszMachineName[128]; SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName), &wszMachineName, 0); 取得设备OEM信息。 TCHAR wszVersion[256]; SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion), &wszVersion, 0); 取得平台信息。 


3 创建GUID CString CreateGUID() { TCHAR wGuid[37]; SYSTEMTIME systime; FILETIME filetime; // construct GUID GetSystemTime(&systime); SystemTimeToFileTime(&systime,&filetime); DWORD tick=GetTickCount(); DWORD highWord=filetime.dwHighDateTime+0x146BF4; // convert GUID to a string wsprintf(wGuid,TEXT("%08.8x-%04.4x-%04.4x-%04.4x-%04.4x%04.4x%04.4x"), filetime.dwLowDateTime, LOWORD(highWord), HIWORD(highWord |0x10000000), LOWORD(rand()), HIWORD(tick), LOWORD(tick), LOWORD(rand())); return CString(wGuid); }