如何修改Windows CE的平臺類型(上)
在開發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
- }
【編輯推薦】