在开发Windows CE的应用程序时,经常需要检测平台类型,了解我们的应用程序运行在Pocket PC、Smartphone还是Windows CE上。在这篇文章里,我们介绍如何编写一个应用程序来检测当前运行的平台类型。
在开发Windows CE的操作系统时,我们会遇到另外一种情况:某些应用程序限制了运行的操作系统平台,比如只允许运行在Pocket PC上。而我们如果想在Windows CE上运行的话,就需要修改操作系统的平台类型。注意:这种情况只能出现在测试时,不应该修改实际产品的平台类型,否则会引起很多安全性的问题。
创建平台检测程序
首先,我们需要创建一个应用程序来检测当前的平台类型,我们使用C++和Platform Builder来创建这个程序。如果你熟悉.NET Compact Framework的开发,想开发托管的平台检测程序,请参考:
如何检测你的应用程序是否运行在模拟器上
http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx
检测你的程序运行在Pocket PC或Smartphone上
http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx
检测平台是否支持触摸屏
http://blogs.msdn.com/netcfteam/archive/2006/10/02/Platform-detection-III_3A00_-How-to-detect-a-touch-screen-on-Windows-CE-in-.NET-CF.aspx
创建OS Design和编译的过程在此略过,可以参考《Windows CE 6.0 R2开发初体验》. 我们首先在Platform Builder里创建一个子工程(Subporject),在Solution Explorer里找到Subporject节点,右键选择Add New Porject,会启动向导。
在向导中,选择WCE Application,将工程名称改为”CheckPlatform”.
为了少写代码,我们选择”Hello World” application,一般情况下,我们应该选择simple Windows Embedded CE application.
我们打开Subprojects节点中的CheckPlatform(工程名称)中的Source files节点中找到CheckPlatform.cpp文件。在文件中找到WndProc函数,将代码修改为:
- TCHAR szPlatform[1024];
- switch (message)
- {
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- // TODO: Add any drawing code here...
- RECT rt;
- GetClientRect(hWnd, &rt);
- if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0)
- {
- DrawText(hdc, szPlatform, _tcslen(szPlatform), &rt, DT_CENTER);
- }
- EndPaint(hWnd, &ps);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
代码写的并不好,主要是为了验证SystemParametersInfo函数,我们就将Platform Type显示到窗体上了。正常情况下,我们应该用下面的代码判断运行平台:
- if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0)
- {
- if (lstrcmp(szPlatform,TEXT("PocketPC"))==0)
- ; // Pocket PC
- else if (lstrcmp(szPlatform,TEXT("Smartphone"))==0)
- ; // smartphone
- }
【编辑推荐】