点睛工作室
刚买了夏新 N810,这是我使用的第一个智能手机,装了 WM6.5 折腾了一个多月,觉得挺好的,最后在装了 14M 雅黑字体后,频繁死机,又一次装了汉王马兰花后,直接不能启动了。后在模拟器上证实,汉王马兰花确实有这个问题。现在用三星手写和 10M 雅黑,目前没发现问题。
WM6.5 虽然不错,只是内存占用比 WM6.1 大 3M 左右,N810 又是内存不足的机型,于是又刷回 WM6.1,基本都不错,反映似乎还快一点儿,只是不能习惯 6.1 的开始菜单了。于是在网上找了不少程序,我的需求不多,只要点“开始”能直接出现“程序”界面,再有个方式进入设置,就行了,可惜,能找到的基本都是大型程序,很华丽,很强大,不过,占用系统资源太多。一番搜索测试之后,决定自己写一个插件。
基本的想法是,一个今日插件,4 个快捷栏位,其中两个是“短信”和“电话”,另外两个,一个是“程序”,一个是“设置”。
于是开始折腾,从 WM SDK 里找到今日插件 Memwatcher 的例子程序,程序是 C++ 的,不过也好,这样占用资源会少一点儿,从 ROM 里提取的信息中,找到未读短信数量读取注册表“System\\State\\Messages\\sms\\Unread”,而未接来电数量读取“System\\State\\Messages\\TotalEmail\\Unread”,只要在 WM_TODAYCUSTOM_QUERYREFRESHCACHE 消息中检测这两个值就可以了;在网上找到启动短信的命令行“\\Windows\\tmail.exe -service "SMS"”,不过,启动电话的程序,启动起来时,并不是呼叫记录界面,而是拨打界面,虽然不知道怎么直接进呼叫记录界面,整体进度还算满意。
然后遇到“程序”和“设置”,就是一头雾水了。这两个东西,不是独立程序,用 Remote Process Viewer 查看,发现都是属于 Shell32.exe 进程的,要由第三方启动它们,似乎有点儿难。上网查找,也没个结果。尝试在系统中查找“开始”菜单,然后查找“程序”和“设置”菜单,再用 SendMessage 的方式启动,不过,WM 上没有 GetTopWindow,也缺少很多其他的 Menu 相关函数,从例子程序 Dynamenu 中找到几个 SHxxxMenu 函数,复制到我的程序里,用 Remote Spy 发现开始菜单的窗口是“HHTask”,于是查找窗口 hwnd,查找 Menubar,再查找 Menu,遇到瓶颈,那几个 SHxxxMenu 函数,需要 Menu ID 作为参数,我就是要找 Menu ID,如果知道的话,何必再找?另外,用 Remote Spy 监视 HHTask 和 Desktop 的消息,在点击开始菜单项时,并没有出现 WM_COMMAND 消息,这可奇怪了,不用 WM_COMMAND 它是怎么处理菜单项点击的呢?或者说,它为什么要和普通程序不一样呢?不解。
反复碰墙后,决定放弃启动“程序”和“设置”,其实,“设置”本身并不常用,即使现在的开始菜单也行了,于是就有两个方案:一,4 个快捷栏位可设置,随便什么程序都可以;二,自己实现一个“程序”面板,还可以顺便实现按照使用次数排序,其他 3 个栏位给最常用的 3 个程序,最好再加入同步现有“程序”目录中的快捷方式。于是搜索了一下快捷方式的读取问题,再检查 WM 中的 快捷方式文件,发现和 Windows 的快捷方式格式不一样。最后决定,还是使用第一个方案,4 个快捷栏位可设置,另外再用 .Net CF 编写一个设置程序。
现在,需求有些变化,今日插件需要能读取 exe 文件的图标,网上查找之下,知道可以用 SHGetFileInfo 取得。
.Net CF 确实比使用 C++ 方便多了,不过,发现 WM 系统的 OpenFileDialog 对话框只能显示 My Documents 中的几个目录,对我的需求来说,一点儿意义都没有,而且没有设置,无法让它支持其他目录。网上搜索了一下,确实有不少抱怨,也找到了一个定制控件和它的增强版本,只是这个控件不算完善,比如最下边是输入框,但是整个窗体却不能在打开输入法的时候自动调整大小,控件也只能每次使用重新创建,否则会出现多个 Cancel 菜单以致出错,不支持单击选择等,不过,总体来说,够用了。在写设置程序的时候,终于解开了我的一个疑惑:为什么在 WM 上,点右上角的“X”,程序却并不关闭,原来,“X”在 WM 中是最小化的意思,“OK”才是关闭,多愚蠢的设计啊 —— 也造成网上流传“点X关程序的软件”……
最后一个问题是,通知今日插件配置已修改,重新读取,于是定制了窗口的 Class 和 Title,在设置程序里使用 FindWindow 查找,返回 0。查 MSDN,发现 FindWindow 函数只查找顶级窗口,而今日插件是 Desktop 的子窗口,所以找不到,只能先找 Desktop,再使用 FindWindow 查找子窗口,然后使用 SendMessage 发送 WM_APP 通知,在经历了几个低级错误的折磨之后,整个插件的制作总算完工。本来预计 1、2 天完成的,实际上还是扎实的用了 3、4 才做完。当然,需求的细节已经和最初不太一样了。
在 WM5 和 WM6.5 的模拟器上测试都成功,又安装到 N810 上,也运行良好,.Net 程序在模拟器上启动的时候,会先出个等待图标,但是,在手机上没感觉到,看来,现在的手机速度确实够快了。
虽然没有实际测量,不过估计单就今日插件来说,使用的内存大致在 30K 左右吧,而它很少需要重绘,所以对 CPU 的使用也可以忽略。
这个插件安装过后,并不会立即显示出来,必须先到今日设置里看一眼它,或者重新启动手机,才会显示出来,另外,目前只支持 QVGA 屏幕,这几个问题还没有解决,不过不算大问题,留待以后吧。
下面是插件我的手机上的运行截图和插件的下载:(顺便鄙视一下 JavaEye,移动开发那么多选项,竟然没有 Windows Mobile ?)
PS:一觉醒来,想到在重新读取设置的时候,忘了使用 DestoryIcon 释放以前的图标,虽然“重新读取设置”不是一个经常调用的功能,还是修正了,重新上传。
分享到:
相关推荐
NULL 博文链接:https://llf.iteye.com/blog/438220
本文主要介绍ChrisTec今日插件,该插件用C#语言实现。该插件特点是开发简单,仅仅开发出一个自定义用户控件就可实现。
根据SDK自带的memwatcher这个今日插件范例,制作自己的今日插件(可单击加载自己的定制的软件快捷方式)。注意:在MS的IDE里右键单击生产cab安装文件,直接安装,然后在wm的“今日”里的"Item"直接加载即可显示。
支持wm播放器的歌词插件让歌词显示在屏幕上方
CMTianQiUpdate.mscr中有两处问题: 1)谷歌天气地址连接不上。 ... 同时把CMTianQiConfig.mscr脚本修改了下,添加了联通uninet,uniwap,3gnet,3gwap接入点。 解压后把文件覆盖windows下同名文件重启即可。
今日插件开发指南,插件入门,PPT。 知道方法后就很简单了
用于WM6.5的电量显示 可同时显示时间和当前剩余电量百分比
WM6.5天气小桥+农历国内服务器版,作为今日插件显示在主屏上。
最近在找flv的wm播放器,那些TCPMP,COREPLAYER吹牛吹的乌丢乌丢的。 实际上即使装了TCPMP的FLV插件基本上等于还是不能放,因为效率太低了。 一个80M的FLV完全打不开,死机。 大家一定听说过 YOUTUBE,...
这是一个使表现得更像典型的的插件。 它在很大程度上受到了启发,并且大多数键绑定都是。 但是,我进行了一些调整,以使这些键绑定与vim更加一致:使用h j k l代替j k l ; 获取指导,并使用vim的“ split”和“ ...
可直接编译,有bug,in_wm.dll加载后有问题。适合初学者研究,高手就不要笑话了。
WM Zoom - 插件 jQuery paravisualização de imagens em alta definição 安装 <link rel="stylesheet" href="jquery.wm-zoom-1.0.min.css"> [removed][removed] [removed][removed] Chamando o 插件 ...
sql 3.5 wm6.5 系统必备插件。
PPC-WM6.0 智能手机模拟器/仿真器使用说明: 第一步:点击“加载.bat”加载插件(仅第一次使用时操作,第二次以后可以省略) 第二步:点击“启动.exe”启动模拟器 第三步:在模拟器界面“文件--还原映像”,指定到...
WM8978 MP3模块硬件资料+源代码+详细教程100%好用.zip
马尼拉今天插件的源码,c++与c#混合编程,可以做出很酷windows mobile首页插件,是学习today插件制作的好例子。
用于修复Ubuntu 22.04顶部状态栏图标的Gnome插件。
这是 Emacs 的扩展,它是一个插件 用于 Perl 的包浏览器。安装如果使用 package.el 2014/05/26 可以使用melpa。如果使用 el-get.el 2014/05/26 可用。 但是,只有主分支。如果使用 auto-install.el (auto-install-...
wm锁挂机键硬按键软件 可用为callerloc来电插件,很实用
9wm_1.4.1.orig.tar.gz 9wm_1.4.1-1_mips64el.deb 9wm_1.4.1-1_i386.deb 9wm_1.4.1-1_arm64.deb 9wm_1.4.1-1_amd64.deb 9wm_1.4.1-1.dsc 9wm_1.4.1-1.debian.tar.xz 需要国产服务器操作系统或者服务器操作系统的...