Windows CE/Mobile

Blogs for WINCE/Mobile Development

2012年5月6日 #

DOS命令活用

摘要: 以前一直认为Windows系统的命令行功能太弱,不大好用,但今年结识了一位在DOS命令方面功底颇深的兄弟,遂改变了对DOS命令的看法。其实Windows与Linux一样,也有着强大Shell命令集。以下篇幅记录一些不太常用但非常有用的用法。1,实现循环 DOS命令的循环用FOR命令来实现,网上有很多帖子,而且帮助中也有详细说明,在这里先不列举。2, findstr的注意事项Findstr 必须要带 > nul,即输出,否则 errorlevel不对。3,shiftShift 后%1就变成了%2, %3 set __TGTCPU=%1 shift set _TGTPROJ=%14,获取指定阅读全文

posted @ 2012-05-06 06:51 microsun 阅读(65) 评论(0) 编辑

在WINPE中添加驱动

摘要: 启动命令行,CD到boot.wim所在的目录,并创建一个名为wim-source的子目录。依次调用以下命令即可以将需要的驱动加入到WINPE:(其中boot.wim是WINPE package, wim-source可以为任意名称)Dism.exe /Mount-wim /WimFile:.\boot.wim /index:1 /MountDir:.\wim-sourceREM将boot.wim展开到wim-source目录中dism /image:.\wim-source /add-driver /driver:(写上驱动所在的目录,该目录中要含有INF文件)REM加入驱动。>dism阅读全文

posted @ 2012-05-06 06:36 microsun 阅读(25) 评论(0) 编辑

2012年4月3日 #

Metro中访问特定设备的方法

摘要: 访问某个特定的设备,例如我们自己开发的一个驱动,基本的方法如下:使用DeviceInformationCollection查询到该设备的ID,再使用CreateDeviceAccessInstance函数创建一个ICreateDeviceAccessAsync,再得到IDeviceIoControl接口,就可以调用其提供的DeviceIoControl方法再调用设备。 需要注意的是,DeviceInformation::FindAllAsync函数是异步的,需要创建一个task来调用。Metro中的方法实在让人觉得奇怪,尤其是让我这个习惯了C语言的老人,好在微软提供了例子代码。写这点文字的时.阅读全文

posted @ 2012-04-03 09:20 microsun 阅读(965) 评论(0) 编辑

2012年4月2日 #

METRO开发中的多语言处理

摘要: 多语言在METRO开发过程中比较简单,只是我急于求成,没有仔细查看文档,所以多花了一些时间。首先要建立资源文件,使用扩展名为resx,resw的都行。注意,文件名一定要为:resources.resw,文件名称如果不对,加载资源时就会有abort,当时我花了有一小时,后来终于想到可能是文件名称有严格要求。可能VS11还不太智能,所以文件名要求比较死。其次在工程文件中建立strings目录,其下根据根据语言建立子目录,并将文件放加入子目录,这样加载资源时才能自动识别出不同类别的语言,语言的简写也要写正确,否则也不能加载.如下图所示。最后代码中需要使用资源中的字符串时使用如下代码加载即可。reso阅读全文

posted @ 2012-04-02 17:49 microsun 阅读(824) 评论(0) 编辑

2012年3月25日 #

UMDF驱动程序快速上手

摘要: 最近的一个开发任务中,我的应用程序需要调用驱动程序去做一些事情,考虑到应用的情形,计划使用一个UMDF驱动程序来实现。虽然是一名老程序员了,但对于Windows桌面系统的开发还是头一次做,对于UMDF驱动更是连名字都没有听过。同时时间比较紧,也不可能从头去查帮助,读文档,只能以最快的方式来做。前后共计在这个驱动上花了不到两天的时间,才将UMDF驱动开发的大概流程弄懂,以下做以记录,但愿对于后来者有所帮助。基本过程既然为了赶时间,我这里自然不会去分析原理,只能涉及按照这种方法可以快速介入,在自己不熟悉的领域里快速开发。遇到难题还是得仔细阅读帮助文档,或者请教高手。1, 首先使用VS按照UMDF驱阅读全文

posted @ 2012-03-25 22:15 microsun 阅读(1056) 评论(2) 编辑

2012年3月16日 #

Metro开发小记

摘要: 隨着Windows Mobile的没落,WINCE市场也很快萎缩,使得我这样的老牌WINCE程序员也日暮西山,几近无处解决一日三餐。好在天无绝人之路,终于有机会做Win8 Metro界面的开发。现将开过过程中遇到的问题、体会心得一并记录,以便日后查询及供初学者参照。 Metro的一些基本概念在这就不再赘述,作为一名工程师我喜欢直接开始写代码而不是来一大堆无关的理论。MSDN中有这方面的入门帖,可以先他细读一下,并将其中的例子抄写并调试,以加强印象。例子可以参见如下网页及其相关的网页:http://msdn.microsoft.com/en-us/library/windows/apps/h..阅读全文

posted @ 2012-03-16 11:39 microsun 阅读(1948) 评论(0) 编辑

2011年12月19日 #

ClearType使用的问题

摘要: 前几天发现我的WINCE平台开机后文件浏览器上的字都看不清楚,使用 remote room in 程序查看发现写入framebuffer中的数据本身就有问题,今天终于有时间查,发现原来ClearType是enable的,将它关掉后一切正常。但奇怪的是在WM系统中打开或者关闭ClearType对显示效果没有影响。阅读全文

posted @ 2011-12-19 21:27 microsun 阅读(33) 评论(0) 编辑

2011年10月13日 #

一个不能创建WINCE6.0工程的问题

摘要: 近日需要使用WINCE的环境,电脑之前就已经安装了相关环境,但发现不能创建工程,开始怀疑是WINCE安装的有问题,后来发现每次新建工程时即打印出如下一句话:The Microsoft.PlatformBuilder.Vsip.PBSharedPackage, Microsoft.PlatformBuilder.Shared, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 ({0177F8A7-DBC0-46E8-AD60-7B79E1EF2B20}) did not load because of previ阅读全文

posted @ 2011-10-13 07:18 microsun 阅读(100) 评论(0) 编辑

2011年8月28日 #

关于GPS使用上的一个怪异问题

摘要: 我的系统GPS最低层提供的端口是COM5,GPS Provider提供的端口是COM6。这几天发一个问题:当开着某一个程序反复待机,就会出现死机。最后定位到是该程序启动了GPS引起的,它打开的COM5,如果使用COM6则没有问题。虽然死机问题已经解决,然不大清楚到底是什么原因引起的。不知其它人有没有遇到过类似的情况?阅读全文

posted @ 2011-08-28 20:58 microsun 阅读(134) 评论(1) 编辑

2011年8月10日 #

CE不能开机的可能情况

摘要: 一般来说CE的BOOT问题可以从如下方面入手:1,如果能调到调到调试串口的初始化函数,说明内存的配置是正确的(可以在该函数中写个死循环来验证),当然也能说明一个最基本的问题,kernel的入口 startup的实现是对的,nk.exe的加载地址也是对的。2,如果OEMInit函数能调到,基本的初始化也能调到,一般来说sp=fffffc(具体数记不到了)都能调到。3,初次做WINCE,ADS用的又比较熟的人需要注意一个问题:WINCE成功启动以后会不停的产生软中断,所以不时进入SWI是正确的,千万不要认为有问题。4,sp地址能正确打印但仍不能启动时,需要查一下RAM与NK是否有重合。5,gwes阅读全文

posted @ 2011-08-10 07:20 microsun 阅读(127) 评论(1) 编辑

直接编辑DLL文件,去掉某个链接函数

摘要: 近日,在做一款产品时,因为对开机速度的要求很高,我们将系统剪裁到最小,只剩下kernel,filesys,device和需要的驱动等。但我们使用的一个DLL链接了PostMessage,这个函数应该在GWES存在时才会有。所以该DLL不能被加载。因为该DLL是第三方提供的,没有源码,我们无法去掉对PostMessage的调用。厂家也不愿意修改。所以尝试直接编辑DLL。 首先,用IDA分析,找到使用PostMessage(编号865)的内存位置。但这段内存在IDA中不可读取,更别说编辑了。所以用uledit打开该DLL文件。找到对应的地址后,发现DLL用一段内存在存放import,整个impo.阅读全文

posted @ 2011-08-10 07:07 microsun 阅读(403) 评论(0) 编辑

2011年8月1日 #

CAB包的自动化编译及注意事项

摘要: 因之前的自动编译脚本不能实现CAB包的编译,所以系统中使用的CAB包都是工程师自己编译好再上传的。最终系统中使用不是自动编译过程生成的CAB包,CAB包的质量及正确性无法保证,主要是源代码,因CAB包不参加编译,发生过不至一次源代码与CAB包不一致,甚至源代码根本无法编译的情况。所以才痛下决心要将CAB包加入到自动代码编译过程中。以下是遇到的一些问题及注意事项。 1, 生成CAB包的工具以WINCE Cab manger最好用,但它不支持命令行模式。我这里采用WINCE自带的工具cabwizz。在public目录下搜索即可找到。它包含一个EXE和一个DDF文件。cabwizz的使用方法比较简.阅读全文

posted @ 2011-08-01 21:28 microsun 阅读(812) 评论(0) 编辑

2011年7月30日 #

蓝牙打印机的连接方法

摘要: 一般的手持蓝牙打印机都使用串口协议与主机通信,实现打印。WINCE提供了查找,配对及与蓝牙设备建立串口连接的界面。但那个界面不是很友好,优其对非专业人士来说太过复杂。下文讲述自行开发这样一个程序的方法。1,准备工作。蓝牙相关的功能需要使用到socket函数库,所以程序先要调用WSAStartup来初始化socket库。2,查找蓝牙设备。调用 WSALookupServiceBegin来启动一次搜索。然后反复调用WSALookupServiceNext,直到找到想要的设备,或者此函数失败。最后调用 WSALookupServiceEnd结束本次搜索过程。示意代码如下。WSADATA wsd;HA阅读全文

posted @ 2011-07-30 13:45 microsun 阅读(551) 评论(0) 编辑

2011年7月29日 #

WM系统有用的注册表(研发人员使用)

摘要: 1,修改默认区域:[HKEY_LOCAL_MACHINE\nls\overrides]"LCID"=dword:00000804 (设置为语言代码即可)2,控制面板中电源管理的设置:如果我们自己了控制面板中的电源设置功能,而去掉系统默认的功能,直接将[HKEY_LOCAL_MACHINE\ControlPanel\Power]下的Redirect设置成空就行,但如果将它设置成空,点击任务栏的电源设置按钮将无法调用到我们自己开发的电源设置程序。所以需要将Redirect设置成我们自己的程序。阅读全文

posted @ 2011-07-29 22:10 microsun 阅读(153) 评论(0) 编辑

2011年7月26日 #

SetCurrentIME的问题

摘要: 近日收到一个需求:需要在系统开机时自动将输入法切换成全屏手写输入。但如果直接修改注册表,将系统默认输入法设置成全屏手写后,就不能开机。所以写了一机自动加载的程序,在该程序中调用SetCurrentIME将输入法切换成全屏手写。但发现需要点击一下屏幕才能切换成功,而且使用软件模拟点击不是行的。不知道有没有人遇到过,如何解决的?代码如下:#include <windows.h>#include <sipapi.h>GUID csidInput={ 0x5AAFAF99, 0x8D99, 0x4466, 0xA6, 0x6D, 0x95, 0xC4, 0x4B, 0x60, 阅读全文

posted @ 2011-07-26 22:19 microsun 阅读(36) 评论(0) 编辑

2011年7月13日 #

活用SVN

摘要: 最近在改进daily build脚本时发现,老的脚本会先将代码checkout到一个空目录,再拷贝到需要使用的目录去,这样多一次拷贝过程,加长了编译的时间。所以想省掉这个拷贝过程,直接将代码checkout到目标目录。基本方法是:先将目标目录清空,但其中有一个目录是编译脚本,CHECKOUT代码的脚本就在其中,如果删除这个文件会引起编译过程中断,所以存放编译脚本的目录不能删除。作为自动编译的过程如果不清空之前的文件又不太稳妥善。经过试验发现一个办法: 将此不能删除的目录中的所有.svn文件夹删除。 checkout时使用--force选项,这样此目录在checkout时会被打上版本信息,整个.阅读全文

posted @ 2011-07-13 23:03 microsun 阅读(256) 评论(1) 编辑

2011年6月10日 #

使用DOS命令实现选择菜单

摘要: 为了方便大家使用一个脚本,决定将用户输入变成一个命令行式的菜单,这样用户直接选择即可。原理比较简单,将指定目录下的所有子目录都列举出来,并编号。指示用户输入,如果用户输入为N,就跳过前面N行,读取一行数据。就得到了我们想要的子目录名。代码摘录如下:PRODUCT_LIST为事先指定的需要列举的目录名。在for循环中不停变化的变量在FOR循环中输出时需要做特殊处理,此段代码中为:@ cmd /V:ON/C echo !COUNT!: %%x即cmd /V:ON /C,打开延缓环境变量扩展。同时取变量值时需要用!将变量括起来,而不是%dirlist.txt是存放子目录列表的文件,也可以用一条指令:阅读全文

posted @ 2011-06-10 07:13 microsun 阅读(284) 评论(0) 编辑

2011年6月7日 #

【实用技巧】Windows Mobile 手机连接电脑时,如何使用GPRS上网,同时跟电脑保持连接。(USB和GPRS共存问题)

摘要: 【实用技巧】Windows Mobile 手机连接电脑时,如何使用GPRS上网,同时跟电脑保持连接。(USB和GPRS共存问题) 最近移动项目接近尾声,以及很多相关的新项目又接踵而至,所以经常需要带着手机到处去演示。现在有个问题就是,我们连接的是移动专网,而且带了手机卡验证,没有办法通过互联网去连接,这就需要我们一边连着电脑一边去连接GPRS上网,之前公司的D600搭配ActiveSync 4.5是可以的,就是把高级网络功能关闭,这样既可以连接电脑,又可以上GPRS,后来不知怎么的,不能用了。只好另想他法,在国外论坛上面,我发现了一个方法就是使用Pocket Controller。步骤是:1、阅读全文

posted @ 2011-06-07 21:17 microsun 阅读(130) 评论(0) 编辑

2011年6月5日 #

重新加载驱动的方法

摘要: 因一产品的串口上同时接着IRDA和外接串口,默认功能为IRDA。启动之后如果测试外接串口,就不能打开设备端口,所以写了一段代码先Deinit此设备再加载,这样IRDA使用的设备句柄已经无效,IRDA功能不再有效。但外接串口可以使用阅读全文

posted @ 2011-06-05 20:55 microsun 阅读(152) 评论(0) 编辑

WINCE中使用键盘钩子的注意事项

摘要: 这几天因为一个项目需要处理多按键,驱动程序需要在多个产品上使用,所以觉得在驱动中修改不合理,遂使用一个键盘钩子程序来处理。网上关于键盘钩子的帖子还真不少,大家都提到了WINCE下的coredll没有export钩子相关的函数,但通过动态加载的方法可以使用,按这种方法还真可以注册成功,但试来试去就是不得不到按键消息。后来查询相关文档,与同事讨论发现,原因在于我是在一个没有窗口的程序中做的这些事情。而键盘钩子必须在一个有消息队列的程序中去做。至于有人说的回调函数必须在一个DLL中实现倒是不必要的。阅读全文

posted @ 2011-06-05 08:42 microsun 阅读(191) 评论(0) 编辑

仅列出标题  下一页

导航

统计信息

News