`
izuoyan
  • 浏览: 9223299 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何修改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,会启动向导。

clip_image001

在向导中,选择WCE Application,将工程名称改为”CheckPlatform”.

clip_image002

为了少写代码,我们选择”Hello World” application,一般情况下,我们应该选择simple Windows Embedded CE application.

clip_image003

我们打开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

}

如果使用SPI_GETOEMINFO参数,我们可以获得OEM信息,如果返回字符串中包括“Microsoft DeviceEmulator”,则表示当前应用程序运行在模拟器中。

CheckPlatform程序编译好后,会自动加入到NK.bin 中。我们可以通过Command Shell,运行应用程序。调用Attach Device启动Windows CE操作系统后,选择Target菜单中的Target Control(快捷键Alt+1),输入”s chekplatform”,就可以运行CheckPlatform程序。

clip_image004

好了,最后看一下运行结果:

clip_image006

修改操作系统的类型

上面的话题其实很多文章都讨论过了。但是在实际工作中,我们会遇到一些平台迁移的工作。我们会首先将Windows Mobile的软件在Windows CE上运行,以验证功能。不过有些软件检测了操作系统类型,在不修改软件代码的情况下,我们是否可以在Windows CE上运行检测平台类型的应用程序呢?

Windows CE操作系统的Platform Type类型值是在BSP中被指定的,我们可以通过修改BSP中的Platform Type来改变系统的Platform Type。注意:这种情况只能出现在测试时,不应该修改实际产品的平台类型,否则会引起很多安全性的问题。

我们打开Windows CE 6.0 R2的源代码,位置在:

x:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\INC

我们修改的是DEVICEEMULATOR的代码,如果是其他平台的代码,则去相应BSP文件夹中的指定位置。在BSP的INC文件夹中,我们会找到一个ioctl_cfg.h文件。

在ioctl_cfg.h文件中,我们会找到下面的代码:

#if defined( project_smartfon )

#define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")

#elif defined( project_wpc )

#define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")

#else

#define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")

#endif

#define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")

Device Emulator的BSP通过编译选项区分了不同的平台类型,如果是Windows CE系统,则Platform Type为DeviceEmulator。好了,我们可以通过修改IOCTL_PLATFORM_TYPE的值,来“欺骗”操作系统,让应用程序认为自己运行在Pocket PC或Smartphone上。注意:因为Windows Mobile和Windows CE的函数库存在巨大差异,Windows Mobile的应用程序在Windows CE上未必能够直接运行。

修改IOCTL_PLATFORM_TYPE之后,我们需要重新编译BSP,才能够完成Platform Type的修改。在Build菜单中选择Advanced Build Commands中的Rebuild Current BSP and Subprojects。

clip_image007

我们可以编译BSP和Subporject后,调用BuildRel和Makeimg生成新的NK.bin。这样,我们就可以节省大量的重新编译的时间。在我的机器上大概几分钟就完成了BSP的编译,如果是重新Build操作系统的话,需要二十分钟左右。

NK编译成功后,选择Attach Device,重新运行系统和CheckPlatform程序,会得到下面的运行结果:

clip_image009

最后还需要提示一下,这种方法只对通过SystemParametersInfo API检测Platform Type的应用程序有效。如果软件使用了其他方法检测Platform Type的话,那就需要具体问题具体分析了。

更多关于Windows Embedded CE开发的文章,请参考“Windows Embedded CE 中国研发团队”的中文博客:http://blogs.msdn.com/wincechina/

分享到:
评论

相关推荐

    windows CE 嵌入式编程

    在实际应用中,开发者还需要关注Windows CE操作系统的不同版本对API的支持程度,以及目标硬件平台的具体特性,比如处理器类型、内存大小等因素,这些都会影响到编程方式和优化策略。随着物联网和智能制造技术的不断...

    windows CE备忘录,C# CE源码

    本文将深入探讨基于Windows CE平台的备忘录应用程序,以及如何使用C#语言进行编程。 一、Windows CE平台概述 Windows CE是一个可裁剪、实时的嵌入式操作系统,它允许开发者为不同硬件架构定制系统,以满足特定设备...

    Windows CE

    Windows CE 是微软公司开发的一个嵌入式操作系统,它为各种设备提供了灵活、可定制的操作系统平台。Windows CE 不是桌面版 Windows 的精简版,而是一个独立的操作系统核心,适用于掌上电脑(PDA)、移动电话、工业...

    Windows CE 7.0中文版(ARM)

    总之,Windows CE 7.0中文版(ARM)为嵌入式系统开发者提供了一个强大的平台,适用于各种应用场景,从工业控制到消费电子,都能看到其身影。它的灵活性、性能和易用性,使其在竞争激烈的嵌入式市场中占据一席之地。

    Windows CE Device Emulator Launcher

    **WindowsCEDeviceEmulatorLauncher.exe** 是Windows CE设备模拟器的启动程序,通过这个执行文件,用户可以启动并配置模拟器实例,设置内存大小、处理器类型、屏幕分辨率等硬件参数,以匹配目标设备的配置。...

    windowsCE程序设计.pdf

    4. **驱动程序开发**:Windows CE支持两种类型的驱动程序:用户模式驱动和内核模式驱动。用户模式驱动在用户空间运行,而内核模式驱动则直接与内核交互,对性能和稳定性有更高要求。 5. **内存管理**:Windows CE...

    WindowsCE第三方软件.rar

    总之,“WindowsCE第三方软件.rar”中的内容是Windows CE用户扩大其设备功能的关键,涵盖了日常工作、生活和娱乐所需的多种类型的应用程序。通过这些软件,Windows CE设备得以在有限的硬件资源下提供丰富的功能和...

    windows ce 开发教程

    - **eMbedded Visual Tools 3.0**:是用于Windows CE开发的主要工具包,包括了eMbedded Visual C++ 3.0 和 eMbedded Visual Basic 3.0,同时还包含了针对不同平台(如Pocket PC)的软件开发包(SDK)。 - **SDK**:...

    WindowsCE安装指南

    - **步骤2**:将光盘中的`SBC2410V6\WindowsCE\SMDK2410`目录内的所有内容复制到前面创建的`SMDK2410`目录中。 - **步骤3**:移除`SMDK2410`目录中所有文件的只读属性。 - **步骤4**:将`SMDK2410_for_Public\oak\...

    Windows CE 开发初步(第一部)

    《Windows CE 开发初步》是针对嵌入式系统开发者的一部入门教程,主要涵盖了Windows CE操作系统的基础知识,以及如何在该平台上进行应用开发。Windows CE是一个面向小型设备的操作系统,常用于掌上电脑、工业控制...

    windows ce 流驱动

    Windows CE采用了一个模块化的驱动模型,允许开发者为各种不同类型的硬件编写驱动程序。它支持两种主要类型的驱动:内核模式驱动(Kernel-Mode Drivers)和用户模式驱动(User-Mode Drivers)。内核模式驱动运行在较...

    Linux应用程序向WindowsCE平台移植的研究与实现

    例如,Linux中通过特定的函数来读取和修改实时时钟,而在Windows CE中可能需要使用不同的API或方法。 - **文件系统与IO操作**:Linux和Windows CE在文件系统及I/O操作方面也有区别。Linux支持多种文件系统格式,如...

    嵌入式Windows CE 5.0驱动程序开发

    Windows CE 5.0支持多种类型的驱动程序,包括分层驱动程序、非分层驱动程序、本地设备驱动程序以及流接口驱动程序等。本文将重点介绍流接口驱动程序的开发与测试方法。 #### 2. 驱动程序概述 在Windows CE 5.0中,...

    Windows CE 应用程序设计(张勇)

    《Windows CE 应用程序设计》一书由张勇撰写,主要探讨了在Windows CE操作系统平台上进行应用程序开发的技术和实践。这本书的源码是作者提供的,由西安电子科技出版社出版,旨在帮助读者深入理解Windows CE应用程序...

    Windows CE设备驱动程序开发指南

    在阅读《Microsoft Windows CE Device Driver Kit设备驱动程序开发指南.pdf》这本书后,开发者不仅能够掌握Windows CE驱动程序的基本结构和编程模型,还能了解到如何针对不同类型的硬件设备编写驱动,从而提升设备...

    全部windows ce6.0bsp

    BSP(Board Support Package)是Windows CE的核心组成部分之一,它包含了驱动程序、配置文件和工具,使得Windows CE能够与特定硬件平台兼容。BSP的开发通常包括以下关键组件: 1. **驱动程序**:这些是与硬件设备...

    windows CE

    这种灵活性使得Windows CE在各种不同类型的硬件平台上广泛应用。 3. **性能提升**:与前一版本相比,Windows CE 6.0提高了系统性能,支持多线程处理和更高的处理器频率,以满足高性能嵌入式应用的需求。 4. **设备...

    WindowsCE.NET USB驱动开发基础

    本文将基于提供的标题“WindowsCE.NET USB驱动开发基础”和描述,深入探讨这一主题,帮助开发者了解如何在Windows CE平台上构建USB驱动,尤其是鼠标驱动。 首先,Windows CE是一个面向嵌入式系统的实时操作系统,它...

    windowsce5媒体播放器

    Windows CE 5 媒体播放器是一款专为运行在 Windows CE 5.0 及更高版本操作系统上的设备设计的多媒体播放软件。Windows CE 是微软公司开发的一个嵌入式操作系统,广泛应用于移动设备、工业控制设备和车载系统等。这款...

Global site tag (gtag.js) - Google Analytics