7,Windows Embedded Standard开发初体验(七)

 更改启动画面       好了,到这里,我们的Windows Embedded Standard开发初体验活动接近尾声了,还有一个问题,有人觉得Windows Embedded Standard的启动界面与XP完全一样,让人感觉和用XP没有区别。于是,我们就需要修改一下启动画面来达到这个效果了:        我必须承认,自己是个很没有美工天赋的人(要么怎么当了没前途的程序员呢J)。加上启动界面的要求过于苛刻,做成这样已经很不错了。需要说明的是,我是按照雷志刚BLOG中的《更换XPE开关机画面和欢迎界面》来实现的,链接如下:        http://lzg-ad.blog.sohu.com/76781546.html        首先,我们需要创建一个640x480的位图,位图颜色为16色(注意不是16位色)。我用了Windows Embedded Standard的标准界面。然后,将位图改名为Boot.bmp,保存到WES Image的Windows目录下。还需要修改Boot.ini文件: [boot loader] timeout=30 default=mulit(0)disk(0)rdisk(0)partition(1)\Windows [operating systems] default=mulit(0)disk(0)rdisk(0)partition(1)\Windows=”Windows XP Professional”/fastdetect /bootlogo /noguiboot        其实主要是修改粗体字部分,其余部分保持原状即可。          好了,到这里,我们的Windows Embedded Standard初体验就完成了。必须承认,Silverlight为我们提供了强大的UI表现能力,而Windows Embedded Standard又是一个能够展现Silverlight强大功能的操作系统平台。这一点,对于嵌入式开发来说,是具有非常大的吸引力的。        这里只是一个起点,至于大家可以使用Windows Embedded Standard开发出怎样的嵌入式产品来,我无法想象,但是却乐观其成。

1

6,Windows Embedded Standard开发初体验(六)

 IE的安全限制       好了,让我们回过头来说Silverlight TV的那个安全限制吧,还是要强调一下,并不是所有的Silverlight都会遇到这个问题,只是Silverlight TV调用了ActiveX组件,才会遇到这个问题。        这个安全提示在我们平时使用IE时也经常会遇到,点一下也就没事了,毕竟为了安全着想嘛。不过如果将这个Silverlight组件作为Shell,每次启动之后,都是一个黑屏,需要人工点一下之后才能正常运行,用户体验似乎不够友好。        于是,我们就需要更改一些IE的高级安全设置来解决这个问题了。如果熟悉IE的朋友,可能很快就知道问题出在哪里了,不过我是在同事的帮助下花了两天才找到问题根源的。问题的原因在于:        对的,就是在IE的Internet Options对话框里,安全选项(Security)中“Allow active content to run in files on My computer”的选项默认是不选的。选上这个设置之后,运行Silverlight TV时就不会有安全提示出现了。        IE的问题解决了,可是到了Windows Embedded Standard里又有问题了。IE的Advanced设置在WES IE组件的设置里是没有的。所以,我们只能通过修改注册表这一条路了。        总之,经过了千难万险,我们知道了“Allow active content to run in files on My computer”对应:        HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN        中的“iexplore.exe”项,而且非常特别的是,该项为0,表示选中该选项;为1时,则表示未选中该项。大家开发时一定注意。        总之,我们了解了这个设置对应的注册表项后,接下来就是在组件中添加相应的注册表项就可以了。这个工作在前边已经做过了。

1

5,Windows Embedded Standard开发初体验(五 )

导入组件数据库       将组建导入组件数据库的工作相对简单,只需要打开Component Database Manager,然后在Database属性页中,点击Import按钮。在弹出的Import SLD对话框中,首先选择SDL file,也就是我们刚才通过Component Designer编辑好的组件,然后点击Import按钮就可以了。          因为导入的文件有些多,所以可能会延时几秒钟,等看到文件被成功导入的提示后,就可以关闭Component Database Manager,打开Target Designer来设计我们的操作系统了。         创建Silverlight播放器        在已经创建过一个Target Image之后,我们创建一个以Silverlight为Shell的Image看起来也不是那么复杂。还是让我们回到Target Designer中吧。首先创建一个新的Configuration。        然后添加下面的这些组件:        1, Software àTest & Deployment à Virtual PC 2004 Helper Macro        2, SoftwareàSystemàSecurityàInfrastructureàWindows Logon (Standard)        3, Software à System àUser Interface àShells à MyShell(这个就是你创建的Shell组件)        4, Software à Test & Deployment…

1

4,Windows Embedded Standard开发初体验(四)

添加文件、依赖组件、注册表       接下来我们就要进入创建组件最重要的一环了,添加文件。为什么说重要,因为这里有一个大坑,我在Windows Embedded Standard产品组施卫娟老师的指导下,花了两周的时间才勉强爬出来,可见该坑之深。        在这里我们使用了一个现成的Demo,SilverlightTV作为我们的目标文件。SilverlightTV中包含很多文件和文件夹。我们要做的第一件事,就是将所有文件拷贝到一个文件夹中。这一点非常重要,因为考虑到效率问题,Windows Embedded Standard组件中的文件只能包括在同一个文件夹中。        主要提示:如果将包含子目录的文件夹添加到组件中,组件设计器不会报错,而要等到这个组件加入到Target Designer时,才会报文件找不到的错误,并且在构建好的Image文件中,只会包括文件夹,而不会包括其中的文件。        不过,新的问题就来了,如果我的文件结构是固定的,并且有相互的依赖关系,把所有文件都放到一个文件夹后,程序无法正常运行该怎么办呢?我们自然有办法,不过现在,还是赶紧将所有文件放在一个文件夹中吧,这个文件夹就是添加Repositories时指定的Source Path文件夹。不过千万记清文件原来所在的文件夹,否则下一步就麻烦了。        做完这步之后,回到Component Designer中,在Files节点单击右键,在菜单中选择Add – Files in Folder,在稍后弹出的对话框中,选择我们放置源文件的文件夹。经过下面的处理过程之后,文件夹中所有的文件都被加入到组件中了        不过问题是,所有的文件还被放置在同一个目录中,无法正常执行。这时,我们要通过一个比较繁琐的过程来解决这个问题——修改文件的目的文件夹。在右侧的文件列表中,选中某一个文件,双击,打开文件编辑对话框:        我们打开的是一个wmv文件,我们只需要修改Destination中的目录结构,%24%是一个转义字符,表示C盘,我们不要去动它。根据我们文件的原始位置填写目的文件的所在目录就可以了。这个工作要花费一段时间,需要点耐心。        接下来,我们要添加组件的Group Memberships,表示组件在组件目录树中所处的位置。我们在“Group Memberships”节点上右键选择“Add Group Membership”命令。在弹出的对话框中,选择SoftwareàSystemàUser InterfaceàShells,然后选择Shell即可。点击OK,关闭对话框。        接下来为组件添加依赖关系。依赖关系表明该组件依赖于那些组件,当我们添加了该组件到Target Image中时,在依赖检查时,会将其所依赖的组件也添加到Image中。        我们选择“Component or Group Dependency”,右键菜单中“Add”-“Component Dependency”,会弹出添加组件依赖对话框。        我们在“Component dependency source”选择Database,即选择组件数据库中的组件。然后找到SoftwareàSystemàNetworking & Communicationsà ApplicationsàInternet Explorer – Hotfix Q321232,并且确认My Component下选择的是“Depends on the…

1

3.Windows Embedded Standard开发初体验(三)

作者:马宁   开始创建Silverlight的组件 Silverlight在嵌入式领域发挥的作用绝对不仅仅只有增加Web的用户体验而已。很多嵌入式设备需要丰富多彩的用户交互界面,比如ATM、自动售货机、自助查询终端、老虎机(喔)……Windows Embedded Standard的主要应用领域恰好在这几个方面,所以Silverlight对于来说Windows Embedded Standard来说是如虎添翼。可能有朋友也会说,我们使用其他技术也可以实现与Silverlight类似的界面,这个肯定是没错。但是考虑到与后台数据库或Web Service的交互、部署成本、维护成本等问题,我相信Silverlight肯定会成为开发者今后开发中的首选。 好了,先不说那么多,我们下一步要做的是将Silverlight变成WES的主界面,WES启动之后直接进入到Silverlight的应用之中。我们知道Silverlight是Host到IE等浏览器中运行的,在WES中也是这样,而Silverlight的部署有两种方式:第一种是将Silverlight文件部署到WES的Image中,随Image一起发布;另一种是让浏览器启动后访问Internet上的某个Silverlight站点。这两种方法有各自的应用场景,我们在这里不做过多分析。在这里,我们挑选比较难得一种:将Silverlight文件与WES的Image一起发布。 第一步,我们要创建一个组件:这个组件应该是一个Shell组件,在系统启动后不进入我们传统意义上的“桌面”,而是直接启动这个组件中指定的应用程序。而且组件中还应该包括一些Silverlight相关的文件、一些注册表项,还有一些高级设置。稍后我们会看得到。 我们还是先打开我们创建组件的工具:Component Designer。Windows Embedded Standard没有一个完整的IDE环境,所以做什么事情的时候要分别打开不同的工具。 Component Designer的界面如下,我们要先选择File-New创建一个新的组件,然后保存这个组件,并为sld文件设置一个文件名称。 接下来,我们要创建一个Repositories,这个相当于给组件住的房子。组件是保存在数据库中的,而Repositories在数据库中可以起到隔离组件的作用,而且也比较方便我们维护和升级组件。 我们右键点击上图中Repositories节点,选择“Add Repository”来创建一个新的Repositories。首先为Repositories起个名字,写在右侧属性窗口的Name中,然后还要点击Source Path后边的Browse按钮。Source Path顾名思义,我们要为该Repositories的源文件找一个保存的位置,而我们一般也会把组件所需的文件都放到这个文件夹下。这个文件夹一般没有规定,但是最好放到C盘下,自己创建个文件夹就可以了。 接下来,我们就该添加组件了,在上图的Components节点上右键单击,在右键菜单上选择“Add Component”。 创建组件之后,第一件事是在右侧的属性窗口中修改名字。 因为我们创建的这个组件是一个Shell组件,所以我们还要规定它在组件库中的原型组件,点击Prototype后边的Browse按钮。 我们会看到下图的对话框,初始化可能会花费一些时间。选择Software | System | User Interface | Shells下的Shell Prototype Component组件,作为我们组件的原型组件。 接下来还需要点击Advanced按钮,定义启动时的自定义动作: 在上面的对话框中,点击Add按钮添加一个叫做“cmiShellPath”的扩展属性,类型为String,具体指为: %16426%\Internet Explorer\iexplore.exe -k “C:\SilverlightApplication2\Default.html” 怎么样看着眼熟吧,没错就是启动一个IE浏览器的实例,-k表示全屏显示,而后边的文件路径不是一成不变的,要根据你将这个HTML文件放到哪里而决定。如果是在线的网站其实更简单一些,直接写网址就好了。 然后为组件指定Repositories,点击“Repositories…”按钮,会弹出下面的对话框。好了,直接选择咱们前边创建的,就可以了。 然后到了非常重要的一步,添加文件。这个问题也曾经困扰了我很久,我们明天再说。  更多关于Windows Embedded开发文件,请参考:http://we.cnblogs.com/


2.Windows Embedded Standard开发初体验(二)

支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了。在开始菜单中找到“Microsoft Windows Embedded Studio”,启动其中的Target Designer。然后再Target Designer的File菜单中选择New,创建一个新的Configuration。 输入名称后,点击OK,进入Target Designer的主界面。为了简单起见,我们选择Virtual PC作为我们的目标设备,这样就可以省去获取硬件设备信息的步骤。 首先,我们要在左侧的组件列表中找到我们要添加的组件。第一个自然是Silverlight组件了。Windows Embedded Standard中包括的是Silverlight 1.0,目前Silverlight 2.0还是beta阶段,也许等WES正式推出时就是Silverlight 2.0了,即使不是,也肯定会有QFE的。 由于不确定Silverlight被放到哪里了,所以只好Search了一把。结果是,在Software-System-System Services-Application Support中包括了Silverlight组件。除了Silverlight之外,我们还需要添加几个组件: 首先,是Design Templates下的Information Application;然后是,Software节点下的Test & Development下的Runtime Quick Start Helper Macro和Virtual PC 2007 Helper Macro两个组件。 添加了这些组件之后,我们就可以进行依赖检查了,按F5,或者在Configuration菜单下的Check Dependencies项,就可以执行了。如下图: 依赖检查之后,如果没有错误,我们可以直接进行编译,选择Configuration下的Build Target Image或者按F7,构建过程如下图: 在编译完成之后,我们就可以在C:\Windows Embedded Images下找到已经编译好的文件。我们将其拷贝到准备好的虚拟硬盘中就可以了。如何构建VPC的开发环境,请参考我的Webcast 《XP Embedded开发初体验》中的介绍。 在第一次启动时,系统会启动FBA(First boot agent)来完成一些设置,我们需要耐心等待一些时间: 接下来,我们关闭WES开发环境的VPC,记得一定要选择Shut down。 然后运行XPETraget的VPC,我们编译出来的Windows Embedded Standard Image其实和XP…

1

Windows Embedded Standard开发初体验(一)

作者:马宁  Windows Embedded Standard,微软又创造了一个新名词。与此同时,XP Embedded,成为了一个历史名词。微软在年初推出了新的Windows Embedded产品线命名规则:Windows CE改名为Windows Embedded Compact,而XP Embedded改名为Windows Embedded Standard,WEPOS改名为Windows Embedded POSReady,还有新推出的针对导航产品的Windows Embedded NavReady。 好了,无论Windows Embedded Standard叫什么,我们只要记得,它就是一个组件化的XP Professional SP2就好了。为了适应嵌入式产品的定制化需求,微软将XP Professional拆成了两万多个组件,允许用户根据自己的需求进行二次开发,定制尺寸更小的操作系统。而且可以完成一些特殊的要求,比如换一个桌面程序,启动时执行自定义操作,还可以更换启动的XP界面等。还有一些EWF之类的高级功能。 但是被乱刀切块的XP Embedded也是XP,所以Windows Embedded Standard也只能运行在x86架构的CPU上,而不能支持其他的CPU,比如ARM。 当然Windows Embedded Standard比起之前版本的XP Embedded还是有很多进步的,最大的一个特点就是将Silverlight引入到了WES中,后边我们还会详细说到。 说到这里,相信大家会对Windows Embedded Standard有一个感性的理解。接下来,我们就要通过实践,让大家看到Windows Embedded Standard开发的流程。 安装Windows Embedded Standard 目前Windows Embedded Standard还没有正式发布,现在的CTP(社区预览版)相当于征求意见稿,可以免费从微软网站上下载的到。只需要在下列地址中,使用Live ID做一个简单的注册,下载项目中选择Windows Embedded Standard的ISO文件即可。下载地址: https://connect.microsoft.com/windowsembedded 下载过程会安装微软的File Transfer Manager,文件有4G左右,下载过程会根据网速有所不同,请大家耐心等待。 下载完成后,我们可以刻盘或者使用Daemon虚拟ISO文件,然后自动运行。运行会为我们启动一个Windows Embedded Standard的安装向导。 首先在Prepare中需要首先安装SQL Server 2005 Express版本,可以从Web或者DVD安装。我选择从Web安装,30多M,不算太大。SQL…

1

22, .Net Micro Framework研究—让MF支持英文输入法

       作者: 刘洪峰   一旦支持了鼠标功能,MF可研究的领域,似乎变得无穷无尽,这也许是我近几天一直陷于此中不能自拔的原因了。 有了鼠标即使没有键盘,我们也可以通过虚拟键盘完成输入工作。这个工作很有意义,也很有挑战性,因为这不是windows平台,也不是Dos平台,这是“一穷二白”的MF平台,所有的工作都得从头做起(实现绘制键盘,向有输入焦点控件发送按键信息,删除,添加字符等等功能)。 目前字符串不仅无法转换为数字,并且没有字符插入功能,所以这个函数也必须自己来实现,此外输入焦点光标也需要自己绘制,好了,先不说难处了,先看看最终成果。   这是一个文本输入实例,当文本框有输入焦点时,自动弹出输入面板。 虚拟键盘上的“Shift”键也是有效的,切换后可以输入符号和大写字母。   当文本框失去输入焦点的时候,虚拟键盘消失。   以上应用实现的代码如下:     //个人信息     public class YFSelfInfo : YFDialog     {         YFLabel[] label=new YFLabel[3];         YFText[] text=new YFText[3];         string[] strLabelName = new string[] {“姓名:”,”单位:”,”博客:”};         public YFSelfInfo(string Title, int Left, int Top, int Width, int Height, YFWindowBase Parent): base(Title, Width,…

1

21, .Net Micro Framework研究—实现SideShow窗体界面

       作者: 刘洪峰   基于MF系统的Windows SideShow界面是非常炫的(如下图)。既然微软能用.Net Micro Framework实现这么棒的界面效果,我想我们也能做到。 (SideShow模拟器界面和游戏程序中的右键菜单—注意菜单弹出后,其它的界面变暗了) 现在的任务是设计一套支持鼠标(或触摸屏)的窗体框架(目前MF提供的Window类仅支持按键功能),所以正好把SideShow如此炫的界面元素也可以添加进来。 用过MF的人知道是用下面的方法来实现按键事件接收的,既然我们要支持鼠标功能,所以最好也用类似的机理实现。     //按键事件     protected override void OnButtonDown(ButtonEventArgs e)     {         switch (e.Button)         {             //按下确定键             case Button.Select:                 break;             //按下左键             case Button.Left:                 break;             //按下右键             case Button.Right:                 break;             //按向上             case Button.Up:                 break;            …

1

20, .Net Micro Framework研究—数据的永久存储

       作者: 刘洪峰   .Net Micro Framework不支持文件系统(目前该项功能正在研发之中),所以无法像Windows和windows ce平台那样把需要永久保存的数据保存到文件之中。内存中保存的数据只要系统一掉电,所有的数据也都消失了,这对一些需要保存参数的应用来说真是不妙。 这几天在研究MF触摸屏功能时就遇到该问题,因为触摸屏校准之后,需要保存校准后的参数,否则MF一重启,难道还需要重新校准不成?  感谢Donald Thompson 和 Rob S. Miles,从他们的大作上找到了问题的解决办法。办法就是把对象保存到Flash(EEPROM)中(有点像对象的二进制序列化)。 下面是我整理的示例代码(实现比较简单,但总觉得不太正规,不知道能存多大,也搞不清楚数据到底存放在什么位置了。): using System; using Microsoft.SPOT; using System.Collections; using System.Threading;   namespace DataStorage {     public class Program     {               public static void Main()         {             FlashDatas fd = FlashDatas.Load();             fd.dump();             fd.Flag = “adfg”;             //fd.Items.Clear();                           …

1