<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>小便条</title><link>http://blog.vckbase.com/rovershen/category/203.html</link><description>想起啥就说啥</description><managingEditor>逍遥万里</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>逍遥万里</dc:creator><title>不带OS的嵌入式系统软件实现</title><link>http://blog.vckbase.com/rovershen/archive/2005/03/31/4263.html</link><pubDate>Thu, 31 Mar 2005 05:35:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2005/03/31/4263.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/4263.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2005/03/31/4263.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/4263.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/4263.html</trackback:ping><description>&lt;P&gt;很多时候，我们要在嵌入式系统上实现比较多的功能，但是并不需要用到OS的支持。但是为了开发方便最后还是选择使用OS，例如linux，这样比较占存储器空间。实际上，不带OS的系统也可以很简单，只要认真的规划。&lt;BR&gt;我的思想来自于PC，PC在引导OS之前，要执行BIOS程序，而且引导OS之后，很多对硬件的操作也是通过BIOS完成的。我将系统分成3个部分：Loader，Bios和App。&lt;BR&gt;1. Loader。在嵌入式系统中，程序一般存储在flash上。nor flash里面可以直接运行程序，但是速度很慢。因此需要一段代码将程序主体（其实是BIOS）装载到RAM，然后运行。这个工作便由Loader完成。Loader只完成最基本的初始化，然后加载BIOS到RAM里运行。&lt;BR&gt;2. Bios。类似PC，Bios进一部对系统进行初始化，然后装载App并运行。可以将常用外设支持过程放在Bios里，如串口，定时器等等。我的实现办法是将为每个设备定义一个结构，将常用的操作函数指针放在结构里，然后将所有的设备结构放在固定的地方，这样App就可以直接调用了。Bios的另外一大功能是实现程序的更新，即下载Loader，Bios和和App，并写入flash。Bios还有一个非常重要的功能就是管理中断，而且要留接口给App，以便App能处理对它特别的中断。Bios可以根据一定的条件，如某个端口的状态，从flash载入不同的App来运行，这样也节省了存储器空间。&lt;BR&gt;3. App。App比较简单，对Bios已经支持的设备，可以直接通过指针来调用。这样可以只处理需要自己处理的东西。不同的功能可以用不同的App来实现。&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/4263.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>嵌入式系统的键盘设计</title><link>http://blog.vckbase.com/rovershen/archive/2005/03/13/3523.html</link><pubDate>Sun, 13 Mar 2005 12:14:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2005/03/13/3523.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/3523.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2005/03/13/3523.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/3523.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/3523.html</trackback:ping><description>&lt;P&gt;在嵌入式系统中，经常需要接受用户输入或者选择。按键多的时候，一般采用现成的键盘扫描芯片来处理，如8279，而按键少的时候，则一般自己用I/O口做键盘扫描端口，这样便需要自己编写键盘扫描程序程序。&lt;BR&gt;键盘扫描方式有两种，即交叉扫描和直接扫描，它们各有优点。在同样多I/O口的情况下，交叉扫描可以接比较多的键盘，但处理相对复杂一些，直接扫描可以接的键盘较少，但处理简单。&lt;BR&gt;所谓交叉扫描，是将I/O口分成两组，分别做行和列，形成一个键盘矩阵。假设行为M个，列为N个，则可以提供MxN个按键，接法如下：&lt;BR&gt;&lt;IMG src="/images/vckbase_com/rovershen/281/r_cs.JPG"&gt;&lt;/IMG&gt;&lt;BR&gt;扫描每隔一段时间进行一次，例如50ms。扫描时，先将行作为输出，列作为输入。先在第一行输出L（低电平），其余行输出H（高电平），读取N个列的值，如果有L，则说明在则一列上有按键按下，那么将行变为输入，列变为输出，在该列输出L，其余列输出H，读出M行的值，哪一行为L则该行和该列交叉的按键被按下，这样便得到了按键的ID。按照这个方法，依次扫描到第M行，则所有按键都能被扫描到。在扫描过程中，如果有多行或者多列读出来的值为L，则说明有多个按键按下，因为每个按键都能被准确定位，因此每次只接受一个按键还是都接受可以按自己的需要处理。&lt;BR&gt;所谓直接扫描，是每个端口直接接按键，不与其它端口交叉，因此有多少端口就可以接多少按键。接法如下：&lt;/P&gt;&lt;IMG src="/images/vckbase_com/rovershen/281/r_ds.JPG"&gt;&lt;/IMG&gt; 
&lt;P&gt;跟交叉扫描一样，也是每隔一段时间扫描一次。扫描时，直接读取端口的值，如果某位为L，则表示对应的按键按下。&lt;BR&gt;当然，不管是交叉扫描还是直接扫描，都有去抖动的问题，可以用软件来解决，如多次判断，或者加大扫描间隔，也可以用硬件来解决，如加RC网络。则要看自己的喜好和需要了。&lt;BR&gt;还有一个问题就是重复按键的问题，即按住一个键一段时间后，可视为重复按键，这个也是根据需要通过软件的算法做到的。&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/3523.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>慎用GHOST！</title><link>http://blog.vckbase.com/rovershen/archive/2004/12/18/2148.html</link><pubDate>Fri, 17 Dec 2004 22:41:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/12/18/2148.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/2148.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/12/18/2148.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/2148.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/2148.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/2148.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>Windows 2003的IIS</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/16/1546.html</link><pubDate>Mon, 15 Nov 2004 21:10:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/16/1546.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1546.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/16/1546.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1546.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1546.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1546.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>定制窗口外观的若干技巧</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/13/1492.html</link><pubDate>Fri, 12 Nov 2004 18:05:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/13/1492.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1492.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/13/1492.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1492.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1492.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1492.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>Windows，让我欢喜让我忧</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/12/1462.html</link><pubDate>Thu, 11 Nov 2004 18:04:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/12/1462.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1462.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/12/1462.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1462.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1462.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1462.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>在资源管理器里自动注册组件</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/11/1444.html</link><pubDate>Wed, 10 Nov 2004 17:16:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/11/1444.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1444.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/11/1444.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1444.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1444.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1444.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>说说防火墙</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/11/1443.html</link><pubDate>Wed, 10 Nov 2004 16:42:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/11/1443.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1443.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/11/1443.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1443.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1443.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1443.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>枚举Windows系统中的外壳名字空间(shell namespace)</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/03/1227.html</link><pubDate>Tue, 02 Nov 2004 16:38:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/03/1227.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1227.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/03/1227.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1227.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1227.html</trackback:ping><description>&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;我们知道，Windows扩展了传统的文件目录特性，增加了虚拟目录的支持，将传统的目录结构演变成了外壳名字空间。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;打开资源管理器，我们可以看到，外壳的根目录是桌面，桌面下是各种虚拟目录和实际存储媒介上的目录结构。我们要枚举实际的目录时很容易，一般都使用FindFirstFile/FindNextFile来枚举，但是如果要枚举这种外壳虚拟目录则不行。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;在外壳空间中，每个目录是以叫ITEMIDLIST的结构组合存放的，它的定义如下：&lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=clsSyntax xml:space="preserve"&gt;&lt;FONT size=2&gt;typedef struct _ITEMIDLIST&amp;nbsp;{
    SHITEMID&amp;nbsp;mkid;
} ITEMIDLIST;&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;typedef struct _SHITEMID { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT cb; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE&amp;nbsp;&amp;nbsp; abID[1]; &lt;BR&gt;} SHITEMID, * LPSHITEMID; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;可见实际的结构是SHITEMID，每一级目录由一个SHITEMID表示，因此一个路径就由一组SHITEMID来表示，如&amp;#8220;C:\MyDocs\MyFile.htm&amp;#8221;表示为：&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;IMG alt="A schematic illustration of a PIDL" src="/images/vckbase_com/rovershen/281/r_test.jpg"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;组合的结尾是双字节0。由于路径分绝对路径和相对路径，所以ITEMIDLIST也有绝对和相对之分。也就是ITEMIDLIST包含的SHITEMID的组合的差别：全部或者后面的某一部分。实际上每个abID跟目录名称是一一对应的（但是我不知道是以何种算法算出来的）。桌面则比较特殊，它的ITEMIDLIST只有一项SHITEMID，只有一个为0的cb成员。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;了解了ITEMIDLIST，我们可以开始枚举所有目录了。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;整个外壳空间是以com的形式组织的，包含若干个接口，其中最主要的是IShellFolder接口和IEnumIdList接口。我们先得到桌面的IShellFolder接口，再利用IEnumIdList接口就可以枚举出所有的目录了。&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;PRE&gt;/*为简单起见，以下代码未考虑错误处理等*/&lt;/PRE&gt;&lt;PRE&gt;LPMALLOC lpMalloc&lt;B&gt;&lt;FONT color=#663300&gt;=&lt;/FONT&gt;&lt;/B&gt;NULL&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
SHGetMalloc&lt;B&gt;&lt;FONT color=#663300&gt;(&amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpMalloc&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
SHGetDesktopFolder&lt;B&gt;&lt;FONT color=#663300&gt;(&amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpDesktop&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
LPITEMIDLIST pidl&lt;B&gt;&lt;FONT color=#663300&gt;=(&lt;/FONT&gt;&lt;/B&gt;LPITEMIDLIST&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;lpMalloc&lt;B&gt;&lt;FONT color=#663300&gt;-&amp;gt;&lt;/FONT&gt;&lt;/B&gt;Alloc&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#990000&gt;sizeof&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;USHORT&lt;B&gt;&lt;FONT color=#663300&gt;));
*((&lt;/FONT&gt;&lt;/B&gt;USHORT&lt;B&gt;&lt;FONT color=#663300&gt;*)&lt;/FONT&gt;&lt;/B&gt;pidl&lt;B&gt;&lt;FONT color=#663300&gt;)=&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#999900&gt;0&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
LPSHELLFOLDER lpDesktop&lt;B&gt;&lt;FONT color=#663300&gt;=&lt;/FONT&gt;&lt;/B&gt;NULL&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
SHGetDesktopFolder&lt;B&gt;&lt;FONT color=#663300&gt;(&amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpDesktop&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
LPENUMIDLIST lpEnum&lt;B&gt;&lt;FONT color=#663300&gt;=&lt;/FONT&gt;&lt;/B&gt;NULL&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
lpDesktop&lt;B&gt;&lt;FONT color=#663300&gt;-&amp;gt;&lt;/FONT&gt;&lt;/B&gt;EnumObjects&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#999900&gt;0&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;SHCONTF_FOLDERS&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHCONTF_INCLUDEHIDDEN&lt;B&gt;&lt;FONT color=#663300&gt;,&amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpEnum&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;&lt;I&gt;&lt;FONT color=#999999&gt;//只枚举目录
&lt;/FONT&gt;&lt;/I&gt;
&lt;/PRE&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;然后用lpEnum的Next方法就可以得到所有的子目录的相对ITEMIDLIST（对于桌面的子目录，绝对ITEMIDLIST和相对ITEMIDLIST是一样的），然后利用IShellFolder的BindToObject的方法得到子目录的IShellFolder接口，依次往下类推即可。也可以先合成绝对ITEMIDLIST，直接用桌面接口来得到任意级子目录的IShellFolder接口。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;另外，可以用各个目录的绝对ITEMIDLIST来调用SHGetFileInfo以得到目录的显示名称和图标。&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;PRE&gt;LPITEMIDLIST Append&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;LPCITEMIDLIST pidlBase&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; LPCITEMIDLIST pidlAdd&lt;B&gt;&lt;FONT color=#663300&gt;)
{&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
    if&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlBase&lt;B&gt;&lt;FONT color=#663300&gt; ==&lt;/FONT&gt;&lt;/B&gt; NULL&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
        return&lt;/FONT&gt; NULL&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
    if&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlAdd&lt;B&gt;&lt;FONT color=#663300&gt; ==&lt;/FONT&gt;&lt;/B&gt; NULL&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
        return&lt;/FONT&gt; MakeCopy&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlBase&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
    
    LPITEMIDLIST pidlNew&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
 
    UINT cb1&lt;B&gt;&lt;FONT color=#663300&gt; =&lt;/FONT&gt;&lt;/B&gt; GetSize&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlBase&lt;B&gt;&lt;FONT color=#663300&gt;) -&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#990000&gt; sizeof&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlBase&lt;B&gt;&lt;FONT color=#663300&gt;-&amp;gt;&lt;/FONT&gt;&lt;/B&gt;mkid&lt;B&gt;&lt;FONT color=#663300&gt;.&lt;/FONT&gt;&lt;/B&gt;cb&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
    UINT cb2&lt;B&gt;&lt;FONT color=#663300&gt; =&lt;/FONT&gt;&lt;/B&gt; GetSize&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlAdd&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
 
    pidlNew&lt;B&gt;&lt;FONT color=#663300&gt; = (&lt;/FONT&gt;&lt;/B&gt;LPITEMIDLIST&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;lpMalloc&lt;B&gt;&lt;FONT color=#663300&gt;-&amp;gt;&lt;/FONT&gt;&lt;/B&gt;Alloc&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;cb1&lt;B&gt;&lt;FONT color=#663300&gt; +&lt;/FONT&gt;&lt;/B&gt; cb2&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
    if&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt; (&lt;/FONT&gt;&lt;/B&gt;pidlNew&lt;B&gt;&lt;FONT color=#663300&gt;)
    {&lt;/FONT&gt;&lt;/B&gt;
        CopyMemory&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidlNew&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; pidlBase&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; cb1&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
        CopyMemory&lt;B&gt;&lt;FONT color=#663300&gt;(((&lt;/FONT&gt;&lt;/B&gt;LPSTR&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;pidlNew&lt;B&gt;&lt;FONT color=#663300&gt;) +&lt;/FONT&gt;&lt;/B&gt; cb1&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; pidlAdd&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; cb2&lt;B&gt;&lt;FONT color=#663300&gt;);
    }&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
    return&lt;/FONT&gt; pidlNew&lt;B&gt;&lt;FONT color=#663300&gt;;
}&lt;/FONT&gt;&lt;/B&gt;

BOOL GetFolderName&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;LPSHELLFOLDER lpsf&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; LPITEMIDLIST pidl&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; CString&lt;B&gt;&lt;FONT color=#663300&gt; &amp;amp;&lt;/FONT&gt;&lt;/B&gt;name&lt;B&gt;&lt;FONT color=#663300&gt;)
{&lt;/FONT&gt;&lt;/B&gt;
 SHFILEINFO sfi&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
 SHGetFileInfo&lt;B&gt;&lt;FONT color=#663300&gt;((&lt;/FONT&gt;&lt;/B&gt;LPCTSTR&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;pidl&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#999900&gt;0&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;,&amp;amp;&lt;/FONT&gt;&lt;/B&gt;sfi&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#990000&gt;sizeof&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;SHFILEINFO&lt;B&gt;&lt;FONT color=#663300&gt;),&lt;/FONT&gt;&lt;/B&gt;SHGFI_DISPLAYNAME&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHGFI_PIDL&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
 name&lt;B&gt;&lt;FONT color=#663300&gt;=&lt;/FONT&gt;&lt;/B&gt;sfi&lt;B&gt;&lt;FONT color=#663300&gt;.&lt;/FONT&gt;&lt;/B&gt;szDisplayName&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;

 return&lt;/FONT&gt; TRUE&lt;B&gt;&lt;FONT color=#663300&gt;;
}&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff6633&gt;

int&lt;/FONT&gt; GetFolderIcon&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;LPITEMIDLIST pidl&lt;B&gt;&lt;FONT color=#663300&gt;)
{&lt;/FONT&gt;&lt;/B&gt;
 SHFILEINFO sfi&lt;B&gt;&lt;FONT color=#663300&gt;;&lt;/FONT&gt;&lt;/B&gt;
 flag&lt;B&gt;&lt;FONT color=#663300&gt;=(&lt;/FONT&gt;&lt;/B&gt;SHGFI_SYSICONINDEX&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHGFI_SMALLICON&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHGFI_PIDL&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;
 SHGetFileInfo&lt;B&gt;&lt;FONT color=#663300&gt;((&lt;/FONT&gt;&lt;/B&gt;LPCTSTR&lt;B&gt;&lt;FONT color=#663300&gt;)&lt;/FONT&gt;&lt;/B&gt;pidl&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#999900&gt;0&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;,&amp;amp;&lt;/FONT&gt;&lt;/B&gt;sfi&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#990000&gt;sizeof&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;SHFILEINFO&lt;B&gt;&lt;FONT color=#663300&gt;),&lt;/FONT&gt;&lt;/B&gt;SHGFI_SYSICONINDEX&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHGFI_SMALLICON&lt;B&gt;&lt;FONT color=#663300&gt;|&lt;/FONT&gt;&lt;/B&gt;SHGFI_PIDL&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
 return&lt;/FONT&gt; sfi&lt;B&gt;&lt;FONT color=#663300&gt;.&lt;/FONT&gt;&lt;/B&gt;iIcon&lt;B&gt;&lt;FONT color=#663300&gt;;
}&lt;/FONT&gt;&lt;/B&gt;
&lt;/PRE&gt;&lt;PRE&gt;&lt;PRE&gt;BOOL GetSubFolder&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;LPITEMIDLIST pidl&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt; LPSHELLFOLDER&lt;B&gt;&lt;FONT color=#663300&gt; &amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpFolder&lt;B&gt;&lt;FONT color=#663300&gt;)
{&lt;/FONT&gt;&lt;/B&gt;
 HRESULT hres&lt;B&gt;&lt;FONT color=#663300&gt;=&lt;/FONT&gt;&lt;/B&gt;lpDesktop&lt;B&gt;&lt;FONT color=#663300&gt;-&amp;gt;&lt;/FONT&gt;&lt;/B&gt;BindToObject&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;pidl&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#999900&gt;0&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;,&lt;/FONT&gt;&lt;/B&gt;IID_IShellFolder&lt;B&gt;&lt;FONT color=#663300&gt;,(&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff6633&gt;void&lt;/FONT&gt;&lt;B&gt;&lt;FONT color=#663300&gt;**)&amp;amp;&lt;/FONT&gt;&lt;/B&gt;lpFolder&lt;B&gt;&lt;FONT color=#663300&gt;);&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=#ff0000&gt;
 return&lt;/FONT&gt; SUCCEEDED&lt;B&gt;&lt;FONT color=#663300&gt;(&lt;/FONT&gt;&lt;/B&gt;hres&lt;B&gt;&lt;FONT color=#663300&gt;);
}&lt;/FONT&gt;&lt;/B&gt;
&lt;/PRE&gt;&lt;PRE&gt;具体实现，可以参看文章中的ExplorerTree类&lt;/PRE&gt;&lt;/PRE&gt;&lt;/FONT&gt;&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1227.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>逍遥万里</dc:creator><title>如何去掉快捷图标的箭头</title><link>http://blog.vckbase.com/rovershen/archive/2004/11/01/1211.html</link><pubDate>Mon, 01 Nov 2004 15:42:00 GMT</pubDate><guid>http://blog.vckbase.com/rovershen/archive/2004/11/01/1211.html</guid><wfw:comment>http://blog.vckbase.com/rovershen/comments/1211.html</wfw:comment><comments>http://blog.vckbase.com/rovershen/archive/2004/11/01/1211.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blog.vckbase.com/rovershen/comments/commentRss/1211.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/rovershen/services/trackbacks/1211.html</trackback:ping><description>&lt;P&gt;这个应该是个很简单的问题，很多工具软件都可以做到，那么如何手工做呢？当然是注册表了！&lt;/P&gt;
&lt;P&gt;打开注册表，搜索所有键名为IsShortcut的字符串，删除！&lt;/P&gt;
&lt;P&gt;重新登陆，是不是没有了？&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/rovershen/aggbug/1211.html" width = "1" height = "1" /&gt;</description></item></channel></rss>