- 博客(35)
- 资源 (1)
- 收藏
- 关注

原创 奇葩的Twitter和更奇葩的Launcher3
最近,有同事向我反馈把Twitter应用的Widget放到我们的Launcher应用上会失败,但是放到AOSP的Launcher3上却能成功。我和他们一起看了下日志,看到将Twitter的Widget放到Launcher上时会启动Widget自己的配置Activity,然后这个WidgetSettingsActivity很奇葩——他配置了android:permission用了一个系统的Sig
2015-03-06 23:26:42
780
原创 [Droid]Android's Class Loaders
There are kinds of class loader in Android
2014-10-25 21:35:46
600
原创 【WM】Phone Canvas提示信息对照表
Phone Canvas函数PHShowPhoneMsg()可依据传入的phmsg显示恰当的提示信息:HRESULT PHShowPhoneMsg( PH_MSG phmsg, LPCWSTR pszText, LPCWSTR pszTitle); 下表为常用提示信息对照表:phmsgpszTextPH_MSG_SU
2010-05-30 14:53:00
911
原创 【WM】Phone Canvas重复创建视图的原因
记得08年刚做可视电话模块的时候,我们被Phone Canvas函数不返回RPC_E_WRONG_THREAD现象所迷惑,在H.324协议栈线程内调用了Phone Canvas函数导致cprog.exe创建了两个Progress View。结果两个Progress View交替显示,状态那叫一个混乱哟!解决这个问题的方法,笔者已在《【WM】谈Phone Canvas函数为何不会返回错误值RPC
2010-05-23 14:58:00
649
原创 【WM】如何获取Exe文件的进程ID
我们在编程时,或许想知道给定Exe文件是否正在运行?如果正在运行,那么他的进程ID是多少?Win32 API函数GetExeProcessId()就能帮你实现这个目的。 该函数的原型声明位于miscsvsc.h内:HRESULT GetExeProcessId(LPTSTR pszExeFile, DWORD* pdwProcID); 要使用该函数需要链接ossvcs.lib。
2010-05-01 16:20:00
1672
原创 【WM】如何递归创建目录
在Windows Mobile上调用CreateDirectory()函数只能创建路径中的最后的目录,不能递规创建目录。如果任意父目录或中间目录不存在,CreateDirectory()函数会返回FALSE,调用GetLastError()函数返回错误号ERROR_PATH_NOT_FOUND。而我们在工作中经常需要递归创建目录,因此,笔者在这里介绍一个能够递归创建目录的Win32 API函数Cr
2010-04-26 20:01:00
1391
原创 【WM】如何判断给定窗口是否是电话应用窗口
这里所指的电话应用窗口是指由cprog.exe的UI线程创建的窗口,除了大家在平时能够看见的alert(来电)、progress(通话过程)、dialer(拨号盘)等对话框外,cprog.exe还注册三个不可见的窗口类:MSCprog、MSScut和MSClog。这3个窗口类很具有特征意义,通过类名可以很容易地区分出来。而alert(来电)、progress(通话过程)、dialer(拨号盘)等对
2010-04-23 21:48:00
771
原创 【WM】如何判断两个窗口是否由同一进程创建
在我们的代码中,可能要判断某个窗口是否由shell32、cprog、tmail或connmgr进程创建的。由于这几个进程都会创建数个很具有特征意义的窗口,比如:shell32进程会创建DesktopExplorerWindow和HHTaskBar等窗口,故这个问题就可简化为判断两个窗口是否由同一进程创建。 在头文件wpcpriv.h中,存在未归档Win32 API函数SHSameWindowP
2010-04-22 20:21:00
1605
原创 【WM】工作窗口类原理和实现
通过Remote Spy我们常能见到类名为Worker的窗口(如下图所示),那么工作窗口类是什么呢?其实工作窗口与常规窗口十分相似,只不过我们无需调用RegisterClass()函数注册窗口类,并把我们传入的p参数作为窗口的额外数据保存了起来。想来微软青睐这类不可见的窗口也就是为了简化步骤,提高效率而已。 我们先来看看如何创建工作窗口的。在头文件miscsvcs.h内有CreateW
2010-04-19 21:25:00
947
原创 【WM】如何判断进程能否被终止(freeable)
我们在编写程序时,可能会碰到类似Task Killer方面的需求,要求我们在设备资源不足的情况下,终止部分不重要或资源占用较多的进程。但在Windows Mobile 6.1及后续版本上有数个进程是不允许被终止的,一旦某个进程被终止通常会导致OS不稳定或某些重要功能丧失。目前为止,共有7个进程,分别是:nk.exe、filesys.exe、device.exe、gwes.exe、services.
2010-04-19 12:21:00
1064
原创 【WM】应用程序实现网络去附着(unregister)的简便方法
在Windows Mobile下,应用程序如果需要网络去附着一般需要调用RIL函数RIL_UnregisterFromNetwork(调用扩展TAPI函数lineUnregister的很少见)。但是,由于该函数是异步的,如果想通过result callback获知网络去附着是否成功的话就比较麻烦了。 因此,笔者在此介绍一个未归档的函数UnregisterFromNetwork,该函数亦可实
2010-02-26 22:28:00
699
原创 【WM】谈注册表通告功能StatStore响应较慢的原因
StatStore被State and Notifications Broker替换也有些年头了,StatStore也和State and Notifications Broker一样提供了注册表访问、上报键值改动的能力,以前也没体会出替换的必要性。但最近在维护一个旧程序时,发现对同一键值的修改,通过IStatStore::RegisterForNotifications和RegistryNot
2009-11-23 14:16:00
700
原创 【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD
微软向OEM厂商提供Phone Canvas机制,让我们可以修改cprog.exe的数个界面布局和UI交互行为。我们发现多数Phone Canvas API函数的返回值列表中都存在错误值RPC_E_WRONG_THREAD,下表就是PHGetBlobPtr的返回值列表: S_OKIndicates success. E_INVALID
2009-08-30 11:31:00
1698
1
原创 【WCE】使用事件日志服务(四)
*《【WCE】使用事件日志服务(三 / 四)》的内容已重新调整过。假设我们要记录一个事件源是 SQL Mobile 的事件到 Application 日志。需要如下步骤:1. 使用菜单 Platform->Settings,在“Platform Settings”对话框中选择“Environment”标签,设置环境变量 SET PRJ_ENABLE_EVENTLOG = 1。2. 在
2007-08-29 02:42:00
1402
原创 【WCE】显示器电源管理 (Standard Shell)
在使用 Standard Shell 的情况下,出于节约用电和保护显示器的目的,我们需要在 User Idle 时进入显示器节电模式 (ScreenOff),在 User Active 时退出显示器节电模式 (ScreenOn)。该项功能要依靠 Power Manager 和 GWES 来实现,具体为:Power Manager 维护显示器电源状态,通过设备驱动控制显示器进入/退出节电
2007-08-27 02:25:00
2790
2
原创 【IDA】分析 Windows CE 事件日志服务(一)
笔者在开始使用 Windows CE 事件日志服务时,由于自身条件限制未能获得 Microsoft 的技术支持,故只能使用 IDA Pro 对 eventlog.dll 进行分析。笔者感觉事件日志服务相关的注册表设置可能对嵌入式系统软件工程师比较有用,所以注重分析 StartAllLoggers、InitFormattersAndOutputters、CLogEventLog::Initial
2007-08-18 02:50:00
1685
原创 【SSCE】使用 sqlceer30CN.dll 的字符串表生成事件消息文件
2007-10-18 为支持通过 IErrorRecords::GetErrorParameters 方法填充参数列表 "[,,,,,]",而修改 EnumResNameProc 函数的实现。为使应用程序在使用 SQL Server 2005 Compact Edition (简称 SSCE) 时,能调用 ReportEvent 向 EventLog 服务报告 SSCE 相关的错误事件,我们需
2007-08-14 21:50:00
974
原创 【WCE】使用事件日志服务(三)
*《【WCE】使用事件日志服务(三 / 四)》的内容已重新调整过。Windows CE 的 Event Logging API 有如下 10 个函数:BOOL WINAPI ReportEventW(HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID, PSID lpUserSid, WORD wNumStrings,
2007-08-02 21:47:00
1307
原创 【WCE】使用事件日志服务(二)
浏览 common.reg 我们可以看到:; @CESYSGEN IF CE_MODULES_EVENTLOG[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/EventLog/System]"Output"="File""File"="SystemLog.xml""Format"="XML"[HKEY_LOCAL_MACHINE/SYSTEM/Cu
2007-07-17 23:34:00
1134
原创 【WCE】使用事件日志服务(一)
默认情况下,只有将 Catalog/Core OS/Windows CE devices/Communication Services and Networking/Networking Features/Internet Connection Sharing (ICS)/Gateway Logging 加入 workspace 后,事件日志服务才会作为一个模块加入 CE_MODULES。我们可以
2007-07-08 04:43:00
1389
1
原创 【IDA】为何 pdg2 v3.8 控件的 CopyToClipBoard 方法存在限制
网上流传着使用 pdg2 控件 IT_Pdg01 接口 CopyToClipBoard 方法将 .pdg 文件转换为图片的方法,不少读者在根据该方法进行实践的时候发现调用 v3.8 及以后版本控件的 CopyToClipBoard 方法是无效的。笔者通过使用 IDA Pro 对 v3.8 控件反向工程,发现只有调用了 LocateRect 方法后,才能使 CopyToClipBoard 方法有
2007-07-02 22:10:00
1774
1
原创 【WCE】使用 8253 定时器蜂鸣 (CEPC BSP)
通过测试,我们发现 Windows CE 没有实现 Beep 函数,亦注意到 x86 嵌入式系统在运行 Windows XPe 时能通过调用 Beep 函数来驱动蜂鸣器蜂鸣。经过对 Beep 函数反向工程以及 8253 定时器蜂鸣原理的研究,我们相信在 Windows CE 下同样能够蜂鸣。首先,讲解一下早期 PC 上的 8253 定时器蜂鸣原理:图中 CLOCK 是时钟(fc=1,1
2007-06-28 23:38:00
2741
原创 【WCE】如何在 boot registry 下调整显示分辨率 (.Net 4.2)
对于在公共场所使用的 Internet Applicance 而言,RAM-based 或 Hive-based 注册表都是不安全、不可靠的,主要原因有:一旦用户通过 Win32 API 篡改注册表数据,可能会影响系统的正常运行。如果要恢复注册表数据,往往需要生产商派出技术人员去现场指导。 由于需要安装 FAT 卷,存在用户通过 Explorer 篡改 DOM 上文件,导致系统不能启动
2007-06-25 12:55:00
1865
原创 【WCE】实现永久性注册表数据保存 (VIACEPC BSP)
目标系统的硬件环境:VIA CLE266 NorthBridge + VT8235 SouthBridge,Transcend TS32MDOM40V DOM目标系统的软件环境:Windows CE 5.0,VIA CLE266/CN400/CN700 CEPC BSPHive-based: 将 Catalog/Device Drivers/Storage Devices/Storag
2007-06-07 11:06:00
2275
2
原创 【WCE】Windows Shell 路径处理函数
MSDN Library 上从未公布过 Windows Shell 路径处理函数的 Windows CE 实现信息。不过 $(_WINCEROOT)/PUBLIC/SHELL/OAK/LIB/$(_TGTCPU)/$(WINCEDEBUG) 目录下的 shcore_path.lib (静态链接库) 导出了不少 Windows Shell 路径处理函数。其中,WinCE 和 WinNT 公
2007-05-30 00:44:00
2076
原创 【PB】使用 Win32 API 扩展下拉列表框
获取/设置当前选项 要获取/设置下拉列表框的当前选项,通常是通过如下代码实现的:ddlb_example.FindItem(ddlb_example.Text, 0)ddlb_example.SelectItem("First Item", 0)当存在选项文本重复时,根本无法判断选择/设置了哪项。故需一个函数直接获取/设置当前选项,ComboBox 控件消息 CB_GETCURSE
2007-01-17 02:15:00
3572
原创 【PB】使 PB 支持单选菜单项
到目前的 Version 11 Beta 2 为止,PB 仍不支持如图1 所示的单选菜单项。但实际应用中,我们需要用类似的菜单来选择字体大小、缩放比例等等。如果用复选菜单项代替的话,也不尽如人意。本文将介绍使用 Win32 API 函数来实现单选菜单项。图1这里笔者先创建菜单对象 m_base,并声明 Local External Function 的 Powersoft 原型:fun
2007-01-15 00:10:00
2183
2
原创 【PB】谈 Create 和 OpenUserObject 创建 GraphicObject 对象的区别
用 Create 创建的 GraphicObject 对象,可以实例化但不会在窗口上显示。用 Create 创建控件后生成的实例,用 IsValid() 验证是有效的;对于由封装公共控件的消息和风格而得来的属性和方法皆不可用;对于 Sybase 加入控件类中的额外的属性和方法皆可用;故而,可以肯定是未调用 CreateWindowEx(), 只为控件类分配了
2007-01-14 00:58:00
7277
原创 【PB】控件的 MS 类名和风格
PB 类名MS 类名风格备注CommandButtonButton0x54000000 PictureButtonButton0x5400000B CheckBoxButton0x54000003 RadioButtonButton0x54000009 Stati
2007-01-13 23:52:00
2336
原创 【PB】也谈数据窗口自动换行
在 Datawindow 中,若只选中列的 Auto Horz Scroll,键入的字符可以加到文本串中并始终维持一行,直到达到上限; 若只选中列的 Auto Vert Scroll,键入的字符可以加到文本串中并会换行,直到达到上限; 若都不选中,且高度不足以让文本多行显示的话,键入的字符只可达到控件的显示范围内的长度。 所以为实现多行显示要求:必须不选中 Auto H
2007-01-13 23:14:00
11385
2
原创 【PB】Windows 状态条控件在 PB 中的运用
Powerbuilder 所提供的 MDIHelp! 窗口类型带有一个 Sybase 自制的类似状态条的控件(严格说它并非是控件),用户可以通过调用 SetMicroHelp( ) 函数修改该控件的显示文本,即该窗口的标题。但与 Windows 的状态条控件相比,它还是缺少了些重要的功能,因此本文将就如何在 Powerbuilder 中使用 Windows 状态条控件展开讨论。在讨论前笔者假设读者
2007-01-13 00:33:00
4606
原创 【PB】调用 Win32 公共控件的改进方案
笔者在《用 Windows 公共控件增强 PB 应用的界面》一文中,曾经讨论过使得 PB 能支持较新的 Win32 公共控件的方法。当时提出了在应用对象的 Open 事件中用 InitCommonControlsEx 函数来代替 PB 自动调用的 InitCommonControls 函数,这种方法的缺点很明显:用户程序员必须关注 Win32 公共控件的初始化。用户程序员必须在应用对象
2007-01-12 00:34:00
2739
原创 【PB】带位图的菜单项实现
当读者在使用 Microsoft Word 97 时,是否曾注意到 Word 的部分菜单项旁有一个小巧的图标 (如图1所示),初次见到时,是否有耳目一新的感觉,是否想过让 PowerBuilder 创建的菜单项和他一样漂亮。只可惜 Sybase 至今仍未实现该功能,令得广大的 PowerBuilder 用户只能去羡慕别人。不过文本将探讨如何用 PowerBuilder 和 Win32 API 来实
2007-01-11 23:55:00
2075
原创 【PB】利用 IE5 增强编辑控件的功能
熟悉 Windows 的读者都知道,“运行”对话框的“打开”编辑控件,提供了两个比较特别的功能:一个是自动完成功能,即键入字符后编辑控件提供建议选项供选用 (AutoSuggest),如图1;另一个是拖放功能,即将文件拖放到“运行”对话框后编辑控件会显示文件列表,如图2。通过在 PowerBuilder 中调用 Win32 API 函数可以使单行编辑控件 (Single-line Edit Con
2007-01-10 22:20:00
2290
3
原创 【PB】使用任务栏通知区域
“为应用程序在任务栏通知区域加个图标,按最小化控制菜单后隐藏窗口,单击通知区域内的图标恢复并显示窗口,右击通知区域内的图标弹出快捷方式菜单”,已成为时下程序设计上的一个时髦主题,有不少文章介绍了如何实现,但在 PowerBuilder 下由于调用 Win32 API 函数和消息处理不很方便,因而很少有人去涉及。本文将讨论如何在 PowerBuilder 下使用任务栏通知区域。1.相关的 Win
2007-01-10 21:29:00
3885
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人