Windows Mobile 版本的判断

有时候在写WM上程序时需要对不同的WM版本做不同的处理, 于是这就需要判断出不同的版本来. sdk提供了一个api, 让开发者获知运行该程序的系统版本.
   BOOL GetVersionEx(
    LPOSVERSIONINFO lpVersionInformation
   );
这个api很简单, 没啥好说的. 主要是这个结构体
   typedef struct _OSVERSIONINFO{
    DWORD dwOSVersionInfoSize;
   DWORD dwMajorVersion;
   DWORD dwMinorVersion;
    DWORD dwBuildNumber;
   DWORD dwPlatformId;
   TCHAR szCSDVersion[128];
   } OSVERSIONINFO;
dwOSVersionInfoSize 这个结构的大小, 使用之前, sizeof(OSVERSIONINFO)赋值给它就是了.
dwMajorVersion 主版本号
dwMinorVersion 次版本号
dwBuildNumber 编译时的版本标记
dwPlatformID 操作系统的标识, 在mobile系统上这个值都是 VER_PLATFORM_WIN32_CE, 及wince系统
szCSDVersion 附加说明, 字符串格式.从我测试的情况看, 好像都是空字符串.
这里的版本号实际上指的的wince的版本号, 而不是我们熟悉的什么 wm2003, wm5, wm6之类的.
比如说 DOPOD D600 上的系统版本号 5.1.422 . dwMajorVersion 对应的是5; dwMinorVersion 对应的是1; dwBuildNumber对应的是422 .
判断sp还是ppc, 则需要用到另外一个函数:
BOOL SystemParametersInfo(
UINT uiAction,
UINT uiParam,
   PVOID pvParam,
UINT fWinIni
);
这个函数的使用也很简单, 要获取系统平台, 将uiAction传进参数SPI_GETPLATFORMTYPE, uiParam是pvParam的大小, pvParam是接收数据的buf, fWinIni设为0即可.
如果pvParam传出的值是"Smartphone", 则表示是sp, 否则是ppc.

点赞

发表评论