如何修改Windows CE的平臺類型(上)
在開發(fā)Windows CE的應(yīng)用程序時,經(jīng)常需要檢測平臺類型,了解我們的應(yīng)用程序運(yùn)行在Pocket PC、Smartphone還是Windows CE上。在這篇文章里,我們介紹如何編寫一個應(yīng)用程序來檢測當(dāng)前運(yùn)行的平臺類型。
在開發(fā)Windows CE的操作系統(tǒng)時,我們會遇到另外一種情況:某些應(yīng)用程序限制了運(yùn)行的操作系統(tǒng)平臺,比如只允許運(yùn)行在Pocket PC上。而我們?nèi)绻朐赪indows CE上運(yùn)行的話,就需要修改操作系統(tǒng)的平臺類型。注意:這種情況只能出現(xiàn)在測試時,不應(yīng)該修改實(shí)際產(chǎn)品的平臺類型,否則會引起很多安全性的問題。
創(chuàng)建平臺檢測程序
首先,我們需要創(chuàng)建一個應(yīng)用程序來檢測當(dāng)前的平臺類型,我們使用C++和Platform Builder來創(chuàng)建這個程序。如果你熟悉.NET Compact Framework的開發(fā),想開發(fā)托管的平臺檢測程序,請參考:
如何檢測你的應(yīng)用程序是否運(yùn)行在模擬器上
http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx
檢測你的程序運(yùn)行在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
創(chuàng)建OS Design和編譯的過程在此略過,可以參考《Windows CE 6.0 R2開發(fā)初體驗(yàn)》. 我們首先在Platform Builder里創(chuàng)建一個子工程(Subporject),在Solution Explorer里找到Subporject節(jié)點(diǎn),右鍵選擇Add New Porject,會啟動向?qū)А?/P>
在向?qū)е?,選擇WCE Application,將工程名稱改為”CheckPlatform”.
為了少寫代碼,我們選擇”Hello World” application,一般情況下,我們應(yīng)該選擇simple Windows Embedded CE application.
我們打開Subprojects節(jié)點(diǎn)中的CheckPlatform(工程名稱)中的Source files節(jié)點(diǎn)中找到CheckPlatform.cpp文件。在文件中找到WndProc函數(shù),將代碼修改為:
- 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);
- }
代碼寫的并不好,主要是為了驗(yàn)證SystemParametersInfo函數(shù),我們就將Platform Type顯示到窗體上了。正常情況下,我們應(yīng)該用下面的代碼判斷運(yùn)行平臺:
- 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
- }
【編輯推薦】