<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[keyssoft的乌托邦]]></title><description><![CDATA[孙渊磊]]></description><link>https://blog.youkuaiyun.com/keyssoft</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; keyssoft]]></copyright><item><title><![CDATA[奇葩的Twitter和更奇葩的Launcher3]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/44106529</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/44106529</guid><author>keyssoft</author><pubDate>Fri, 06 Mar 2015 23:26:42 +0800</pubDate><description><![CDATA[最近，有同事向我反馈把Twitter应用的Widget放到我们的Launcher应用上会失败，但是放到AOSP的Launcher3上却能成功。
我和他们一起看了下日志，看到将Twitter的Widget放到Launcher上时会启动Widget自己的配置Activity，然后这个WidgetSettingsActivity很奇葩——他配置了android:permission用了一个系统的Sig]]></description><category></category></item><item><title><![CDATA[[Droid]Android's Class Loaders]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/40456659</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/40456659</guid><author>keyssoft</author><pubDate>Sat, 25 Oct 2014 21:35:46 +0800</pubDate><description><![CDATA[There are kinds of class loader in Android]]></description><category></category></item><item><title><![CDATA[【WM】Phone Canvas提示信息对照表]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5634582</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5634582</guid><author>keyssoft</author><pubDate>Sun, 30 May 2010 14:53:00 +0800</pubDate><description><![CDATA[Phone Canvas函数PHShowPhoneMsg()可依据传入的phmsg显示恰当的提示信息：HRESULT PHShowPhoneMsg(  PH_MSG phmsg,  LPCWSTR pszText,  LPCWSTR pszTitle); 下表为常用提示信息对照表：phmsgpszTextPH_MSG_SU]]></description><category></category></item><item><title><![CDATA[【WM】Phone Canvas重复创建视图的原因]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5618111</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5618111</guid><author>keyssoft</author><pubDate>Sun, 23 May 2010 14:58:00 +0800</pubDate><description><![CDATA[记得08年刚做可视电话模块的时候，我们被Phone Canvas函数不返回RPC_E_WRONG_THREAD现象所迷惑，在H.324协议栈线程内调用了Phone Canvas函数导致cprog.exe创建了两个Progress View。结果两个Progress View交替显示，状态那叫一个混乱哟！解决这个问题的方法，笔者已在《【WM】谈Phone Canvas函数为何不会返回错误值RPC]]></description><category></category></item><item><title><![CDATA[【WM】如何获取Exe文件的进程ID]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5548648</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5548648</guid><author>keyssoft</author><pubDate>Sat, 01 May 2010 16:20:00 +0800</pubDate><description><![CDATA[我们在编程时，或许想知道给定Exe文件是否正在运行？如果正在运行，那么他的进程ID是多少？Win32 API函数GetExeProcessId()就能帮你实现这个目的。 该函数的原型声明位于miscsvsc.h内：HRESULT GetExeProcessId(LPTSTR pszExeFile, DWORD* pdwProcID); 要使用该函数需要链接ossvcs.lib。]]></description><category></category></item><item><title><![CDATA[【WM】如何递归创建目录]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5531218</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5531218</guid><author>keyssoft</author><pubDate>Mon, 26 Apr 2010 20:01:00 +0800</pubDate><description><![CDATA[在Windows Mobile上调用CreateDirectory()函数只能创建路径中的最后的目录，不能递规创建目录。如果任意父目录或中间目录不存在，CreateDirectory()函数会返回FALSE，调用GetLastError()函数返回错误号ERROR_PATH_NOT_FOUND。而我们在工作中经常需要递归创建目录，因此，笔者在这里介绍一个能够递归创建目录的Win32 API函数Cr]]></description><category></category></item><item><title><![CDATA[【WM】如何判断给定窗口是否是电话应用窗口]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5522421</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5522421</guid><author>keyssoft</author><pubDate>Fri, 23 Apr 2010 21:48:00 +0800</pubDate><description><![CDATA[这里所指的电话应用窗口是指由cprog.exe的UI线程创建的窗口，除了大家在平时能够看见的alert（来电）、progress（通话过程）、dialer（拨号盘）等对话框外，cprog.exe还注册三个不可见的窗口类：MSCprog、MSScut和MSClog。这3个窗口类很具有特征意义，通过类名可以很容易地区分出来。而alert（来电）、progress（通话过程）、dialer（拨号盘）等对]]></description><category></category></item><item><title><![CDATA[【WM】如何判断两个窗口是否由同一进程创建]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5517380</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5517380</guid><author>keyssoft</author><pubDate>Thu, 22 Apr 2010 20:21:00 +0800</pubDate><description><![CDATA[在我们的代码中，可能要判断某个窗口是否由shell32、cprog、tmail或connmgr进程创建的。由于这几个进程都会创建数个很具有特征意义的窗口，比如：shell32进程会创建DesktopExplorerWindow和HHTaskBar等窗口，故这个问题就可简化为判断两个窗口是否由同一进程创建。 在头文件wpcpriv.h中，存在未归档Win32 API函数SHSameWindowP]]></description><category></category></item><item><title><![CDATA[【WM】工作窗口类原理和实现]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5504279</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5504279</guid><author>keyssoft</author><pubDate>Mon, 19 Apr 2010 21:25:00 +0800</pubDate><description><![CDATA[通过Remote Spy我们常能见到类名为Worker的窗口（如下图所示），那么工作窗口类是什么呢？其实工作窗口与常规窗口十分相似，只不过我们无需调用RegisterClass()函数注册窗口类，并把我们传入的p参数作为窗口的额外数据保存了起来。想来微软青睐这类不可见的窗口也就是为了简化步骤，提高效率而已。 我们先来看看如何创建工作窗口的。在头文件miscsvcs.h内有CreateW]]></description><category></category></item><item><title><![CDATA[【WM】如何判断进程能否被终止(freeable)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5502022</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5502022</guid><author>keyssoft</author><pubDate>Mon, 19 Apr 2010 12:21:00 +0800</pubDate><description><![CDATA[我们在编写程序时，可能会碰到类似Task Killer方面的需求，要求我们在设备资源不足的情况下，终止部分不重要或资源占用较多的进程。但在Windows Mobile 6.1及后续版本上有数个进程是不允许被终止的，一旦某个进程被终止通常会导致OS不稳定或某些重要功能丧失。目前为止，共有7个进程，分别是：nk.exe、filesys.exe、device.exe、gwes.exe、services.]]></description><category></category></item><item><title><![CDATA[【WM】应用程序实现网络去附着(unregister)的简便方法]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/5330715</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/5330715</guid><author>keyssoft</author><pubDate>Fri, 26 Feb 2010 22:28:00 +0800</pubDate><description><![CDATA[在Windows Mobile下，应用程序如果需要网络去附着一般需要调用RIL函数RIL_UnregisterFromNetwork（调用扩展TAPI函数lineUnregister的很少见）。但是，由于该函数是异步的，如果想通过result callback获知网络去附着是否成功的话就比较麻烦了。 因此，笔者在此介绍一个未归档的函数UnregisterFromNetwork，该函数亦可实]]></description><category></category></item><item><title><![CDATA[【WM】谈注册表通告功能StatStore响应较慢的原因]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/4856218</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/4856218</guid><author>keyssoft</author><pubDate>Mon, 23 Nov 2009 14:16:00 +0800</pubDate><description><![CDATA[ StatStore被State and Notifications Broker替换也有些年头了，StatStore也和State and Notifications Broker一样提供了注册表访问、上报键值改动的能力，以前也没体会出替换的必要性。但最近在维护一个旧程序时，发现对同一键值的修改，通过IStatStore::RegisterForNotifications和RegistryNot]]></description><category></category></item><item><title><![CDATA[【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/4498983</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/4498983</guid><author>keyssoft</author><pubDate>Sun, 30 Aug 2009 11:31:00 +0800</pubDate><description><![CDATA[微软向OEM厂商提供Phone Canvas机制，让我们可以修改cprog.exe的数个界面布局和UI交互行为。我们发现多数Phone Canvas API函数的返回值列表中都存在错误值RPC_E_WRONG_THREAD，下表就是PHGetBlobPtr的返回值列表： S_OKIndicates success. E_INVALID]]></description><category></category></item><item><title><![CDATA[【WCE】使用事件日志服务(四)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1763017</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1763017</guid><author>keyssoft</author><pubDate>Wed, 29 Aug 2007 02:42:00 +0800</pubDate><description><![CDATA[*《【WCE】使用事件日志服务(三 / 四)》的内容已重新调整过。假设我们要记录一个事件源是 SQL Mobile 的事件到 Application 日志。需要如下步骤：1. 使用菜单 Platform->Settings，在“Platform Settings”对话框中选择“Environment”标签，设置环境变量 SET PRJ_ENABLE_EVENTLOG = 1。2. 在 ]]></description><category></category></item><item><title><![CDATA[【WCE】显示器电源管理 (Standard Shell)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1760055</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1760055</guid><author>keyssoft</author><pubDate>Mon, 27 Aug 2007 02:25:00 +0800</pubDate><description><![CDATA[在使用 Standard Shell 的情况下，出于节约用电和保护显示器的目的，我们需要在 User Idle 时进入显示器节电模式 (ScreenOff)，在 User Active 时退出显示器节电模式 (ScreenOn)。该项功能要依靠 Power Manager 和 GWES 来实现，具体为：Power Manager 维护显示器电源状态，通过设备驱动控制显示器进入/退出节电]]></description><category></category></item><item><title><![CDATA[【IDA】分析 Windows CE 事件日志服务(一)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1749259</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1749259</guid><author>keyssoft</author><pubDate>Sat, 18 Aug 2007 02:50:00 +0800</pubDate><description><![CDATA[笔者在开始使用 Windows CE 事件日志服务时，由于自身条件限制未能获得 Microsoft 的技术支持，故只能使用 IDA Pro 对 eventlog.dll 进行分析。笔者感觉事件日志服务相关的注册表设置可能对嵌入式系统软件工程师比较有用，所以注重分析 StartAllLoggers、InitFormattersAndOutputters、CLogEventLog::Initial]]></description><category></category></item><item><title><![CDATA[【SSCE】使用 sqlceer30CN.dll 的字符串表生成事件消息文件]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1743287</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1743287</guid><author>keyssoft</author><pubDate>Tue, 14 Aug 2007 21:50:00 +0800</pubDate><description><![CDATA[2007-10-18 为支持通过 IErrorRecords::GetErrorParameters 方法填充参数列表 "[,,,,,]"，而修改 EnumResNameProc 函数的实现。为使应用程序在使用 SQL Server 2005 Compact Edition (简称 SSCE) 时，能调用 ReportEvent 向 EventLog 服务报告 SSCE 相关的错误事件，我们需]]></description><category></category></item><item><title><![CDATA[【WCE】使用事件日志服务(三)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1723544</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1723544</guid><author>keyssoft</author><pubDate>Thu, 02 Aug 2007 21:47:00 +0800</pubDate><description><![CDATA[*《【WCE】使用事件日志服务(三 / 四)》的内容已重新调整过。Windows CE 的 Event Logging API 有如下 10 个函数：BOOL WINAPI ReportEventW(HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID, PSID lpUserSid, WORD wNumStrings,]]></description><category></category></item><item><title><![CDATA[【WCE】使用事件日志服务(二)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1696316</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1696316</guid><author>keyssoft</author><pubDate>Tue, 17 Jul 2007 23:34:00 +0800</pubDate><description><![CDATA[浏览 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]]></description><category></category></item><item><title><![CDATA[【WCE】使用事件日志服务(一)]]></title><link>https://blog.youkuaiyun.com/keyssoft/article/details/1682474</link><guid>https://blog.youkuaiyun.com/keyssoft/article/details/1682474</guid><author>keyssoft</author><pubDate>Sun, 08 Jul 2007 04:43:00 +0800</pubDate><description><![CDATA[默认情况下，只有将 Catalog/Core OS/Windows CE devices/Communication Services and Networking/Networking Features/Internet Connection Sharing (ICS)/Gateway Logging 加入 workspace 后，事件日志服务才会作为一个模块加入 CE_MODULES。我们可以]]></description><category></category></item></channel></rss>