﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-马宁的嵌入式开发研究</title><link>http://www.cnblogs.com/aawolf/</link><description>Windows Mobile, Windows Embedded</description><language>zh-cn</language><lastBuildDate>Sat, 04 Jul 2009 14:23:57 GMT</lastBuildDate><pubDate>Sat, 04 Jul 2009 14:23:57 GMT</pubDate><ttl>60</ttl><item><title>Windows Mobile 6.5 Widgets开发初体验</title><link>http://www.cnblogs.com/aawolf/archive/2009/06/21/1507861.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sun, 21 Jun 2009 10:28:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/06/21/1507861.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1507861.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/06/21/1507861.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1507861.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1507861.html</trackback:ping><description><![CDATA[<p>作者：马宁 </p> <p>Windows Mobile 6.5的DTK终于发布了，其中最吸引人的是两个功能：Widgets和Gesture API。Widgets是近来非常流行的一项技术，用于显示一些常用信息，比如天气、股票、新闻和体育等。Google Android和Symbian上已经有了类似的技术，可以说，Widgets是很好地结合了移动设备与互联网的技术。虽然Widgets开发简单，但很有可能改变移动互联网的未来格局。目前Windows Mobile 6.5的Widgets是基于W3C的Widgets草案，支持2008年12月22日草案，链接在<a href="http://www.w3.org/TR/2008/WD-widgets-20081222/">http://www.w3.org/TR/2008/WD-widgets-20081222/</a>。 </p> <h3>开发环境</h3> <p>好了，接下来，我们就要看一下，如何为Windows Mobile 6.5开发一个Widgets控件。首先，我们需要下载Windows Mobile 6.5的DTK，下载链接为： </p> <p><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e</a> </p> <p>Windows Mobile 6.5的DTK需要与Windows Mobile 6 SDK配合使用，Windows Mobile 6 SDK的下载地址： </p> <p><a href="http://www.microsoft.com/downloads/details.aspx?familyid=06111a3a-a651-4745-88ef-3d48091a390b&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=06111a3a-a651-4745-88ef-3d48091a390b&amp;displaylang=en</a> </p> <p>由于很多Widgets都需要联网，所以测试环境也需要ActiveSync的支持。Vista应该使用Windows Mobile Device Center 6.1，下载地址： </p> <p><a href="http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center-download.mspx">http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center-download.mspx</a> </p> <h3>编写Widgets</h3> <p>接下来，我们就可以来开发一个Widgets了。首先创建一个WidgetDemo的文件夹，创建一个叫做widget.htm的文件，将下面的HTML代码拷贝到文件中：</p><pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">html</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">head</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">title</span><span class="kwrd">&gt;</span>Cool Widget!<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;/</span><span class="html">head</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">body</span><span class="kwrd">&gt;</span> 

I'm a cool windows mobile 6.5 widget 

<span class="rem">&lt;!-- Search Google --&gt;</span>

<span class="kwrd">&lt;</span><span class="html">form</span> <span class="attr">method</span><span class="kwrd">="get"</span> <span class="attr">action</span><span class="kwrd">="http://www.google.cn/custom"</span> <span class="attr">target</span><span class="kwrd">="google_window"</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">table</span> <span class="attr">bgcolor</span><span class="kwrd">="#ffffff"</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;&lt;</span><span class="html">td</span> <span class="attr">nowrap</span><span class="kwrd">="nowrap"</span> <span class="attr">valign</span><span class="kwrd">="top"</span> <span class="attr">align</span><span class="kwrd">="left"</span> <span class="attr">height</span><span class="kwrd">="32"</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">a</span> <span class="attr">href</span><span class="kwrd">="http://www.google.com/"</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">img</span> <span class="attr">src</span><span class="kwrd">="http://www.google.com/logos/Logo_25wht.gif"</span> <span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">alt</span><span class="kwrd">="Google"</span> <span class="attr">align</span><span class="kwrd">="middle"</span><span class="kwrd">&gt;&lt;/</span><span class="html">img</span><span class="kwrd">&gt;&lt;/</span><span class="html">a</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="sbi"</span> <span class="attr">style</span><span class="kwrd">="display: none"</span><span class="kwrd">&gt;</span>????????<span class="kwrd">&lt;/</span><span class="html">label</span><span class="kwrd">&gt;&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="text"</span> <span class="attr">name</span><span class="kwrd">="q"</span> <span class="attr">size</span><span class="kwrd">="31"</span> <span class="attr">maxlength</span><span class="kwrd">="150"</span> <span class="attr">value</span><span class="kwrd">=""</span> <span class="attr">id</span><span class="kwrd">="sbi"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">label</span> <span class="attr">for</span><span class="kwrd">="sbb"</span> <span class="attr">style</span><span class="kwrd">="display: none"</span><span class="kwrd">&gt;</span>??????<span class="kwrd">&lt;/</span><span class="html">label</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="submit"</span> <span class="attr">name</span><span class="kwrd">="sa"</span> <span class="attr">value</span><span class="kwrd">="??"</span> <span class="attr">id</span><span class="kwrd">="sbb"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="client"</span> <span class="attr">value</span><span class="kwrd">="pub-9289651901062754"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="forid"</span> <span class="attr">value</span><span class="kwrd">="1"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="ie"</span> <span class="attr">value</span><span class="kwrd">="UTF-8"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="oe"</span> <span class="attr">value</span><span class="kwrd">="UTF-8"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="cof"</span> <span class="attr">value</span><span class="kwrd">="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="hidden"</span> <span class="attr">name</span><span class="kwrd">="hl"</span> <span class="attr">value</span><span class="kwrd">="zh_CN"</span><span class="kwrd">&gt;&lt;/</span><span class="html">input</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;&lt;/</span><span class="html">table</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;/</span><span class="html">form</span><span class="kwrd">&gt;</span>

<span class="rem">&lt;!-- Search Google --&gt;</span>
<font size="3"></font>
<span class="kwrd">&lt;/</span><span class="html">body</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;/</span><span class="html">html</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>这个Widget就是调用Google的搜索页面。原来的Widget Demo没有Google搜索的代码，我从网上找了一个示例加了进去。接下来，创建一个叫做config.xml的文件，将下列代码拷贝到文件中：</p><pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">="1.0"</span> <span class="attr">encoding</span><span class="kwrd">="utf-8"</span> ?<span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">widget</span> <span class="attr">version</span><span class="kwrd">="1.0"</span> 

<span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/ns/widgets"</span> 

<span class="attr">id</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">name</span><span class="kwrd">&gt;</span>My first widget<span class="kwrd">&lt;/</span><span class="html">name</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">content</span> <span class="attr">src</span><span class="kwrd">="widget.htm"</span> <span class="attr">type</span><span class="kwrd">="text/html"</span> <span class="kwrd">/&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">access</span> <span class="attr">network</span><span class="kwrd">="true"</span> <span class="kwrd">/&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">icon</span> <span class="attr">src</span><span class="kwrd">="icon.png"</span><span class="kwrd">/&gt;</span> 

<span class="kwrd">&lt;</span><span class="html">description</span><span class="kwrd">&gt;</span>This is my first widget, 

it won't make a lot of money on the 

marketplace but at least is cute!<span class="kwrd">&lt;/</span><span class="html">description</span><span class="kwrd">&gt;</span> 

<span class="kwrd">&lt;/</span><span class="html">widget</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>这是一个描述性的XML文件，结构非常清晰，不需要多做解释了。注意content,icon和access network三个节点。Content的src就是我们刚编写的widget.htm, 允许Widget访问网络，icon则是显示在Windows Mobile开始菜单里的图标。 </p>
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/zip_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="zip" border="0" alt="zip" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/zip_thumb.jpg" width="472" height="230"></a> </p>
<p>现在有了三个文件，我们使用WinZip将其压缩成一个ZIP文件。<b>特别需要指出的是，我们不能压缩这三个文件所在的文件夹，必须选中所有文件之后进行压缩。</b>然后我们将WidgetDemo.zip的扩展名改为WidgetDemo.wgt。 </p>
<h3>部署Widget</h3>
<p>到这里，Widget开发就完成了。通过ActiveSync或者共享目录，将Widget拷贝到Windows Mobile 6.5的模拟器中。 </p>
<p>&nbsp;<a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets1_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Widgets1" border="0" alt="Widgets1" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets1_thumb.jpg" width="282" height="438"></a>&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets2_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Widgets2" border="0" alt="Widgets2" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets2_thumb.jpg" width="283" height="439"></a> </p>
<p>我们使用File Explorer来找到这个Widget文件，点击之后，会提示是否安装并运行这个Widget。 </p>
<p>安装Widget之后，会自动运行，Google的图标来源于网络，所以可能会显示慢一些。如果Google图标没有显示出来，则说明网络连接不通： </p>
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets7_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Widgets7" border="0" alt="Widgets7" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets7_thumb.jpg" width="285" height="428"></a>&nbsp;&nbsp; <a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets5_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Widgets5" border="0" alt="Widgets5" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets5_thumb.jpg" width="283" height="425"></a> </p>
<p>输入关键字，点击button，Widget会自动启动IE Mobile，显示搜索结果。 </p>
<p>在使用时，我们可以在开始菜单里找到相应的图标，可以打开Widget。还需要说明的是，如何卸载这个Widget。 </p>
<p>在开始菜单 - Setting &#8211; System - Remove Programs里，可以看到我们的Widget，与卸载普通的应用程序没有区别。 </p>
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets6_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Widgets6" border="0" alt="Widgets6" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsMobile6.5Widgets_10321/Widgets6_thumb.jpg" width="241" height="367"></a> </p>
<p>我们的Widget被安装在\Program Files\Widgets\User\7的目录里，目录的序号与安装顺序有关，比如1里就是内置的Live Search。 </p>
<h4>写在最后</h4>
<p>写到这里，Widget的开发就完成了，怎么样？简单吧。Widget开发的简单性，正是它未来可能缔造辉煌的主要优势。任何熟悉HTML和JavaScript的人都可以开发出功能丰富的Widget，而Widget又可以像普通应用程序一样使用。 </p>
<p>虽然不像Palm的WebOS那样具有颠覆性，但是依托于目前的技术，才能获得大多数开发者的支持。现在只有Windows Mobile 6.5支持Widget，但其他移动设备是否有可能支持Widget呢？一切皆有可能。 </p>
<p>总之，一句话，大有可为！ </p>
<p>其实HTML和JavaScript并不是我的强项，下周还是给大家说说Gesture API吧 J </p>
<h3>参考资料</h3>
<p>Getting started with widgets on Windows Mobile 6.5 </p>
<p><a href="http://blogs.msdn.com/windowsmobile/archive/2009/06/04/getting-started-with-widgets-on-windows-mobile-6-5.aspx">http://blogs.msdn.com/windowsmobile/archive/2009/06/04/getting-started-with-widgets-on-windows-mobile-6-5.aspx</a> </p>
<p>Developing Widgets for Windows Mobile 6.5 </p>
<p><a href="http://msdn.microsoft.com/en-us/library/dd721906.aspx">http://msdn.microsoft.com/en-us/library/dd721906.aspx</a> </p>
<p>Windows Mobile 6.5 Widget系列文章 </p>
<p><a href="http://www.shangducms.com/post/Windows-Mobile-Widget.aspx">http://www.shangducms.com/post/Windows-Mobile-Widget.aspx</a></p> <img src ="http://www.cnblogs.com/aawolf/aggbug/1507861.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Bing API初体验</title><link>http://www.cnblogs.com/aawolf/archive/2009/06/08/1498696.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Mon, 08 Jun 2009 06:20:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/06/08/1498696.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1498696.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/06/08/1498696.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1498696.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1498696.html</trackback:ping><description><![CDATA[<pre class="csharpcode">作者：<a href="http://blogs.msdn.com/ninma/">马宁</a> </pre>
<p>Bing正式发布没几天，除了功能和搜索结果外，作为开发者来说，我们关心的还有Bing API啥时候能出。周末浏览MSDN网站时，发现Bing Service已经上线了，链接是：<a href="http://msdn.microsoft.com/en-us/library/dd900818.aspx">http://msdn.microsoft.com/en-us/library/dd900818.aspx</a> 
<p>Bing提供的API很丰富，除了搜索外，还增加了广告Ad、图片、新闻、Phonebook、拼写和视频的搜索。而访问协议有三种：JSON, XML和SOAP。JSON协议用于AJAX应用，XML用于Silverlight应用，SOAP用于传统的.NET等强类型程序。可见，微软在推出API方面还是很有效率的。 
<p>使用Bing API的第一步，是去Bing Developer Center上申请一个AppId，每个应用应该使用一个单独的AppId。Bing Developer Center的网址是：<a href="http://bing.com/developers">http://bing.com/developers</a> 。在页面里先用Live ID登录，然后选择Get a new App ID，填写一些基本信息，然后你就会得到一串很长的AppId。需要注意的是，Bing还有一个网址是<a href="http://www.bing.com/developer/">http://www.bing.com/developer/</a> ，估计是为1.1版本准备的，现在还不能申请AppId。大家一定要分清楚。 
<p>接下来，我们在Visual Studio 2008里创建一个.NET应用。在Project菜单里选择Add Service Reference，在弹出对话框的Address文本框里填入： 
<p><a href="http://api.search.live.net/search.wsdl?AppID=yourAppId">http://api.search.live.net/search.wsdl?AppID=yourAppId</a> 
<p>注意：AppID=后要填写你申请到的AppId. 
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/BingApi_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BingApi" border="0" alt="BingApi" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/BingApi_thumb.jpg" width="467" height="376"></a> 
<p>在找到LiveSearchService的引用后，将其添加到我们的工程中。接下来，我根据PhoneBook和WebSearch两个例子写了DEMO，更多例子可以参考： 
<p><a href="http://msdn.microsoft.com/en-us/library/dd251066.aspx">http://msdn.microsoft.com/en-us/library/dd251066.aspx</a> 
<p>需要提醒的是，可能是文档没有更新，Bing API的类名称还会发生变化。我发现在2009年6月8日导出的引用中，LiveSearchService的名称变成了LiveSearchPortTypeClient。Web Search的代码如下： <pre class="csharpcode">        <span class="kwrd">private</span> <span class="kwrd">void</span> button2_Click(<span class="kwrd">object</span> sender, EventArgs e)
        {
            <span class="rem">// LiveSearchService implements IDisposable.</span>
            <span class="kwrd">using</span> (LiveSearchPortTypeClient service = <span class="kwrd">new</span> LiveSearchPortTypeClient())
            {
                <span class="kwrd">try</span>
                {
                    SearchRequest request = BuildRequestWeb();

                    <span class="rem">// Send the request; display the response.</span>
                    SearchResponse response = service.Search(request);
                    DisplayResponseWeb(response);
                }
                <span class="kwrd">catch</span> (System.Net.WebException ex)
                {
                    <span class="rem">// An exception occurred while accessing the network.</span>
                    Console.WriteLine(ex.Message);
                }
            }
        }

        <span class="kwrd">private</span> SearchRequest BuildRequestWeb()
        {
            SearchRequest request = <span class="kwrd">new</span> SearchRequest();

            <span class="rem">// Common request fields (required)</span>
            request.AppId = AppId;
            request.Query = <span class="str">"马宁"</span>;
            request.Sources = <span class="kwrd">new</span> SourceType[] { SourceType.Web };

            <span class="rem">// Common request fields (optional)</span>
            request.Version = <span class="str">"2.0"</span>;
            request.Market = <span class="str">"en-us"</span>;
            request.Adult = AdultOption.Moderate;
            request.AdultSpecified = <span class="kwrd">true</span>;
            request.Options = <span class="kwrd">new</span> SearchOption[]
            {
                SearchOption.EnableHighlighting
            };

            <span class="rem">// Web-specific request fields (optional)</span>
            request.Web = <span class="kwrd">new</span> WebRequest();
            request.Web.Count = 30;
            request.Web.CountSpecified = <span class="kwrd">true</span>;
            request.Web.Offset = 0;
            request.Web.OffsetSpecified = <span class="kwrd">true</span>;
            request.Web.Options = <span class="kwrd">new</span> WebSearchOption[]
            {
                WebSearchOption.DisableHostCollapsing,
                WebSearchOption.DisableQueryAlterations
            };

            <span class="kwrd">return</span> request;

        }

        <span class="kwrd">private</span> <span class="kwrd">void</span> DisplayResponseWeb(SearchResponse response)
        {
            <span class="rem">// Display the results header.</span>
            listBox1.Items.Add(<span class="str">"Bing API Version "</span> + response.Version);
            listBox1.Items.Add(<span class="str">"Web results for "</span> + response.Query.SearchTerms);
            listBox1.Items.Add(<span class="kwrd">string</span>.Format(<span class="str">"Displaying {0} to {1} of {2} results"</span>,
                response.Web.Offset + 1,
                response.Web.Offset + response.Web.Results.Length,
                response.Web.Total));

            <span class="rem">// Display the Web results.</span>
            System.Text.StringBuilder builder = <span class="kwrd">new</span> System.Text.StringBuilder();
            <span class="kwrd">foreach</span> (WebResult result <span class="kwrd">in</span> response.Web.Results)
            {
                builder.Length = 0;
                builder.AppendLine(result.Title);
                builder.AppendLine(result.Description);
                builder.AppendLine(result.Url);
                builder.Append(<span class="str">"Last Crawled: "</span>);
                builder.AppendLine(result.DateTime);

                listBox1.Items.Add(builder.ToString());
                Console.WriteLine();
            }
        }</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<p>
<p>从代码上来看，很简单，先创建一个LiveSearchPortTypeClient的对象，然后，创建SearchRequest对象，在Request里需要设置的是AppId,Query和Sources。AppId不用多说了，Query里填我们要查的关键字，Sources里指定SourceType，我们这里指定的是SourceType.Web。 
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/image_thumb.png" width="602" height="431"></a> 
<p>将SearchRequest参数传递给LiveSearchPortTypeClient的Search方法，会返回一个SearchResponse的对象，里边包含我们的搜索结果。结果会包含在response.Web.Results对象里，最主要的参数是Title、Description和Url。 
<p>最后的运行结果就是这样的了： 
<p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/BingApi2_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BingApi2" border="0" alt="BingApi2" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/BingAPI_C8AD/BingApi2_thumb.jpg" width="433" height="426"></a> 
<p>Bing的好坏还需要时间检验，但是Bing API和Google API应该差不多，而且考虑了不同用户的需求，这也许就是软件公司和互联网公司不一样的地方。同时推出的还有Bing Map API，改天试一下。 
<p>&nbsp;</p>
<p>更多关于Windows Embedded CE开发的文章，请参考&#8220;Windows Embedded CE 中国研发团队&#8221;的中文博客：<a href="http://blogs.msdn.com/wincechina/">http://blogs.msdn.com/wincechina/</a> <img src ="http://www.cnblogs.com/aawolf/aggbug/1498696.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Smartphone 2.0 = Phone + Service</title><link>http://www.cnblogs.com/aawolf/archive/2009/05/24/1488266.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sun, 24 May 2009 07:14:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/05/24/1488266.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1488266.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/05/24/1488266.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1488266.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1488266.html</trackback:ping><description><![CDATA[<p><font size="3">作者：马宁 </font></p> <p><font size="3">Smartphone 2.0，这个概念有点哗众取宠，但是从2002年Smartphone的概念被推出后，智能手机的本身和外部环境改变了很多，在这个时间点上，我们有必要讨论Smartphone下一步会往何处去。我们姑且以Smartphone 2.0为名吧。 </font></p> <p><font size="3">什么是智能手机？有人会说，更大的分辨率、更好的CPU，有人会说能上网，有人会说可以玩游戏、听音乐。 </font></p> <p><font size="3">那么，每个人、每天都在用的Phone的功能是什么？电话、短信、联系人。Smartphone增加了浏览器（WAP或WEB）、媒体播放器、游戏、IM、Java VM、Ebook Reader等功能。最近SNS Client、 VoIP、App Store和Widget等功能也被加入到Smartphone中。但是这种功能的累加就是Smartphone的未来吗？ </font></p> <p><font size="3">从本质上来剖析这些新功能的本质是什么？是服务（Service）。最简单的服务应该就是网站提供的信息浏览服务，这也是互联网最初的基石。信息浏览服务的方式有两种：Pull和 Push。Pull的方式，是用户主动浏览网站的信息，并且点击超链接来获取自己想读的信息，浏览网站和RSS订阅都应该属于Pull方式；Push方式，是将信息进行编辑、整合后，推送给用户，最典型的例子就是手机报。 </font></p> <p><font size="3">在2G时代，Service来自电信运营商，是一个相对封闭的生态链，内容提供商（CP）和服务提供商（SP）必须通过运营商的网络向终端用户提供服务。运营商也通过自己的垄断地位和网络的封闭性，将竞争者隔绝在外。这种情况是短缺经济下的产物，在网络带宽稀缺情况下的必然产物。这种现象在互联网初期也能找到，我们用小猫拨号上网时，访问的163、169网站基本都是电信运营商提供的服务。 </font></p> <p><font size="3">3G时代，当网络带宽不再稀缺时，运营商发愁的是如何为用户提供各种各样的服务，从而让带宽使用率提高。用户使用1M和10M流量，运营商的成本几乎没有增加，而赚到的却是10倍的钱。 </font></p> <p><font size="3">好了，接下来的问题就是，服务来自于谁？移动运营商吗？必须承认，3G时代，很多服务仍然会来自于移动运营商。但是随着用户规模的扩大，运营商会发现，他们在某些小众领域是力不从心的，而小众领域恰巧是推动互联网发展的最大动力之一。互联网的历史告诉我们，一家公司不可能提供所有的服务，AOL不能，Yahoo不能，中国移动同样也不能。所以，当运营商感觉到他们的力不从心时，运营商构筑的樊篱会在一瞬间土崩瓦解。 </font></p> <p><font size="3">那么，3G时代，绝大部分的服务会来自于互联网服务商，无论是PC还是Smartphone，人们想访问到熟悉的服务，而不是两套完全不同的信息服务。 </font></p> <p><font size="3">随着Web 2.0时代的到来和无线网络带宽的增加，Service不再是单项的信息输送，用户的参与性会越来越强，而更多的用户信息会被加入到互联网中。SNS已经将我们的人际信息加入到互联网中。Smartphone的移动性，会将用户的地理位置信息加入到互联网中。Google Latitude服务已经展示了Location-aware SNS的魅力，下一步可能是和好友聚会整合。 </font></p> <p><font size="3">除了3G的到来外，推动Service发展的还有一个重要的力量——&#8220;云计算&#8221;。云计算会极大降低服务提供者的成本。服务提供者的身份也会发生质的改变，从大的企业迅速转向到小企业甚至是个人，网络服务也即将进入全民草根时代。一些小众化的网络服务，会在云计算时代，撼动整个互联网的传统格局。以后看到由门口大妈提供的煎饼果子价格指数时，千万别觉得稀奇。 </font></p> <p><font size="3">而智能手机会对云计算的发展起到一个助推的作用。如果将张亚勤提出的&#8220;云端&#8221;概念（Cloud + Client）推广到智能设备上，我们就可以得到下面的公式： </font></p> <p><font size="3">Smartphone 2.0 = Phone + Service </font></p> <p><font size="3">我们不必认为Phone就是智能手机，Netbook和MID等产品也会被包括在内。说白了，只要是能够随身携带、连接无线网络、运行在线服务的客户端的智能设备，我们都应该算在Phone中。 </font></p> <p><font size="3">Service也不能简单理解为Cloud，毕竟在云计算之外，很多服务提供商已经为我们提供了很多有用的在线服务，这些服务提供商不会因为云计算时代的到来而衰退，而会走一条逐渐融合的道路。 </font></p> <p><font size="3">Service应该包括两个方面：一端是运行在互联网上的服务（服务器端应用）；另一端是运行在智能设备上的服务客户端。再好的服务也需要落地，互联网的最后一公里将重现在3G时代的智能手机上。尽管现在的智能手机厂商都在哀叹，寻找合适的服务和软件太难，可是在一年以后，将会出现服务提供商为了将服务预置到Smartphone 上而激烈竞争的盛况。得终端者得天下。一些早起的服务提供商已经开始与终端设备制造商谋求合作了，在国内一些MID产品中已经出现了一些网络购物网站的链接。点击链接会进入浏览器，访问购物网站，这只是预置在线服务的初级模式。 </font></p> <p><font size="3">那么Service应该以什么方式预置到Smartphone上呢？对于简单的信息浏览和交互操作，浏览器无疑是最好的客户端，JavaScript跨平台的特性能够让在线网络供应商不必担心不同设备的兼容问题。除了浏览器外， Widget也会成为非常流行的一种客户端，网站开发者只需要用HTML和JavaScript编写简单的代码，就可以同时运行在Symbian和Windows Mobile手机上，这将一个多么大的诱惑？ </font></p> <p><font size="3">如果在线服务需要提供更多的交互性又该怎么办呢？比如现在非常流行的开心网，使用了RIA技术来设计用户交互游戏。Flash Lite的确改变了互联网的用户体验，微软的Silverlight尽管还在开发中，但是连接Service的能力也不容小觑。RIA技术将成为移动互联网的主流之一。为不同设备编写RIA运行端的成本，显然要低于为不同的硬件平台开发应用的成本。 </font></p> <p><font size="3">最后的一种方式就是编写客户端，对于复杂的应用和用户体验设计，单凭JavaScript和RIA就无法解决了。而且，基于浏览器的技术还有一个致命缺陷——无法适应移动网络的时断时续。比如IM和VoIP等复杂的应用，我们还是需要去编写客户端。但是如果去编写客户端的话，就势必面临为多个手机平台编写应用的困境。研发成本增加了，但是，收入未必能够相应增加。这也是制约在线服务进入移动领域的重要因素。 </font></p> <p><font size="3">我们有什么解决办法吗？不妨换一个思路来看，当Service无法适应多个Phone时，我们能否让Phone去适应Service呢？看到这句话，可能很多人的脑海里都会出现一个词——定制手机。 </font></p> <p><font size="3">定制手机的概念，最早来自于移动运营商，为了增加服务的黏性，运营商凭借垄断地位，要求手机厂商将提供的服务预置到手机中，比如移动的&#8220;心机&#8221;。再进一步时，运营商对Shell、用户体验都提出要求，为同一运营商定制的手机，无论运行什么样的操作系统，提供的外观、用户体验都是一致的，比如OMS。这就是定制手机。 </font></p> <p><font size="3">移动运营商为什么要定制手机？要推广自己的服务。那么，定制手机符合我们对于Smartphone 2.0的定义，是Phone与Service的结合体。但是Service一定要来自运营商吗？上面，我们已经探讨过这个问题，答案是不一定。那么，定制手机一定要来自于移动运营商吗？ </font></p> <p><font size="3">所有的服务提供商都可以按自己的要求去定制手机，这不是移动运营商的专利。Google虽然没有定制手机，但是 </font></p> <p><font size="3">推自己定制手机前，恐怕要想清楚这么几个问题： </font></p> <p><font size="3">1， 你的服务是否有足够多的人在用？ </font></p> <p><font size="3">2， 用你服务的人是否愿意为了使用你的服务而买一部新手机？ </font></p> <p><font size="3">3， 你是否有足够多的钱来推广你的服务和手机？ </font></p> <p><font size="3">其实这么算起来，能够推出自己定制手机的服务提供商并不多，符合这几个条件的，可能也只有腾讯、百度、新浪、魔兽世界、淘宝等几家了。 </font></p> <p><font size="3">我们来想像下这几家定制手机的样子： </font></p> <p><font size="3">1，腾讯，现在已经成为一个庞然大物了，几乎覆盖了所有互联网的领域，IM、在线游戏、门户网站、商城、SNS。但是，在移动领域，QQ一直受制于移动的短信，处于受支配的地位，也一度因为利益分配而和移动吵翻。如果腾讯能够掌握手机终端，将自己的服务预置其中，那么很多年轻人在自己手机上做的，就不再是发短信，而是聊QQ了。QQ用户的忠诚度极高，且对QQ文化极度认可，如果手机定价合理，加上QQ的定制外观，一定会有人趋之若鹜。 </font></p> <p><font size="3">2，百度，是一个雄心勃勃的公司，将服务推广到手机领域，是百度必须要做的事情。因为Google已经做了。但是，怎么推广到手机领域，将是百度面临的一个大问题。为运营商提供搜索服务，给移动运营商打工吗？如果那样，百度会重蹈腾讯与移动合作的覆辙，难免为人作嫁衣。将自己的搜索、贴吧、地图、购物等服务，有效整合起来。比如购物时，可以在贴吧里搜索产品评价，然后在地图里寻找附近的实体店，如果发现实体店价格偏高，还可以在购物中下订单。 </font></p> <p><font size="3">不过百度不适合自己推定制手机，而应该将自己的服务预置到手机中。那么百度会和谁合作呢？Android手机恐怕不是百度的最佳选择（PR会强烈反对吧？）。本着先易后难的原则，魅族M8也许应该成为百度的第一个合作目标。这两家的业务互补性非常强，一家缺应用，一家缺终端，而且绝对不会到对方的领域中兴风作浪。百度手机、魅族的搜索引擎？不靠谱吧？ </font></p> <p><font size="3">3，魔兽世界，在这里指代网络游戏。手机网游不是没人做，而是做不出来，最要命的问题还是出在终端的兼容性上。随着手机硬件性能的提高，游戏在手机上运行将不再是问题，但是如何在手机上跑出最好的效果，定制也许是一条路。 </font></p> <p><font size="3">另外，网络游戏是否会有新的玩法，比如结合现实的地理位置，和附近同一个工会的兄弟一起去打怪，或者交换装备？西单的下一个支柱产业也许是游戏装备？ </font></p> <p><font size="3">当然，还有一些针对特定人群的服务提供商，比如携程，如果能够直接在手机上订机票和酒店，并且将航班信息保存到手机的日程里，至少这种功能对我来说是有诱惑力的。 </font></p> <p><font size="3">定制手机可以用双方的渠道来进行推广，但1+1能否大于2，就看Service和Phone合作上是否能够齐心协力了。合作上可能会有这样几个难点： </font></p> <p><font size="3">1，互联网知名度和手机销售渠道如何整合，Service 提供商必须拥有强大的现金流，对终端的推广进行补贴， 手机厂商要利用自己的渠道推广Service的服务；使用Service的渠道销售手机，比如网上直销，也应该获得分成； </font></p> <p><font size="3">2，在线服务的收益如何分成，iPhone不存在这个问题，因为Phone和Service是一家，但是合作的双方肯定会遇到这个问题； </font></p> <p><font size="3">3，Service和Phone是否真的合适？Service 的更新速度快，Phone的操作系统、开发环境、硬件性能，是否能跟得上Service的发展。 </font></p> <p><font size="3">单纯从技术角度上来说，PPLive和开心网也具有定制手机的可能，但是考虑到他们的运营情况和现金流，短时间内恐怕很难。 </font></p> <p><font size="3">最后再说说+的问题，对，这个加号也有学问。没有加号，Phone和Service永远都是两个东西。我们可以将+看作一个渠道，沟通服务和用户的渠道。这个渠道做什么用？给用户提供订阅的服务，然后将用户的钱拿走。 </font></p> <p><font size="3">提供更多的服务是运营商要关心的事情，3G、WIFI，无非是一条提供服务的高速公路。如何收到钱，这才是Phone和Service要关心的事情。这就涉及到支付的问题了。移动运营商、信用卡、银联、支付宝，都是支付的渠道。支付会是移动互联网最后一公里上的制高点。提供了服务、控制了终端，钱收不上来，也是白搭。现在谁也说不好，谁会赢得最后的胜利，但是缺少了支付手段，Smartphone 2.0恐怕也是水中月、镜中花。 </font></p> <p><font size="3">只是想将自己最近的所思所想记录下来，没想到写了这么长，希望对奋斗在3G康庄大道上的朋友们有价值吧。</font></p> <p>更多关于Windows Embedded CE开发的文章，请参考&#8220;Windows Embedded CE 中国研发团队&#8221;的中文博客：<a href="http://blogs.msdn.com/wincechina/">http://blogs.msdn.com/wincechina/</a></p> <img src ="http://www.cnblogs.com/aawolf/aggbug/1488266.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>如何修改Windows CE的平台类型</title><link>http://www.cnblogs.com/aawolf/archive/2009/05/10/1453567.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sun, 10 May 2009 03:17:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/05/10/1453567.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1453567.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/05/10/1453567.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1453567.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1453567.html</trackback:ping><description><![CDATA[<p>作者：马宁</p> <p>在开发Windows CE的应用程序时，经常需要检测平台类型，了解我们的应用程序运行在Pocket PC、Smartphone还是Windows CE上。在这篇文章里，我们介绍如何编写一个应用程序来检测当前运行的平台类型。</p> <p>在开发Windows CE的操作系统时，我们会遇到另外一种情况：某些应用程序限制了运行的操作系统平台，比如只允许运行在Pocket PC上。而我们如果想在Windows CE上运行的话，就需要修改操作系统的平台类型。<b>注意：这种情况只能出现在测试时，不应该修改实际产品的平台类型，否则会引起很多安全性的问题。</b></p> <h3>创建平台检测程序</h3> <p>首先，我们需要创建一个应用程序来检测当前的平台类型，我们使用C++和Platform Builder来创建这个程序。如果你熟悉.NET Compact Framework的开发，想开发托管的平台检测程序，请参考：</p> <p>如何检测你的应用程序是否运行在模拟器上</p> <p><a href="http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx">http://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx</a></p> <p>检测你的程序运行在Pocket PC或Smartphone上</p> <p><a href="http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx">http://blogs.msdn.com/netcfteam/archive/2006/09/22/766343.aspx</a></p> <p>检测平台是否支持触摸屏</p> <p><a href="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">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</a></p> <p>创建OS Design和编译的过程在此略过，可以参考《Windows CE 6.0 R2开发初体验》. 我们首先在Platform Builder里创建一个子工程(Subporject),在Solution Explorer里找到Subporject节点，右键选择Add New Porject，会启动向导。</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image001_thumb.jpg" width="370" height="280"></a></p> <p>在向导中，选择WCE Application，将工程名称改为&#8221;CheckPlatform&#8221;.</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image002_thumb.jpg" width="437" height="395"></a></p> <p>为了少写代码，我们选择&#8221;Hello World&#8221; application，一般情况下，我们应该选择simple Windows Embedded CE application.</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image003_thumb.jpg" width="448" height="406"></a></p> <p>我们打开Subprojects节点中的CheckPlatform（工程名称）中的Source files节点中找到CheckPlatform.cpp文件。在文件中找到WndProc函数，将代码修改为：</p> <p>TCHAR szPlatform[1024];</p> <p>switch (message) </p> <p>{</p> <p>case WM_PAINT:</p> <p>hdc = BeginPaint(hWnd, &amp;ps);</p> <p>// TODO: Add any drawing code here...</p> <p>RECT rt;</p> <p>GetClientRect(hWnd, &amp;rt);</p> <p>if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0) </p> <p>{</p> <p>DrawText(hdc, szPlatform, _tcslen(szPlatform), &amp;rt, DT_CENTER);</p> <p>}</p> <p>EndPaint(hWnd, &amp;ps);</p> <p>break;</p> <p>default:</p> <p>return DefWindowProc(hWnd, message, wParam, lParam);</p> <p>}</p> <p>代码写的并不好，主要是为了验证SystemParametersInfo函数，我们就将Platform Type显示到窗体上了。正常情况下，我们应该用下面的代码判断运行平台：</p> <p>if (SystemParametersInfo(SPI_GETPLATFORMTYPE,sizeof(szPlatform),szPlatform,0)!=0)</p> <p>{</p> <p>if (lstrcmp(szPlatform,TEXT("PocketPC"))==0)</p> <p>; // Pocket PC</p> <p>else if (lstrcmp(szPlatform,TEXT("Smartphone"))==0)</p> <p>; // smartphone</p> <p>}</p> <p>如果使用SPI_GETOEMINFO参数，我们可以获得OEM信息，如果返回字符串中包括&#8220;Microsoft DeviceEmulator&#8221;，则表示当前应用程序运行在模拟器中。</p> <p>CheckPlatform程序编译好后，会自动加入到NK.bin 中。我们可以通过Command Shell，运行应用程序。调用Attach Device启动Windows CE操作系统后，选择Target菜单中的Target Control（快捷键Alt+1），输入&#8221;s chekplatform&#8221;，就可以运行CheckPlatform程序。</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image004_thumb.jpg" width="398" height="199"></a></p> <p>好了，最后看一下运行结果：</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image006_thumb.jpg" width="493" height="372"></a></p> <h3>修改操作系统的类型</h3> <p>上面的话题其实很多文章都讨论过了。但是在实际工作中，我们会遇到一些平台迁移的工作。我们会首先将Windows Mobile的软件在Windows CE上运行，以验证功能。不过有些软件检测了操作系统类型，在不修改软件代码的情况下，我们是否可以在Windows CE上运行检测平台类型的应用程序呢？</p> <p>Windows CE操作系统的Platform Type类型值是在BSP中被指定的，我们可以通过修改BSP中的Platform Type来改变系统的Platform Type。<b>注意：这种情况只能出现在测试时，不应该修改实际产品的平台类型，否则会引起很多安全性的问题。</b></p> <p>我们打开Windows CE 6.0 R2的源代码，位置在：</p> <p>x:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\INC</p> <p>我们修改的是DEVICEEMULATOR的代码，如果是其他平台的代码，则去相应BSP文件夹中的指定位置。在BSP的INC文件夹中，我们会找到一个ioctl_cfg.h文件。</p> <p>在ioctl_cfg.h文件中，我们会找到下面的代码：</p> <p>#if defined( project_smartfon )</p> <p>#define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")</p> <p>#elif defined( project_wpc )</p> <p>#define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")</p> <p>#else</p> <p>#define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")</p> <p>#endif</p> <p>#define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")</p> <p>Device Emulator的BSP通过编译选项区分了不同的平台类型，如果是Windows CE系统，则Platform Type为DeviceEmulator。好了，我们可以通过修改IOCTL_PLATFORM_TYPE的值，来&#8220;欺骗&#8221;操作系统，让应用程序认为自己运行在Pocket PC或Smartphone上。<b>注意：因为</b><b>Windows Mobile</b><b>和Windows CE</b><b>的函数库存在巨大差异，Windows Mobile</b><b>的应用程序在Windows CE</b><b>上未必能够直接运行。</b></p> <p>修改IOCTL_PLATFORM_TYPE之后，我们需要重新编译BSP，才能够完成Platform Type的修改。在Build菜单中选择Advanced Build Commands中的Rebuild Current BSP and Subprojects。</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image007_thumb.jpg" width="454" height="411"></a></p> <p>我们可以编译BSP和Subporject后，调用BuildRel和Makeimg生成新的NK.bin。这样，我们就可以节省大量的重新编译的时间。在我的机器上大概几分钟就完成了BSP的编译，如果是重新Build操作系统的话，需要二十分钟左右。</p> <p>NK编译成功后，选择Attach Device，重新运行系统和CheckPlatform程序，会得到下面的运行结果：</p> <p><a href="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image009" border="0" alt="clip_image009" src="http://images.cnblogs.com/cnblogs_com/aawolf/WindowsLiveWriter/WindowsCE_9DE0/clip_image009_thumb.jpg" width="480" height="361"></a></p> <p>最后还需要提示一下，这种方法只对通过SystemParametersInfo API检测Platform Type的应用程序有效。如果软件使用了其他方法检测Platform Type的话，那就需要具体问题具体分析了。</p> <p>更多关于Windows Embedded CE开发的文章，请参考&#8220;Windows Embedded CE 中国研发团队&#8221;的中文博客：<a href="http://blogs.msdn.com/wincechina/">http://blogs.msdn.com/wincechina/</a></p> <img src ="http://www.cnblogs.com/aawolf/aggbug/1453567.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>终于有了MSDN上的Blog</title><link>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453302.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sat, 09 May 2009 10:24:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453302.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1453302.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1453302.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1453302.html</trackback:ping><description><![CDATA[<p>在MSDN Blog上申请自己的Blog有一阵子了，但是一直没空打理。前几天，<a href="http://mobileside.cn/">张欣</a>在MSN上问我是不是失踪了，才发现太久没有更新Blog了。下面是我在MSDN上Blog的地址。</p> <p><a title="http://blogs.msdn.com/ninma/" href="http://blogs.msdn.com/ninma/">http://blogs.msdn.com/ninma/</a></p> <p>因为MSDN Blog属于微软的官方博客，所以内容可能会关注于我目前的工作：Windows Embedded CE。想和大家分享Windows Embedded CE中的新技术、开发技巧、使用心得。其他方面的内容，我会发表于博客园和CSDN的Blog上。</p> <p>写Blog的历史，应该从2001年CSDN的网友专栏开始，到现在也有差不多8年的时间了。一直将Blog作为记录自己开发中心得的地方。因为比较专注于Windows Embedded和Windows Mobile，所以访问量也很不错，也有一定的知名度。我现在维护的Blog主要有下面几个：</p> <p>CSDN Blog：<a title="http://blog.csdn.net/aawolf" href="http://blog.csdn.net/aawolf">http://blog.csdn.net/aawolf</a></p> <p>博客园：<a title="http://aawolf.cnblogs.com/" href="http://aawolf.cnblogs.com/">http://aawolf.cnblogs.com/</a></p> <p>嵌入式在线：<a title="http://blog.mcuol.com/aawolf/index.htm" href="http://blog.mcuol.com/aawolf/index.htm">http://blog.mcuol.com/aawolf/index.htm</a></p> <p>谢谢大家的关注，我会继续努力…</p><img src ="http://www.cnblogs.com/aawolf/aggbug/1453302.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>让Windows CE 6.0 R2支持.NET CF 3.5</title><link>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453298.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sat, 09 May 2009 10:07:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453298.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1453298.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453298.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1453298.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1453298.html</trackback:ping><description><![CDATA[<p>作者：马宁</p> <p>原文：<a title="http://blog.mcuol.com/User/aawolf/Article/6389_1.htm" href="http://blog.mcuol.com/User/aawolf/Article/6389_1.htm">http://blog.mcuol.com/User/aawolf/Article/6389_1.htm</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .NET Compact Framework已经升级到3.5的版本了，.NET CF 3.5支持LINQ和WCF等新的特性。对于Windows Mobile的开发人员来说，只需要安装一个更新的CAB包就可以了。可是Windows CE的开发者如果想将.NET CF 3.5加入到OS Design，还是需要花一点功夫的。我们会使用革新2410D开发板作为我们的平台，关于该开发板的介绍和开发过程，大家可以参考我之前的文章——《革新2410D开发板试用手记》，链接如下： <br><a href="http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html">http://www.cnblogs.com/aawolf/archive/2008/05/29/1209854.html</a> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 来自Mike Hall的QFE <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这篇文章的起因是Mike Hall在自己BLOG上发表的一篇文章： <br><a href="http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx">http://blogs.msdn.com/mikehall/archive/2008/03/17/net-compact-framework-3-5-component-for-windows-embedded-ce-6-0-catalog-component.aspx</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这篇文章介绍了微软在2008年一月份推出的一个QFE的包，其中包括了.NET Compact Framework 3.5的组件。所谓QFE，就是Quick Fix Engineering，用于快速修复一些BUG或者增加一些新的功能，修改比SP要小，所以可以每月推出。 <br>好了，既然有老大级的人物给我们指明了方向，小弟们跟着干就是了，首先在微软网站上下载这个QFE包： <br><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=a83124d5-7c8e-4abe-87fd-69654561be40&amp;displaylang=en</a></p> <p><strong>&nbsp;&nbsp;&nbsp; 然后确认你的开发计算机上已经装了下面的东西： <br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. Visual Studio 2005 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. Visual Studio 2005 SP1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. Visual Studio 2005 SP1 Update for Vista (if applicable) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. Windows Embedded CE 6.0 Platform Builder <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. Windows Embedded CE 6.0 SP1 (required if PB 6.0 Tools have been installed) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. Windows Embedded CE 6.0 R2</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 别紧张，基本上来说，只要你用的是Windows CE 6.0 R2，那么这些东西就都有了。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811125209image002.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来，我们确认将Visual Studio 2005关闭，然后运行QFE的安装程序就可以了。如果是在Vista下安装的话，可能会遇到安装文件出错的问题，这是由权限问题造成的。我们可以参考下面的文章解决： <br><a href="http://support.microsoft.com/kb/950793/en-us">http://support.microsoft.com/kb/950793/en-us</a> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过我在Vista下安装时没有碰到这个问题。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建.NET Compact Framework 3.5的应用程序</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，安装完成后，我们是不是需要打开Visual Studio 2005开始我们的平台定制历程了？不，首先还是让我们先换一台机器。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 换机器干嘛？因为我们遇到了一个逻辑问题——.NET CF 3.5的应用程序在哪里？.NET CF 3.5的应用程序是由Visual Studio 2008开发的，而我们的Platform Builder 6.0是运行在Visual Studio 2005之上的。您可以将VS 2005和VS 2008装在同一台机器上，但是我没有那么做，而是换了台装有VS 2008的机器，来进行下面的应用程序开发。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要说明的是，按照常规，我们应该先用Platform Builder 6.0构建一个CE 6.0的平台，然后导出SDK，然后再装有VS 2008的机器上安装，安装完成后再使用VS 2008开发一个针对该CE 6.0平台的应用程序。如果真这么干，拐弯就拐到爪哇国去了。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 幸好Visual Studio 2008为我们提供了另一种方式，还是来看一下：</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811125114image004.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开Visual Studio 2008后，还是首先选择File &#8211; New &#8211; Project菜单项。在New Project对话框中选择Visual C#中的Smart Device，然后选择创建Smart Device Project，名字随便定。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来的对话框对于经常看我文章的朋友也会很熟悉：</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811125056image006.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只是这一次我们选择的Target platform不是Pocket PC或者Smartphone，而是Windows CE，还要记得一定要选择.NET CF 3.5。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，接下来就进入了IDE的窗口设计器，看起来和普通的WinForm程序没有太多区别。我们添加了三个按钮和一个ListBox，还有两个菜单项。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811125039image008.jpg"></p> <p><strong>在第一个Button&#8220;Message&#8221;里添加下面的事件处理函数：</strong> <br>&nbsp;&nbsp;&nbsp; private void button1_Click(object sender, EventArgs e) <br>&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("Hello,.NET CF 3.5"); <br>} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我承认我没追求，所有程序不都是从Hello World开始的吗？为了要突出一下.NET Compact Framework 3.5的新特性，我们还要添加对于LINQ的支持： <br>&nbsp;&nbsp;&nbsp; private void button2_Click(object sender, EventArgs e) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listBox1.Items.Clear();</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var numbers = new List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var evenNumbers = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from p in numbers <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where (p % 2) == 0 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select p;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (var number in evenNumbers) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listBox1.Items.Add(string.Format("{0} ", number)); <br>} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于LINQ我就不多作解释了，记得添加System.Linq的引用，还有： <br>using System.Linq; <br>在添加完Linq后，我们还有一个更直接的办法，就是版本号： <br>&nbsp;&nbsp;&nbsp; private void button3_Click(object sender, EventArgs e) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(Environment.Version.ToString()); <br>} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Environment中的Version属性可以很直接的告诉我们当前运行的.NET CLR的版本号。具体细节看MSDN帮助吧。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，程序编写好了，接下来就要运行它了。但是我们的Visual Studio 2008里并没有Windows CE的模拟器。没办法，只好选择Windows Mobile 6 Professional的模拟器来跑了。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811124947image009.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事实证明，在应用程序开发方面，Windows CE和Windows Mobile的差距的确不大。程序不但跑起来了，而且菜单还按照Windows Mobile的方式显示到了窗体下方。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811124805image010.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面就是点击Version按钮后的运行结果，可以看到我们的.NET CLR是3.5的。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建支持.NET CF 3.5的OS Design <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK，终于可以回到我们的Platform Builder里创建包含.NET CF 3.5的OS Design了。我们可以创建一个新的OS Design，或者利用已有的OS Design。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 具体方法请参考： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 革新2410D开发板试用手记(三) <br><a href="http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html">http://www.cnblogs.com/aawolf/archive/2008/06/03/1212696.html</a> <br>Windows Embedded CE 6.0开发初体验（五）构建CE平台 <br><a href="http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html">http://www.cnblogs.com/aawolf/archive/2008/01/15/1040306.html</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当我们打开OS Design的Catalog Item View页面。在Core OS - CEBASE &#8211; Application and Services Development下，我们可以看到.NET Compact Framework 2.0和.NET Compact Framework 3.5两个选项。选择.NET CF 3.5的选项和简体中文资源，以及OS Dependencies for .NET Compact Framework 3.5的选项。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811124727image012.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然，我们也可以在OS Design的创建向导里选择.NET CF 3.5的组件。 <br>为了验证我们的.NET CF 3.5 CLR可以良好运行，我们还需要添加一个.NET CF 3.5的应用程序。怎么添加呢？</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一步，呃，从另外一台机器上把应用程序拷过来&#8230;&#8230; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二步，在Solution Explorer里选择OS Design下的Parameter Files下的Project.bib文件。在《Windows Embedded CE 6.0开发初体验（六）平台定制》中我们详细讨论过bib文件，请参考： <br><a href="http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html">http://www.cnblogs.com/aawolf/archive/2008/02/03/1063444.html</a> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第三步，将.NET CF 3.5的应用程序加入到OS Design中:</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811124410image014.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就一句话，简单吧？然后就是OS Design的编译、下载、运行和调试了。需要说明一点的是，可能由于Debug版的NK.bin太大，我一直没有成功运行起来。不过Release版的一切正常。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811123836image016.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于编译和下载的话题，可以参考下面的文章： <br>革新2410D开发板试用手记(六) <br><a href="http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html">http://www.cnblogs.com/aawolf/archive/2008/06/24/1228752.html</a> <br>Windows Embedded CE 6.0开发初体验(七) 编译和调试平台 <br><a href="http://we.cnblogs.com/article.aspx?id=20">http://we.cnblogs.com/article.aspx?id=20</a></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了，最后来看一下运行结果：我们点击了Version按钮，显示当前的.NET CF CLR确实是.NET CF 3.5版本。</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811123752image018.jpg"></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后让大家看看开发板的裸照吧（开发板本来就&#8230;&#8230;）</p> <p><img border="0" alt="" src="http://www.mcuol.com/download/uppic/20080811122012image020.jpg"></p> <img src ="http://www.cnblogs.com/aawolf/aggbug/1453298.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Windows Embedded Standard的U盘启动</title><link>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453282.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Sat, 09 May 2009 09:37:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453282.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1453282.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/05/09/1453282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1453282.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1453282.html</trackback:ping><description><![CDATA[<p> 作者：马宁</p> <p>原文：<a title="http://tech.it168.com/a2008/1223/260/000000260962.shtml" href="http://tech.it168.com/a2008/1223/260/000000260962.shtml">http://tech.it168.com/a2008/1223/260/000000260962.shtml</a>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 现在大多数主板都支持USB启动，而U盘便于携带的特点，能够让你打造一个属于你自己的PC环境，使用自己熟悉的界面。现在U盘启动的系统已经非常时髦了，比如Ubuntu Linux。而大家有没有想过将Windows XP放到U盘里？<br>&nbsp;&nbsp;&nbsp;&nbsp; Windows XP Home或Pro放在U盘里的确有点难度，但是Windows XP Embedded（也就是现在的Windows Embedded Standard）放在U盘里却不是件太难的事情，我们可以根据自己的需要定制出一个比较小的操作系统镜像（最小可以达到20M左右，一般在300M左右）。<br>&nbsp; Windows Embedded Standard开发的文章请参考：<br>&nbsp; http://www.cnblogs.com/aawolf/archive/2008/06/25/1229698.html<br><b>&nbsp; 准备启动环境<br></b>&nbsp; 开发工具自然就是Windows Embedded Studio，具体使用方法请参考《Windows Embedded Standard开发初体验》。除了开发工具外，我们还需要准备存储介质——U盘，从市面上随便买一个就可以，建议容量是1GB，小一点也没关系，最好是USB 2.0的，否则在拷贝文件时会比较慢。<br>&nbsp; 接下来就是U盘的准备步骤：<br>&nbsp; 1.使用usboot设置U盘的工作模式<br>&nbsp; 我们使用的usboot166是第三方工具，可以在雷志刚的博客上找到：<br>&nbsp; http://cid-ea7144b242d01ad2.skydrive.live.com/browse.aspx/Public/%e7%ac%ac%e4%b8%89%e6%96%b9%e5%b7%a5%e5%85%b7<br>&nbsp; 将U盘插到计算机上之后，我们打开USBoot的界面，就可以看到磁盘的列表。</p> <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i2.sinaimg.cn/IT/s/2008-12-23/a8969a0059aab997f1d80b2c4975473a.jpg"> <p>&nbsp; 第一个是计算机的硬盘，第二个才是我们要格式化的U盘，所以千万别弄错。<br>&nbsp; 选择了要格式化的U盘之后，还要选择工作模式，点击界面下方的链接处。 <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i2.sinaimg.cn/IT/s/2008-12-23/7a980264d9d4d99a2a10c4abd221ce78.jpg"> <p>&nbsp; 我选择使用的是HDD模式，据说FDD模式也可以，没试过。有一款Thin Client竟然不支持USB-HDD模式启动，抓狂……<br>&nbsp; 接下来的工作，就是按照提示，等待U盘格式化完成，再写入引导文件。<br>&nbsp; 其实这一步主要是改变U盘的工作模式，因为我们不使用DOS启动，所以启动文件还要通过下一步来做。<br>&nbsp; 2.使用ufdprep写入启动信息<br>&nbsp; 假设Windows Embedded Standard的开发工具安装在C盘，我们可以在下面的目录中找到一个名叫UFDPrep的程序：C:\Program Files\Windows Embedded\utilities <p>&nbsp; 我们在命令行中执行这个程序：<br>&nbsp; 如果不知道该怎么使用，可以用ufdprep /?来查询参数。<br>&nbsp; 如果我们想格式化U盘，则需要使用下面的命令行：<br>&nbsp; Ufdprep /size=1000 /ntfs /y g:<br>&nbsp; /size，表示使用U盘上多大的空间，不能超过磁盘的最大存储空间；/ntfs，是磁盘格式；/y，表示安全提示时选择y；g:是U盘的盘符。<br>&nbsp; 可能需要等待一段时间，如果看到格式化成功的提示，则表示该操作完成。<br>&nbsp; 我们还可以使用下面命令行来验证ufdprep是否成功：<br>&nbsp; Ufdprep /verify g:<br><b>&nbsp; 制作最小化系统</b><br>&nbsp; 接下来我们就需要将操作系统拷贝到U盘上去了。我们要做的不是DOS启动盘，所以刚才将U盘格式化为NTFS格式的了。所以接下来，我们要做一个Windows Embedded Standard的操作系统。因为不知道目标设备的驱动，所以，比较稳妥的方式就是构建一个命令行的Windows Embedded Standard平台，将一些常用工具拷贝进去，个人感觉，比DOS启动盘好用。<br>&nbsp; 构建步骤，与步骤三类似，所以详情参考“制作XPe镜像”：<br>&nbsp; 1.&nbsp; 打开Target Designer，创建一个新的Configuration，取名MiniOS。<br>&nbsp; 2.&nbsp; 在组件列表中，选择Software-&gt; Test&amp;Development 下的MinLogon组件，下图红圈所示位置： <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i3.sinaimg.cn/IT/s/2008-12-23/20af0d679d0e405a7c2944100bec2ea2.jpg"> <p>&nbsp; 3.选择USB boot 2.0组件（见“制作XPe镜像”一节）；<br>&nbsp; 4. 选择Configuration菜单中的Dependency Check，或者F5，进行依赖检查；<br>&nbsp; 5. 选择Configuration菜单中的Build Target Image，或者F7，编译操作系统。<br>&nbsp; 6.编译出来的操作系统大约20M左右，只提供命令行界面。我们将C:\Windows Embedded Images文件夹下的所有文件拷贝到U盘的根目录中。<br>&nbsp; 7. 我们在U盘的根目录中建一个Tools文件夹，将一些常用工具拷贝进去，比如：<br>System32目录下的Diskpart、edit等命令<br>&nbsp; 因为要收集硬件信息，所以要拷贝C:\Program Files\Windows Embedded\utilities下的TAP程序到Tools目录中。大家注意，在这里我们使用的是32位版本的TAP，而不是16位版本的TA，这也说明我们运行的环境是32位操作系统环境。<br>&nbsp; 8. 将U盘从计算机上安全删除；插到目标设备的USB端口上；<br>&nbsp; 9. 重新启动目标设备，在BIOS中选择USB-HDD启动；<br>&nbsp; 10. 进入FBA过程；<br>&nbsp; 11. FBA过程完成后，会重新启动，然后显示XP的启动画面，进入命令行界面；<br>&nbsp; 12.运行Tools目录中的TAP命令，该命令会收集硬件信息，在Tools目录下产生device.PMQ文件。 <p>&nbsp; 到这一步，我们的工作就基本完成了，这个命令行的Windows Embedded Standard系统一定要好好保存。自从软盘退出历史舞台后，这是我用过的最适合随身携带的工具盘。宝贝啊。 <p><b>&nbsp; 制作XPe镜像<br></b><br>&nbsp; 1. 导入PMQ文件<br>&nbsp; 接下来的工作就比较正常了，将U盘插回到计算机上，将U盘里的device.PMQ文件拷贝到计算机上来。如果之前你没有做完FBA的Mini操作系统，建议你也拷一份出来，毕竟20多M的小东西还是很好用的。<br>&nbsp; 我们打开Windows Embedded Studio中的Component Designer将PMQ文件转换为组件文件（.sld文件）。Target Designer会根据硬件信息组件（sld文件）判断将哪些驱动程序加入到操作系统镜像中来。<br>&nbsp; 选择Component Designer的File菜单里的Import选项，会让你打开PMQ文件，然后打开下面的对话框： <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i1.sinaimg.cn/IT/s/2008-12-23/e6b4ddc10d3e2e26a39c5bc3fb1220bf.jpg"> <p>&nbsp; 点击Start开始导入过程，一般来说，会比较慢，需要几分钟的时间。导入完成后，会生成一个sld文件，将其保存到我们制定的目录下即可。 <p>&nbsp; 2. 导入组件数据库<br>&nbsp; 接下来，我们要将生成的组件sld文件导入到组件数据库中。在这一步前，请确认所有的Target Designer和Component Designer都已经被关闭。<br>&nbsp; 然后打开Component Database Manager ，界面如下图所示： <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i2.sinaimg.cn/IT/s/2008-12-23/6fc281ac03e83988ec76aea2927cf345.jpg" width="389" height="355"> <p>&nbsp; 为了导入组件，我们点击Import按钮，打开下面的界面： <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i2.sinaimg.cn/IT/s/2008-12-23/ba5c7197910fe960ed3ed5dcff813deb.jpg" width="357" height="323"> <p>&nbsp; 点击SLD file文本框后的按钮，上图红圈所示，选择刚才保存的sld文件，然后点击Import按钮。Component Database Manager会提示导入是否成功。 <p>&nbsp; 3.生成WES镜像<br>&nbsp; 导入sld文件成功之后，我们就可以重新打开Target Designer，来编译我们的操作系统Image文件。<br>&nbsp; 首先需要新建一个Configuration文件，进入Target Designer主界面。<br>&nbsp; 我们会看到刚才被导入的组件，会默认出现在组件列表的根目录中，我们双击，将该组件加入我们的操作系统中。<br>接下来，我们添加功能组件：<br>&nbsp; 1. Runtime Quick Start Helper Macro，位于Software -&gt; Test &amp; Development目录下 <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i1.sinaimg.cn/IT/s/2008-12-23/cdeaa9449777833845347fb8d7f112d3.jpg" width="211" height="230"> <p>&nbsp; 2. USB boot 2.0组件和User Account组件，位于Embedded Enabling Features目录下，其中USB boot 2.0是为了支持USB启动的组件，而User Account组件是默认的登录用户。 <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i3.sinaimg.cn/IT/s/2008-12-23/14b22da403feb657d8f06a6d127f35af.jpg"> <p>&nbsp; 3. 设置User Account组件 <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i2.sinaimg.cn/IT/s/2008-12-23/1ed38f799a8e144c404d1dc4a0e3928a.jpg"> <p>&nbsp; 中间部分是我们已经添加到操作系统中的组件，我们打开User Account组件，选择Settings，在IDE的右侧会显示属性窗口，设置帐号的用户名和密码： <p><img alt="WindowsEmbeddedStandard的U盘启动" src="http://i0.sinaimg.cn/IT/s/2008-12-23/d1d822ea06a4b2b90ddad2d0800ce889.jpg" width="254" height="181"> <p>&nbsp; 4. 依赖检查；<br>&nbsp; 5. 编译目标操作系统。<br>&nbsp; 6. 将编译好的Image文件，拷贝到我们的U盘上。<br>&nbsp; 7.经过FBA过程后，重启动，我们就可以进入Windows Embedded Standard的界面了。 <p>&nbsp; 参考资料<br>&nbsp; http://blogs.msdn.com/ningling/archive/2007/06/20/xpe-usb-2-0.aspx<br>&nbsp; http://lzg-ad.blog.sohu.com/77528224.html <img src ="http://www.cnblogs.com/aawolf/aggbug/1453282.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Meizu M8 SDK开发初体验</title><link>http://www.cnblogs.com/aawolf/archive/2009/03/12/1409760.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Thu, 12 Mar 2009 08:27:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/03/12/1409760.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1409760.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/03/12/1409760.html#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1409760.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1409760.html</trackback:ping><description><![CDATA[摘要: 作者：马宁魅族在经历了两年多的开发后，M8终于上市了。能够被称为iPhone Killer，说明了M8有自身的优势。之前也有朋友问过我，会买一款M8试试吗？我说，不会，除非M8出SDK。今天是个可能破财的日子，因为M8真的出SDK了&#8230;&#8230;安装魅族M8用的是Windows CE的操作系统，所以配置开发环境并不是很难，以前有过Windows Mobile开发经验的人，配置起来不会&nbsp;&nbsp;<a href='http://www.cnblogs.com/aawolf/archive/2009/03/12/1409760.html'>阅读全文</a><img src ="http://www.cnblogs.com/aawolf/aggbug/1409760.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>2009年会火的移动应用</title><link>http://www.cnblogs.com/aawolf/archive/2009/02/09/1387119.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Mon, 09 Feb 2009 15:31:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2009/02/09/1387119.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1387119.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2009/02/09/1387119.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1387119.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1387119.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">必须承认，</span><span lang="EN-US"><font face="Calibri">2009</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">年的移动应用领域还存在很多变数，比如</span><span lang="EN-US"><font face="Calibri">3G</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">、</span><span lang="EN-US"><font face="Calibri">WiFi</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的推广，</span><span lang="EN-US"><font face="Calibri">Netbook</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">MID</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的普及等。但我们可以像中学解方程一样，将其他因素排除在外，只是试着分析一下，</span><span lang="EN-US"><font face="Calibri">2009</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">年可能会火的移动应用有哪些：</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">在线商店</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">&#8220;在线商店&#8221;这个概念已经不新鲜了，但是经历了</span><span lang="EN-US"><font face="Calibri">App Store</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的发扬光大，各大手机厂商和移动运营商似乎发现了新的蓝海。</span><span lang="EN-US"><font face="Calibri">Symbian</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">Windows Mobile</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">也准备推出类似的在线商店。除了操作系统厂商外，移动运营商和独立</span><span lang="EN-US"><font face="Calibri">ISV</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">也在开发类似的在线商店。不过总得来说，操作系统厂商在这方面有独特的优势——没有设备适配的问题。运营商和</span><span lang="EN-US"><font face="Calibri">ISV</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">都需要兼容不同的设备，这一点非常困难，到目前还没有完善的解决方案。而手机操作系统厂商所面临的问题要少得多，</span><span lang="EN-US"><font face="Calibri">iPhone</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">没有这个问题，</span><span lang="EN-US"><font face="Calibri">Symbian</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">要解决</span><span lang="EN-US"><font face="Calibri">S40</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">S60</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的问题，</span><span lang="EN-US"><font face="Calibri">Windows Mobile</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">有</span><span lang="EN-US"><font face="Calibri">Pocket PC</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">Smartphone</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的区别，不过这种差距不是不可弥合的。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">在线商店的最大竞争对手是</span><span lang="EN-US"><font face="Calibri">P2P</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">下载。虽然</span><span lang="EN-US"><font face="Calibri">P2P</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">面临很多法律问题，但是在短期内仍然是人们获取影音文件最方便的渠道。在线商店应该在内容、渠道和支付手段上与</span><span lang="EN-US"><font face="Calibri">P2P</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">竞争。人们并非不愿意为获取的影音文件付钱，关键是要让他们觉得物有所值。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">在中国，在线商店的困境主要来自两方面：运营商的垄断、支付手段的困难。</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">电子书</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">又不是新东西，不过在</span><span lang="EN-US"><font face="Calibri">2009</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">年电子书的概念可能会发生一些变化。传统的电子书是将纸质图书电子化，再以某种格式通过电脑存储和展示。但是，随着网络文学的发展，并不仅限于离线模式的电子书，互联网上流传的各种内容都可以成为电子书的一部分。目前已经出现了自动抓取某些文学网站或网络社区内容的工具软件，只要将选取解析后的内容推送到移动设备上，让手机用户在移动环境中可以方便地阅读。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">网络文学的抓取工具可以运行在</span><span lang="EN-US"><font face="Calibri">PC</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">上，也可以运行在服务器上。电子书软件是否可以成功的关键在于，能否让用户方便的找到想读的内容。我们可以从两个方面来解决这个问题：一，强大的搜索和索引管理功能；二，让用户添加自己想阅读的内容，屏蔽那些不想读的用户评论。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">而客户端软件相对简单，给用户提供一个舒适的阅读界面就可以了。还要解决的问题，就是中间格式的问题，从不同网站抓取回来的信息需要一个中间格式来保存和传播。听起来，和目前流行的网页处理方式差不多，不过咱们要处理的不是千奇百怪的互联网，而是来自几个网站的网络小说而已。</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">网页游戏</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">网页游戏在</span><span lang="EN-US"><font face="Calibri">PC</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">上已经如火如荼的发展起来了，比起传统的游戏来说，既有网络游戏的联网与交互功能，又避免了客户端游戏安装的麻烦。网页游戏主要是使用</span><span lang="EN-US"><font face="Calibri">Flash Lite</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">JavaScript</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">来实现。只所以说网页游戏会在手机上有一个飞跃式的发展，是因为技术成熟了。无论是基于</span><span lang="EN-US"><font face="Calibri">Webkit</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">，还是</span><span lang="EN-US"><font face="Calibri">Opera</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">等主流浏览器，对</span><span lang="EN-US"><font face="Calibri">Flash Lite</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和</span><span lang="EN-US"><font face="Calibri">JavaScript</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的支持已经相当完善了。接下来就是如何善用这些技术的问题了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">而比起传统手机游戏来说，网页游戏打开就能玩、无需维护的特点，十分适合在手机上使用。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">个人观点，我们很难有大段完整的时间来玩手机游戏，通常是在公交车上、或者等人时来玩。这种时间从几分钟到十几分钟不等，而且随时可能被打断，也可能会受到晃动和其他因素的干扰。如何根据手机游戏的使用环境来设计有趣的游戏，并且保证手机游戏可以方便地保存进度，这就是游戏设计者最大的挑战了。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">顺便说一句，我对网络游戏领域并不熟悉，这些观点来自春节回家路上和同学的一番交流，受教了。</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">移动电视</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">这里指的移动电视，不仅仅是数字广播方式的移动电视，还包括移动流媒体广播。移动电视的标准之争已经初现端倪，其实最终哪种标准胜出，只是厂商的盛宴而已，对于一般用户并不重要。有一个标准之后，产业链的其他环节就可以有效发展了，比如内容提供、信号覆盖范围、解码芯片、设备制造等领域。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">移动电视的内容还无法满足用户的需求，如果内容只是来自传统的电视媒体，移动电视只能算是传统电视媒体的一个补充。考虑到数字电视广播的特点，其频道数量几乎是无限的，我们可以为用户提供无数个个性化的节目。当然，这方面还会受到政策风险的限制。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">移动流媒体服务也站到了手机的门槛上，移动流媒体服务中广泛使用的</span><span lang="EN-US"><font face="Calibri">Flash Lite</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">技术已经被手机广泛采用，这一点和网页游戏类似。</span><span lang="EN-US"><font face="Calibri">YouTube</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">等网站也已经有了移动版本。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">而基于</span><span lang="EN-US"><font face="Calibri">P2P</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">技术的移动广播服务，在规避掉政策风险后，也会在手机领域有一个快速的发展。</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">定位增值服务</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">定位增值服务的话题，我已经说得太多了。离线式地图软件已经发展到了一个瓶颈，而在线式地图软件的潜力，只是露出冰山一角。</span><span lang="EN-US"><font face="Calibri">Google</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">最近推出的朋友定位服务，就是定位应用的增值服务之一。关键是在通用的地图平台上，用一种标准的方式来添加增值服务。</span><span lang="EN-US"><font face="Calibri">Google</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">地图提供了标准的</span><span lang="EN-US"><font face="Calibri">API</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">，所以，任何服务供应商可以增加任何的增值服务。而手机作为最终的展现方式，只需要将合成后的地图及服务推送到客户端即可。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">除了基于</span><span lang="EN-US"><font face="Calibri">GPS</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和手机基站定位的定位方式外，</span><span lang="EN-US"><font face="Calibri">2009</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">年，</span><span lang="EN-US"><font face="Calibri">WiFi</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">定位也会经历一个从无到有的过程。由于</span><span lang="EN-US"><font face="Calibri">WiFi</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">热点是由电信运营商部署，提供</span><span lang="EN-US"><font face="Calibri">WiFi</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">定位服务的也理所应当是电信运营商。不过，我倒是希望第三方开发商能够介入其中，毕竟除了定位服务外，我们更需要的是增值服务。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">还会有一个热点就是定位服务和</span><span lang="EN-US"><font face="Calibri">SNS</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的结合，这种结合已经初现端倪，比如</span><span lang="EN-US"><font face="Calibri">Google</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的亲友位置显示。我们希望</span><span lang="EN-US"><font face="Calibri">2009</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">年，在中国能够有这种结合的产品出现。</span></p>
<h2 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria; mso-fareast-font-family: 宋体; mso-fareast-theme-font: major-fareast; mso-ascii-theme-font: major-latin; mso-hansi-theme-font: major-latin">个人信息主页</span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">最后一类应用是类似</span><span lang="EN-US"><font face="Calibri">iGoogle</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的个人主页（</span><span lang="EN-US"><font face="Calibri">Personal Portal</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">），为什么说个人主页对于手机应用这么重要。主要是因为手机屏幕显示区域有限，如果让用户切换到不同页面来查找相关信息，对于用户来说操作比较困难。所以，如果能够将天气信息、公众新闻、个人有兴趣的新闻、朋友的新动向（来自</span><span lang="EN-US"><font face="Calibri">SNS</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">），新的电子邮件或短信，等一系列个人相关的信息显示到一个页面中。如果用户想查看详细信息，则可以点击进入某类信息的页面。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">如果有可能个人信息主页显示在手机的主屏幕上，这对于便利性来说是一种飞跃。可是，我们不能让手机开机后直接进入浏览器，所以如何让应用程序和网页能够融合，可能是下一步我们要做的事情。我能想到的办法是</span><span lang="EN-US"><font face="Calibri">Widget</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">，使用</span><span lang="EN-US"><font face="Calibri">Widget</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">让分类信息显示在手机的主屏幕上，用户可以根据自己的喜好进行配置。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">我们甚至还可以再进一步，模糊网站与应用程序的界限。对于普通手机用户来说，访问新浪网和打开</span><span lang="EN-US"><font face="Calibri">QQ</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">聊天，都是一种功能。基于</span><span lang="EN-US"><font face="Calibri">PC</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的方式：打开浏览器，输入新浪网网站；打开</span><span lang="EN-US"><font face="Calibri">QQ</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">应用程序。这些区别对于输入</span><span lang="EN-US"><font face="Calibri">URL</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">困难的手机用户来说，就会限制他们对互联网的使用。如果我们能够像</span><span lang="EN-US"><font face="Calibri">Hao123</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">一样，将常用网站地址和常用应用程序放在一个程序列表中，用户选择网站就会打开浏览器，访问指定网站；而用户选择应用程序，就会打开指定程序。这种改进对于技术来说，不成问题。需要改变的只是思路，对于技术人员，网站和程序是两种东西，而对于普通用户来说，这只是不同的功能，而已。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">需要多说一句的是，个人信息主页（</span><span lang="EN-US"><font face="Calibri">Personal Portal</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">）不一定非要来自于手机操作系统厂商或者</span><span lang="EN-US"><font face="Calibri">OEM</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">，</span><span lang="EN-US"><font face="Calibri">ISV</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">和个人开发者也可以介入其中，</span><span lang="EN-US"><font face="Calibri">Spb</font></span><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">的同志们就为我们开了个好头。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US"><o:p><font face="Calibri">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">写这么多，算是抛砖引玉吧。可能每个人看完这篇文章都有话要说，请一定说出来，思想碰撞之后才会有火花，我的知识也有局限性，希望大家能为我补充。另外，咱们可以做个约定，等一年之后的现在，看看咱们预测的这些技术，哪些得到了长足的发展。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin">拭目以待。</span></p>
<img src ="http://www.cnblogs.com/aawolf/aggbug/1387119.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>SD 2.0——厂商与山寨的碰撞</title><link>http://www.cnblogs.com/aawolf/archive/2008/12/09/1351122.html</link><dc:creator>马宁</dc:creator><author>马宁</author><pubDate>Tue, 09 Dec 2008 07:04:00 GMT</pubDate><guid>http://www.cnblogs.com/aawolf/archive/2008/12/09/1351122.html</guid><wfw:comment>http://www.cnblogs.com/aawolf/comments/1351122.html</wfw:comment><comments>http://www.cnblogs.com/aawolf/archive/2008/12/09/1351122.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/aawolf/comments/commentRss/1351122.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/aawolf/services/trackbacks/1351122.html</trackback:ping><description><![CDATA[<p style="text-indent: 21pt"><span style="font-family: 宋体">因为奥运会的缘故，年底的技术大会扎堆，上周赶了两个技术会议的尾巴——</span>WinHEC<span style="font-family: 宋体">和</span>SD 2.0<span style="font-family: 宋体">都是最后一天才去。在金融危机的背景下，学习重要，但是客户似乎更重要&#8230;&#8230;</span>WinHEC<span style="font-family: 宋体">我会有另外的帖子来说，的确很精彩。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本来计划参加</span>SD 2.0<span style="font-family: 宋体">周五和周六的会议，周五想听的课都计划好了——</span>Google API<span style="font-family: 宋体">和</span>Map<span style="font-family: 宋体">，还有云风的内存、周伟明的多核。</span>Google<span style="font-family: 宋体">技术专场里的一个看点就是栾跃老大，想听听这个当年将微软开发流程如庖丁解牛般剖析过的牛人，是如何向大家忽悠</span>Google API<span style="font-family: 宋体">的。不过，临时要去客户那里拜访，一切泡汤。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">周六早晨早起，根据某不知名</span>GPS<span style="font-family: 宋体">指引的近路，从家里到九华，路上很顺利，不过还是跑到了十五区，注册完后，又想当然地去了二层（</span>TechEd<span style="font-family: 宋体">之前的会场在二层），耽误了二十分钟，到了会场去听</span>iPhone<span style="font-family: 宋体">的课程。平心而论，现场效果一般，不过我不认为是两位开发者技术的问题，可能是比较少讲现场，加上现场比较大，与听众互动比较困难，所以现场效果不好。我问了李亮一个很细节的问题，关于</span>Muti-Touch<span style="font-family: 宋体">，他回答的很好，所以我觉得两位以后多历练自己的现场讲演，以后会越来越好的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">下午实在无法忍受赞助商不着边际的忽悠，偶然跑到隔壁去听钱宏武的课。说实话，当时钱宏武在讲</span>Linux+MySQL<span style="font-family: 宋体">的</span>Web<span style="font-family: 宋体">性能优化，我这辈子估计也不会用着两种技术，吸引我的是那种气场。会场里每个人的头都是伸着的，眼睛都是瞪着的，不可否认，老钱的技术功底是原动力，而演讲的气势则是吸引一屋子人的原因。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">当老钱讲到第一次产品升级时汗透衬衣的经历，我恍然觉得自己所在不是</span>SD 2.0<span style="font-family: 宋体">的会场，而是水泊梁山的聚义厅。一帮在刀尖上摸爬滚打过来的好汉终于可以在这里松一口气，分享自己在江湖上&#8220;杀人越货&#8221;的经验了。老钱的确有那种天煞星的气势，而且将自己经验总结得丝丝入扣，可见是下了不少功夫。加上一口一个&#8220;哥们&#8221;，完全颠覆了程序员那种白面书生的传统形象。</span></p>
<p style="text-indent: 21pt">Google Android<span style="font-family: 宋体">的压轴戏为厂商方面扳回了不少比分，听完课程之后，第一个感觉</span>Google<span style="font-family: 宋体">太像微软了，从</span>Slides<span style="font-family: 宋体">到演讲风格，甚至延伸到技术领域，</span>Android<span style="font-family: 宋体">也是在</span>Linux<span style="font-family: 宋体">之上封装了一个</span>Framework<span style="font-family: 宋体">层。总之很成功的演讲，如果没有对</span>Windows<span style="font-family: 宋体">的嘲弄就更好了，毕竟很多</span>Windows<span style="font-family: 宋体">程序员对</span>Android<span style="font-family: 宋体">没有恶意，毕竟大家用了某种操作系统不是罪过，只是习惯。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">好了，总结一下，</span>SD 2.0<span style="font-family: 宋体">的最后一天，可以打</span>80<span style="font-family: 宋体">分。</span>CSDN<span style="font-family: 宋体">毕竟是一个本土的程序员社区，用现在通用的话来说&#8220;山寨&#8221;。比起厂商组织的技术会议，</span>SD 2.0<span style="font-family: 宋体">的最大好处是，可以在一个会场里听到不同技术的声音，这是非常好的一件事。</span>CSDN<span style="font-family: 宋体">应该更多突出山寨特色，多请一些钱宏武这样的好汉来讲讲他们的实际开发经验。比如</span>iPhone<span style="font-family: 宋体">的开发者，在厂商对中国开发者并不热心的背景下，&#8220;山寨&#8221;开发者们很好的弥补了厂商的技术盲点，这是</span>SD 2.0<span style="font-family: 宋体">的贡献，至于初次上台的经验不足，我觉得是瑕不掩瑜。在&#8220;山寨&#8221;这个部分，</span>SD 2.0<span style="font-family: 宋体">其实可以到</span>90<span style="font-family: 宋体">分的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">下边来说厂商，赞助商课程是我比较不满意的地方，我也知道如果没有赞助商，就不会有这样一次技术会议，但是组织者应该对赞助商课程进行必要的审核。某些赞助商的课程是由市场部门来讲，不但与开发者距离太远，而且讲师对</span>PPT<span style="font-family: 宋体">也不熟悉，经常要在台上想。</span>Google<span style="font-family: 宋体">同样是赞助商，但是讲课的都是一些技术人员，这样的话，不但可以让听众得到第一手的信息，而且还可以了解很多听众的反馈，一举多得。</span></p>
<img src ="http://www.cnblogs.com/aawolf/aggbug/1351122.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>