aawolf = new Mobile.MVP

梦想一个移动的未来

马宁ID:aawolf
472045次访问,排名87好友20人,关注者92
aawolf的文章
原创 134 篇
翻译 8 篇
转载 1 篇
评论 544 篇
aawolf的公告

第十三届国际集成电路研讨会暨展览会




本BLOG所发表文章,作者保留一切权利。必须经过作者本人同意后方可转载,并注名作者和出处。

欢迎进入讨论区发表观点或提问
最近评论
abc8103:马老师好:
我在用ActiveSync 4.5同步Microsoft Windows Mobile 6.0的模拟器时老是出现错误提示框“关键性通信服务失败。请尝试重新移动设备,然后重新连接。”

但我用Microsoft Visual Studio 2008的Visual Studio Remote Tools中的Remote File Viewer却能查看除……
briangzhu:非常同意博主的观点,感谢博主将自己及周围朋友的观点分享出来,现在各大主流厂商(软件,硬件)都在火拼手机的操作系统,但是不管将来哪个操作系统所占有的市场份额有多少,手机应用的发展趋势肯定是一致的,一句话说来,用更易于携带的硬件设备,依托网络+服务,给我们提供最及时有效的信息,进而提高我们的工作效率及生活质量。

网络的发展相对比较容易预测:无非为终端提供更广,及更快的访问速……
czdvcc:wow power leveling
myshijieye:高压真空断路器
高低压成套开关柜
线切割加工<……
myshijieye:
注册香港公司
健康管理
pvc door
服装批发<……
文章分类
收藏
    相册
    MEDC 2005
    其他照片
    新加坡MVP峰会
    Blog
    ARM-WinCE
    Windows Embedded Blog from China(RSS)
    传说中的面霸
    张欣的blog
    老狗工作室
    自游中国
    金·评·没
    陈锐的博客
    Webcast
    .NET Compact Framework中的P/Invoke
    .NET Compact Framework自定义组件开发
    Direct 3D Mobile初体验
    SQL Mobile 2005的Replication和RDA开发入门
    SQL Mobile新特性介绍
    SQL Server 2005 SqlCeResultSet和高性能数据访问深度探索
    SQL Server 2005 SqlCeResultSet和高性能数据访问深度探索
    Using SQL MOBILE on.NET CF 2.0(Level 300)
    VS.NET 2005和.net compact framework 2.0新特性介绍
    Windows Mobile 2nd 开发黄金周(4):移动设备应用程序如何使用本地数据编程
    Windows Mobile 3rd 技术开发黄金周(6):使用SQL Server Everywhere开发Windows Mobile最佳移动数据应用
    Windows Mobile 5 新特性
    Windows Mobile 5:让你的企业动起来
    Windows Mobile应用访问远程服务
    使用.NET CF开发Smartphone应用程序
    使用MSMQ创建Windows Mobile远程通讯程序
    基于Windows Mobile的企业办公应用及架构
    基于Windows Mobile的企业应用开发
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 南行取经记(一)重启Windows Mobile设备收藏

    新一篇: Windows Embedded Webcast 2月预告

    临近春节去新加坡参加了Mobility Metro Training,很多来自亚洲各地的MVPMCT们也都参加了这次的培训。这次培训的目的就是将Windows Mobile 6.0Visual Studio 2008开发的最新技术,快速地推广到全世界。我们也将会在中国进行系列的Mobility Metro Training

    这次去新加坡培训的一共四人,临行时的一句玩笑:“二师兄,你的肉现在比师傅的肉还贵”,让这次培训有了个“取经”的别称。如果想了解Mobility Metro Training的全貌,还要等到培训计划公布。

    不过我也在这里可以先将一些有趣的知识点写成BLOG,权当年夜饭的下酒菜吧。

    重启Windows Mobile设备

    在论坛中,很多朋友都曾经问过如何在应用程序中重启Windows Mobile设备的问题。今天我们来看如何在Visual Studio 2008中来实现这个功能。

    打开Visual Studio 2008,选择“File”菜单,“New-Project”。我们会看到下面New Project对话框。

    Project types里,我们选择Visual Basic中的Smart Device项。哎,经常看我BLOG里的朋友也许会觉得奇怪,我什么时候也开始用Visual Basic来写程序了。稍后咱们再说。

    我们只能选择Smart Device Project,右上角的.NET Framework下拉菜单对Windows Mobile程序来说没什么用。将项目名称改为“Reset Pocket PC”,点OK

    Smart Device的对话框里,我们将Target platform选为“Windows Mobile 6 Professional SDK”,需要说明的是,Windows Mobile 6SDKVisual Studio 2008中并不是默认安装,所以需要您单独安装。

    然后选择.NET CF的版本,我们选择.NET CF 3.5。需要说明的是,.NET CF是没有3.0的。这是为了和.NET Framework保持一致,所以.NET CF 2.0之后就是.NET CF 3.5

    最后,我们选择创建Device Application

    在进入IDE编辑界面后,我们发现IDE环境并没有发生太大的变化。我们直接在下面的菜单中添加两个菜单项“Reset”和“Exit”。

    双击“Exit”菜单,进入代码编辑页面。我们在MenuItem1_Click函数之外,点击鼠标右键。在右键菜单中,我们选择“Insert Snippet”。Code SnippetVisual Studio中非常有用的一个功能,将一些有用的代码片段保存为Code Snippet,在需要使用的时候就不需要到处翻以前的代码了。

    而我们想使用的重启Windows Mobile设备的代码也是VB.NET中的代码片段,这也是我们为什么选择使用VB.NET的原因。

    选择Insert Snippet之后,会有一个列表,我们逐次选择“Smart Devices-Device Operating System- Reset the Device”。

    插入了Code Snippet之后,VB.NET代码如下。通过查看代码,我们可以看到,是调用KernelIoControl API函数来实现功能的。KernelIoControl函数是用来实现对通用IO的控制,我们可以通过该函数实现很多的功能,比如获取设备信息、文件系统和电源管理。

     

    VB.NET示例代码

        Private Declare Function KernelIoControl Lib "coredll.dll" (ByVal dwIoControlCode As Integer, ByVal lpInBuf As IntPtr, ByVal nInBufSize As Integer, ByVal lpOutBuf As IntPtr, ByVal nOutBufSize As Integer, ByRef lpBytesReturned As Integer) As Integer

     

        Private Function CTL_CODE(ByVal DeviceType As Integer, ByVal Func As Integer, ByVal Method As Integer, ByVal Access As Integer) As Integer

            Return (DeviceType << 16) Or (Access << 14) Or (Func << 2) Or Method

        End Function

     

        Private Function ResetPocketPC() As Integer

            Const FILE_DEVICE_HAL As Integer = &H101

            Const METHOD_BUFFERED As Integer = 0

            Const FILE_ANY_ACCESS As Integer = 0

     

            Dim bytesReturned As Integer = 0

            Dim IOCTL_HAL_REBOOT As Integer

     

            IOCTL_HAL_REBOOT = CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)

            Return KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero, 0, bytesReturned)

     

        End Function

     

    在函数创建完成后,我们在菜单的调用方法中调用ResetPocketPC方法。

        Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

            ResetPocketPC()

        End Sub

    编译运行之后,程序运行效果如上图。当我们点击Reset菜单,Windows Mobile设备将会重启。如果Visual Studio使用的是调试模式,此时调试将终止。

    稍后,我们可以看到Windows Mobile设备重启的界面。VB.NET的代码可以正常实现,接下来,C#程序员会问,C#Code Snippet是否也提供相同的功能。遗憾的是,C#中,并没有支持重启的代码片段。我们需要自己实现C#中的代码,好在将这段代码从VB.NET“翻译”成C#并不复杂。C#代码示例如下:

            [DllImport("coredll.dll")]

            public static extern int KernelIoControl(int dwIoControlCode, IntPtr lpInBuf, int nInBufSize, IntPtr lpOutBuf, int nOutBufSize,ref int lpBytesReturned);

     

            private int CTL_CODE(int DeviceType, int Func, int Method, int Access)

            {

               return (DeviceType << 16) | (Access << 14) | (Func << 2) | Method;

            }

     

            private int ResetPocketPC()

            {

                const int FILE_DEVICE_HAL = 0x101;

                const int METHOD_BUFFERED = 0;

                const int FILE_ANY_ACCESS = 0;

     

                int bytesReturned = 0;

                int IOCTL_HAL_REBOOT;

     

             &