﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>IT博客-孤独的夜-随笔分类-VC Skill</title><link>http://www.cnitblog.com/wangk/category/1507.html</link><description>&lt;table align=center&gt;
&lt;span id="dict_daily"&gt;
&lt;a href="http://dict.cn/" target="_blank"&gt;英语学习&lt;/a&gt;
&lt;/span&gt; 
&lt;script language="JavaScript" src="http://dict.cn/daily.php" defer="defer"&gt;
&lt;/script&gt;
&lt;/table&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 16:50:21 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 16:50:21 GMT</pubDate><ttl>60</ttl><item><title>从打开的文件句柄获得文件的路径</title><link>http://www.cnitblog.com/wangk/archive/2006/11/17/19251.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Fri, 17 Nov 2006 02:28:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2006/11/17/19251.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/19251.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2006/11/17/19251.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/19251.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/19251.html</trackback:ping><description><![CDATA[
		<p>今天从CSDN看见有人问如何从 <a href="http://community.csdn.net/Expert/TopicView1.asp?id=5164878">http://community.csdn.net/Expert/TopicView1.asp?id=5164878</a>  提问从打开的文件句柄获得文件的路径，下面是解决的办法：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">Psapi.h</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<br />#define        BUFSIZE                        </span>
				<span style="COLOR: #000000">512</span>
				<span style="COLOR: #000000">
						<br />#pragma comment(lib,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">Psapi.lib</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)<br />BOOL __stdcall GetFileNameFromHandle(HANDLE hFile, LPWSTR lpFileName, DWORD dwSize)<br />{<br />  BOOL bSuccess </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> FALSE;<br />  WCHAR pszFilename[MAX_PATH</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">];<br />  HANDLE hFileMap;<br /><br />  DWORD dwFileSizeHi </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br />  DWORD dwFileSizeLo </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ::GetFileSize(hFile, </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">dwFileSizeHi); <br /><br />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">( dwFileSizeLo </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">&amp;&amp;</span>
				<span style="COLOR: #000000"> dwFileSizeHi </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000"> )<br />  {<br />     </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> bSuccess;<br />  }<br /><br />  hFileMap </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ::CreateFileMappingW(hFile, <br />                    NULL, <br />                    PAGE_READONLY,<br />                    </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">, <br />                    </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">,<br />                    NULL);<br /><br />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (hFileMap) <br />  {<br />      </span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000"> pMem </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ::MapViewOfFile(hFileMap, FILE_MAP_READ, </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">);<br /><br />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (pMem) <br />    {<br />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (::GetMappedFileNameW(GetCurrentProcess(), <br />                             pMem, <br />                             pszFilename,<br />                             MAX_PATH)) <br />      {<br />        WCHAR szTemp[BUFSIZE];<br />        szTemp[</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">] </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> L'\</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">';<br /><br />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (::GetLogicalDriveStringsW(BUFSIZE</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">, szTemp)) <br />        {<br />          WCHAR szName[MAX_PATH];<br />          WCHAR szDrive[</span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">] </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> L</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> :</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br />          BOOL bFound </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> FALSE;<br />          WCHAR</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000"> p </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> szTemp;<br /><br />          </span>
				<span style="COLOR: #0000ff">do</span>
				<span style="COLOR: #000000"> <br />          {<br />            </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">szDrive </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p;<br /><br />            </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (::QueryDosDeviceW(szDrive, szName, BUFSIZE))<br />            {<br />              UINT uNameLen </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> lstrlenW(szName);<br /><br />              </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (uNameLen </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000"> MAX_PATH) <br />              {<br />                  bFound </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ::_wcsnicmp(pszFilename, szName, <br />                    uNameLen) </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br /><br />                </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (bFound) <br />                {<br />                  WCHAR szTempFile[MAX_PATH];<br />                  ::wsprintfW(szTempFile,<br />                            L</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">%s%s</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,<br />                            szDrive,<br />                            pszFilename</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">uNameLen);<br />                  ::lstrcpynW(pszFilename, szTempFile, MAX_PATH);<br />                }<br />              }<br />            }<br /><br />            </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000"> (</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">);<br />          } </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000"> (</span>
				<span style="COLOR: #000000">!</span>
				<span style="COLOR: #000000">bFound </span>
				<span style="COLOR: #000000">&amp;&amp;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p); <br />        }<br />      }<br />        ::UnmapViewOfFile(pMem);<br />    } <br /><br />    ::CloseHandle(hFileMap);<br />  }<br /><br />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(lpFileName)<br />  {<br />      ::lstrcpynW(lpFileName,pszFilename,dwSize);<br />      bSuccess </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> TRUE;<br />  }<br />  <br />  </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000">(bSuccess);<br />}</span>
		</div>
<img src ="http://www.cnitblog.com/wangk/aggbug/19251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2006-11-17 10:28 <a href="http://www.cnitblog.com/wangk/archive/2006/11/17/19251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rebase Position</title><link>http://www.cnitblog.com/wangk/archive/2006/03/29/8260.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Wed, 29 Mar 2006 09:18:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2006/03/29/8260.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/8260.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2006/03/29/8260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/8260.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/8260.html</trackback:ping><description><![CDATA[
		<p>Rebase is a command-line tool that you can use to specify the base addresses for the DLLs that your application uses.<br />&gt;&gt;A - C	0x60000000	<br />&gt;&gt;D - F	0x61000000	<br />&gt;&gt;G - I	0x62000000	<br />&gt;&gt;J - L	0x63000000	<br />&gt;&gt;M - O	0x64000000	<br />&gt;&gt;P - R	0x65000000	<br />&gt;&gt;S - U	0x66000000	<br />&gt;&gt;V - X	0x67000000	<br />&gt;&gt;Y - Z	0x68000000</p>
<img src ="http://www.cnitblog.com/wangk/aggbug/8260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2006-03-29 17:18 <a href="http://www.cnitblog.com/wangk/archive/2006/03/29/8260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Linker Tools Error LNK1103</title><link>http://www.cnitblog.com/wangk/archive/2006/01/09/6091.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Mon, 09 Jan 2006 03:11:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2006/01/09/6091.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/6091.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2006/01/09/6091.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/6091.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/6091.html</trackback:ping><description><![CDATA[使用IID_IShellFolder之类的接口的ID时候，有时后会出现Linker Tools Error LNK1103。<BR>此时可以在某个.cpp文件中使用：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">initguid.h</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>#undef&nbsp;_SHLGUID_H_<BR>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">ShlGuid.h</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN></DIV>
<P>这样就有了IID_IShellFolder的实现。接着就能正确在工程里使用IID_IShellFolder了。<BR><BR>有时候在Realse编译的时候也会出现，此时尝试以下的解决方法：<BR><BR>1.关闭优化，即 <A href="ms-help://MS.MSDNQTR.2004OCT.1033/vccore/html/_core_.2f.od.htm">/Od</A>&nbsp;选项<BR>2.关闭最小编译，即<A href="ms-help://MS.MSDNQTR.2004OCT.1033/vccore/html/_core_.2f.gm_minimal.htm">/Gm</A>选项<BR>3.打开函数级别链接<A href="ms-help://MS.MSDNQTR.2004OCT.1033/vccore/html/_core_.2f.gy.htm">/Gy</A> 选项<BR>4.尝试使用其他级别的编译<A href="ms-help://MS.MSDNQTR.2004OCT.1033/vccore/html/_core_.2f.g.htm">/G</A>选项<BR>5.改变函数或者全局变量的顺序。<BR><BR>原文：<BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
<P><FONT color=#808080><SPAN style="COLOR: #000000"><FONT color=#808080>Turn&nbsp;off&nbsp;optimization</FONT>&nbsp;</SPAN><SPAN style="COLOR: #0000ff"><FONT color=#808080>with</FONT></SPAN><SPAN style="COLOR: #000000">&nbsp;<FONT color=#808080>the&nbsp;</FONT></SPAN></FONT><SPAN style="COLOR: #000000"><FONT color=#808080>/</FONT></SPAN><SPAN style="COLOR: #000000"><FONT color=#808080>Od&nbsp;(Disable)&nbsp;option.</FONT><FONT color=#808080>&nbsp;<BR><FONT color=#808080>Disable&nbsp;minimal&nbsp;rebuild</FONT>&nbsp;</SPAN><SPAN style="COLOR: #0000ff"><FONT color=#808080>with</FONT></SPAN><SPAN style="COLOR: #000000">&nbsp;<FONT color=#808080>the&nbsp;</FONT></SPAN></FONT><SPAN style="COLOR: #000000"><FONT color=#808080>/</FONT></SPAN><SPAN style="COLOR: #000000"><FONT color=#808080>Gm–&nbsp;(Enable&nbsp;Minimal&nbsp;Rebuild)&nbsp;option.&nbsp;<BR></FONT><FONT color=#808080><FONT color=#808080>Compile</FONT><FONT color=#808080>&nbsp;</FONT></SPAN><SPAN style="COLOR: #0000ff"><FONT color=#808080>with</FONT></SPAN><SPAN style="COLOR: #000000"><FONT color=#808080>&nbsp;</FONT><FONT color=#808080>the&nbsp;</FONT></SPAN></FONT><FONT color=#808080><FONT color=#808080><SPAN style="COLOR: #000000"><FONT color=#808080>/</FONT></SPAN><SPAN style="COLOR: #000000"><FONT color=#808080>Gy</FONT><FONT color=#808080>&nbsp;(</FONT><FONT color=#808080>Enable&nbsp;</FONT><FONT color=#808080>Function</FONT></SPAN></FONT><SPAN style="COLOR: #000000">-</SPAN></FONT><SPAN style="COLOR: #000000"><FONT color=#808080>Level&nbsp;Linking)&nbsp;option&nbsp;to&nbsp;package&nbsp;functions</FONT><FONT color=#808080>.&nbsp;<BR><FONT color=#808080>Use&nbsp;a&nbsp;different&nbsp;code&nbsp;generation&nbsp;option.&nbsp;See&nbsp;the&nbsp;</FONT></SPAN></FONT><FONT color=#808080><SPAN style="COLOR: #000000"><FONT color=#808080>/</FONT></SPAN><SPAN style="COLOR: #000000"><FONT color=#808080>G&nbsp;(Optimize</FONT><FONT color=#808080>&nbsp; for</FONT> </SPAN></FONT><SPAN style="COLOR: #000000"><FONT color=#808080>Processor)&nbsp;options.&nbsp;<BR>Change&nbsp;the&nbsp;order&nbsp;of&nbsp;functions&nbsp;and&nbsp;global&nbsp;variables.&nbsp;<BR></FONT></P></SPAN></DIV>
<P><BR></P><img src ="http://www.cnitblog.com/wangk/aggbug/6091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2006-01-09 11:11 <a href="http://www.cnitblog.com/wangk/archive/2006/01/09/6091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP服务器上断点下载文件</title><link>http://www.cnitblog.com/wangk/archive/2005/12/31/5942.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Sat, 31 Dec 2005 06:22:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/31/5942.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5942.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/31/5942.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5942.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从HTTP服务器上下载一个文件有很多方法，&#8220;热心&#8221;的微软提供了 WinInet 类，用起来也很方便。当然，我们也可以自己实现这些功能，通过格式化请求头很容易就能实现断点续传和检查更新等等功能 。    连接主机        格式化请求头...&nbsp;&nbsp;<a href='http://www.cnitblog.com/wangk/archive/2005/12/31/5942.html'>阅读全文</a><img src ="http://www.cnitblog.com/wangk/aggbug/5942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-31 14:22 <a href="http://www.cnitblog.com/wangk/archive/2005/12/31/5942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在程序崩溃时，获取相应的信息</title><link>http://www.cnitblog.com/wangk/archive/2005/12/15/5410.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Thu, 15 Dec 2005 08:33:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/15/5410.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5410.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/15/5410.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5410.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5410.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天在CSDN上看到有人问关于类似QQ那样崩溃时弹出的自己的崩溃提示框（<A href="http://community.csdn.net/Expert/topic/4453/4453714.xml?temp=.7370264">原文</A>）想了想，挺有意思。所以自己查了一下资料写了个库，方便使用<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用起来应该是比较简单的，但是我没有进行严格的测试，弟兄们不要扁我<IMG height=19 src="http://www.cnitblog.com/Emoticons/red_smile.gif" width=19 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将文件中的头文件和lib文件复制到你的工程里，将两个Dll复制到执行目录或者System32目录，然后工程里用代码设定即可（不设定按默认方式：不弹出提示，而在后台记录）。一个程序只要主线程包含该头文件即可。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例图：<IMG height=768 alt=ExceptionUse.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/ExceptionReport/ExceptionUse.JPG" width=1024 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上文设置出现出错提示框，和出错后要执行的命令行。如果逆向显示崩溃文件的话，将上面的设置改为：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>CString</FONT>&nbsp;strCmdLine;<BR>&nbsp;&nbsp;&nbsp;&nbsp;strCmdLine&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;_T(</SPAN><FONT color=#ff0000><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">C:\\windows\\system32\\notepad.exe&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN></FONT><SPAN style="COLOR: #000000">);<BR>&nbsp;&nbsp;&nbsp;&nbsp;strCmdLine&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;m_gExceptionRepot.GetLogFileName();<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_gExceptionRepot.SetErrorExcuteFile(&nbsp;strCmdLine&nbsp;);</SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们现在输入会出现异常的代码：<BR><IMG height=768 alt=TestSrc.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/ExceptionReport/TestSrc.JPG" width=1024 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是一个除零异常，然后我们执行可以看到：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG height=768 alt=ShowMessage.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/ExceptionReport/ShowMessage.JPG" width=1024 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在和执行文件物理路径相同的位置，出现了同名的rpt文件，它的内容是：<BR><BR><IMG height=571 alt=ReportFile.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/ExceptionReport/ReportFile.JPG" width=768 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出现详细的崩溃信息，当然前提条件是执行文件的相应路径下可以找到调试符号，否则只能看到如下信息：<BR><IMG height=571 alt=ReportResFile.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/ExceptionReport/ReportResFile.JPG" width=768 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看到了吧，比调试版本少了很多信息，不过没有关系，搭配map文件也能大概确定出错的位置了。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文用到的库文件可以在我的Blog下载。如果由于使用我的库文件出现任何问题，本人不负任何责任，如果不同意，请不要下载使用。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;库文件<A href="/Files/wangk/ExceptionLib.rar">下载地址</A><img src ="http://www.cnitblog.com/wangk/aggbug/5410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-15 16:33 <a href="http://www.cnitblog.com/wangk/archive/2005/12/15/5410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用GetPrivateProfile系列函数的困惑</title><link>http://www.cnitblog.com/wangk/archive/2005/12/14/5377.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Wed, 14 Dec 2005 06:20:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/14/5377.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5377.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/14/5377.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5377.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5377.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天包装Ini文件的读写，出现一个令人困惑的问题：我将C:\windows\system.ini复制到D:的根目录下，添加、修改了几个值，然后使用GetPrivateProfileString函数读取，发现值根本没有变，但是实际文件改变了。我把D:下的system.ini改名为123.Ini，读写就正常了。困惑中……难道GetPrivateProfileString函数中的文件名参数是吃干饭的？！而其他名字的Ini却很正常？还是我得机器有问题？？？？我的机器是Xp+Sp2+Vc 6.0。<img src ="http://www.cnitblog.com/wangk/aggbug/5377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-14 14:20 <a href="http://www.cnitblog.com/wangk/archive/2005/12/14/5377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何调试MFC中的内存泄漏</title><link>http://www.cnitblog.com/wangk/archive/2005/12/14/5369.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Wed, 14 Dec 2005 04:56:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/14/5369.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5369.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/14/5369.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5369.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5369.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#808080>最近好像常常看到有人问如何调试内存泄漏的问题，于是我写下本文，抛砖引玉……<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT color=#000000>首先，应该是MFC报告我们发现内存泄漏。注意：要多运行几次，以确定输出的内容不变，特别是{}之间的数值，不能变，否则下面的方法就不好用了。<IMG height=194 alt=LeakOut.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/LeakOut.JPG" width=880 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们来看看：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp(</SPAN><SPAN style="COLOR: #000000">54</SPAN><SPAN style="COLOR: #000000">)&nbsp;:&nbsp;{</SPAN><SPAN style="COLOR: #000000">86</SPAN><SPAN style="COLOR: #000000">}&nbsp;normal&nbsp;block&nbsp;at&nbsp;</SPAN><SPAN style="COLOR: #000000">0x00422E80</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">10</SPAN><SPAN style="COLOR: #000000">&nbsp;bytes&nbsp;</SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN style="COLOR: #000000">.<BR>&nbsp;Data:&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;<BR></SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="COLOR: #000000">F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp(</SPAN><SPAN style="COLOR: #000000">54</SPAN><SPAN style="COLOR: #000000">) 告诉我们MFC认为是在该文件的54行，发生了内存泄漏。你双击改行就可以转到该文件的54行了。但是有时候这一信息并不能用来准确判断，比如：MFC可能报告Strcore.cpp文件的某行，实际上这是CString的实现函数，此时并不知道什么时候发生了内存泄漏。<BR><BR></SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此时我们需要更多的信息。那么我们看看紧接其后的：<BR><SPAN style="COLOR: #000000"><BR></SPAN>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #000000">86</SPAN><SPAN style="COLOR: #000000">}&nbsp;normal&nbsp;block&nbsp;at&nbsp;</SPAN><SPAN style="COLOR: #000000">0x00422E80</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">10</SPAN><SPAN style="COLOR: #000000">&nbsp;bytes&nbsp;</SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN style="COLOR: #000000">.<BR>&nbsp;Data:&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;1F&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;CD&nbsp;<BR></SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它告诉我们：在第86次分配的内存没有释放，一共有10字节，内容移16进制方式打印给我们看。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有了这些信息，我们可以开始调试内存泄漏了。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按下F10在程序的刚开始处，停下来，打开Watch窗口：<BR><BR><IMG height=334 alt=LeakWatchMenu.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/LeakWatchMenu.JPG" width=665 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Watch窗口中输入：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">{,,msvcrtd.dll}_crtBreakAlloc</SPAN></DIV>
<P><BR><IMG height=174 alt=watch1.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/watch1.JPG" width=450 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后更改值为上文提到的分配次数：86<BR><BR><IMG height=174 alt=watch2.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/watch2.JPG" width=356 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接着按下F5继续，然后在第86次分配的时候会发生中断：<BR><BR><IMG height=125 alt=MessageBox.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/MessageBox.JPG" width=311 border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后我们打开堆栈窗口：<BR><BR><IMG height=315 alt=LeakStackMenu.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/LeakStackMenu.JPG" width=326 border=0><IMG height=174 alt=ClickStack.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/ClickStack.JPG" width=356 align=top border=0><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;往回查看最近我们自己的代码，双击堆栈我们自己的函数那一层，上图有绿色三角的那一层。就定位到泄漏时分配的内存了。<BR><BR><IMG height=418 alt=FoundLeak.JPG src="http://www.cnitblog.com/images/cnitblog_com/wangk/MFCLeak/FoundLeak.JPG" width=729 border=0></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之后，就是看你的编码功底了。</P></FONT><img src ="http://www.cnitblog.com/wangk/aggbug/5369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-14 12:56 <a href="http://www.cnitblog.com/wangk/archive/2005/12/14/5369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vc Release 时自动增加版本</title><link>http://www.cnitblog.com/wangk/archive/2005/12/12/5306.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Mon, 12 Dec 2005 03:41:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/12/5306.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5306.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/12/5306.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5306.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5306.html</trackback:ping><description><![CDATA[Vc编译版本时，手工管理版本的增加比较麻烦，所以自己写了个小工具，用来自动增加版本。首先要在你的工程里设定一下。下面图示自动增加Release时的版本。<br />首先打开Release的工程设定，切换到Post-build step页面。在Post-build Command(s)里新建一行命令，输入要执行的命令，本文是：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">E:\Tools\AutoVersion.exe </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Comments </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Powered By King</span><span style="COLOR: #000000">"</span></div>当然你也可以增加其他的命令。<br /><img height="226" alt="ProjectMenu.JPG" src="http://www.cnitblog.com/images/cnitblog_com/wangk/VC%20AutoVerSion/ProjectMenu.JPG" width="339" border="0" /><img height="453" alt="ProjectSet.JPG" src="http://www.cnitblog.com/images/cnitblog_com/wangk/VC%20AutoVerSion/ProjectSet.JPG" width="677" border="0" /><br /><br />然后编译Release版本，你会在输出窗口看到：<br /><br /><img height="164" alt="OutPut.JPG" src="http://www.cnitblog.com/images/cnitblog_com/wangk/VC%20AutoVerSion/OutPut.JPG" width="816" border="0" /><br /><br />那么此时的文件属性就是：<br /><br /><img height="473" alt="PropoComment.JPG" src="http://www.cnitblog.com/images/cnitblog_com/wangk/VC%20AutoVerSion/PropoComment.JPG" width="367" border="0" /><img height="473" alt="PropoVer.JPG" src="http://www.cnitblog.com/images/cnitblog_com/wangk/VC%20AutoVerSion/PropoVer.JPG" width="367" border="0" /><br /><br />没错，文件版本显示的是1003，这是上一次的属性。因为AutoVersion.exe是在编译完成后才开始更改版本的，所以显示的总会延迟一次。<br /><br />好了现在来介绍AutoVersion.exe的参数：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">/</span><span style="COLOR: #000000">ResFile C:\Work\Work.Rc 指定特定的资源文件，用于资源文件不是放在工程目录下时，或者工程文件下有多个资源文件时<br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Buckup 参数告诉在改变时现在资源所在的路径备份一下，备份文件是添加.bak扩展名。<br />/IncMain 自动增加主文件版本号。<br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Comments </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is Comment</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">CompanyName </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">My Company</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">FileDescription </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">FileDescription</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">InternalName </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">FileName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">LegalCopyright </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Copyright 2003</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">LegalTrademarks </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">LegalTrademarks</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">OriginalFilename </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">FileName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">ProductName </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ProductName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">SpecialBuild </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SpecialBuild</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><br />以上参数必须在资源文件中存在（除了Comments），另外如果资源里存在PrivateBuild值，那么PrivateBuild会被改成编译时间（比如2005</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">34</span><span style="COLOR: #000000">）</span></div>AutoVersion.exe可以在我的blog下载：<br /><a href="/Files/wangk/AutoVersion.rar">AutoVersion下载</a><br />声明：<br />本工具只是本人游戏之做，使用时最好要备份资源文件（.rc），如果出现问题本人概不负责。使用请自己考虑清楚。<img src ="http://www.cnitblog.com/wangk/aggbug/5306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-12 11:41 <a href="http://www.cnitblog.com/wangk/archive/2005/12/12/5306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何通过托盘图标得到该所属进程</title><link>http://www.cnitblog.com/wangk/archive/2005/12/12/5299.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Mon, 12 Dec 2005 01:06:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/12/5299.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5299.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/12/5299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5299.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5299.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;CTrayDlg::OnButton1()&nbsp;&nbsp;&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;TODO:&nbsp;&nbsp;Add&nbsp;&nbsp;your&nbsp;&nbsp;control&nbsp;&nbsp;notification&nbsp;&nbsp;handler&nbsp;&nbsp;code&nbsp;&nbsp;here&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">HWND&nbsp;&nbsp;wd</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">::FindWindow(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Shell_TrayWnd</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,NULL);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(wd</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">NULL)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;HWND&nbsp;&nbsp;wtd</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">FindWindowEx(wd,NULL,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">TrayNotifyWnd</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,NULL);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(wtd</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">NULL)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;HWND&nbsp;&nbsp;wd1</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">FindWindowEx(wtd,NULL,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ToolbarWindow32</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,NULL);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(wd1</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">NULL)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;pid;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;pid</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;GetWindowThreadProcessId(wd1,</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">pid);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(pid</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">NULL)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error4</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;HANDLE&nbsp;&nbsp;hd</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">OpenProcess(PROCESS_QUERY_INFORMATION&nbsp;&nbsp;&nbsp;&nbsp;¦&nbsp;&nbsp;&nbsp;&nbsp;PROCESS_ALL_ACCESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">,pid);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(hd</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">NULL)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error6</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;num</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">::SendMessage(wd1,TB_BUTTONCOUNT&nbsp;&nbsp;,NULL,NULL);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;i;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;n;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;TBBUTTON&nbsp;&nbsp;p,</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">pp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;x;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;wchar_t&nbsp;&nbsp;name[</SPAN><SPAN style="COLOR: #000000">256</SPAN><SPAN style="COLOR: #000000">];&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;whd,proid;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;temp;&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;TBBUTTON&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">sp;&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;sp</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(TBBUTTON&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #000000">0x20f00</SPAN><SPAN style="COLOR: #000000">;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">这里应该改成用VirtualAllocEx分配内存<IMG src="http://www.cnitblog.com/images/dot.gif">否则有可能出错，不过人懒，就先这么着吧&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">(i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;i</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">num;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::SendMessage(wd1,TB_GETBUTTON,i,(LPARAM)sp);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pp</SPAN><SPAN style="COLOR: #000000">=&amp;</SPAN><SPAN style="COLOR: #000000">p;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hd,sp,pp,sizeof(p),</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">n);&nbsp;&nbsp;<BR></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.Format("%x&nbsp;&nbsp;%x&nbsp;&nbsp;%x&nbsp;&nbsp;%x&nbsp;&nbsp;&nbsp;&nbsp;%x&nbsp;&nbsp;%x",p.iBitmap,p.idCommand,p.fsState,p.fsStyle,&nbsp;&nbsp;&nbsp;&nbsp;p.dwData,&nbsp;&nbsp;p.iString);&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name[</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;(p.iString</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">0xffffffff</SPAN><SPAN style="COLOR: #000000">)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hd,(</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">)p.iString,name,</SPAN><SPAN style="COLOR: #000000">255</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">n);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name[n]</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(<IMG src="http://www.cnitblog.com/images/dot.gif">)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x+="&nbsp;&nbsp;";&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x+=name;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">name;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whd</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadProcessMemory(hd,(</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">)p.dwData,</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">whd,</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">n);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(<IMG src="http://www.cnitblog.com/images/dot.gif">)&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proid</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowThreadProcessId((HWND)whd,</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">proid);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.Format(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">位置=%d&nbsp;&nbsp;名称=%s&nbsp;&nbsp;窗口句柄=%08x&nbsp;&nbsp;进程ID=%08x</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i,(LPCTSTR&nbsp;&nbsp;)temp,whd,proid);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_list.AddString(x);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR></SPAN></DIV><img src ="http://www.cnitblog.com/wangk/aggbug/5299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-12 09:06 <a href="http://www.cnitblog.com/wangk/archive/2005/12/12/5299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SoftIce使用随笔</title><link>http://www.cnitblog.com/wangk/archive/2005/12/07/5214.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Wed, 07 Dec 2005 07:22:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/07/5214.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5214.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/07/5214.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5214.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5214.html</trackback:ping><description><![CDATA[使用SoftIce调试关键是建立符号表，和让SoftIce加载符号表。<br />建立符号表可以用下面的命令行：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><br /><font size="4">C:\Program Files\Compuware\DriverStudio\SoftICE\nmsym.exe </font></span><font size="4"><span style="COLOR: #000000">/</span><span style="COLOR: #000000">TRANS:SYMBOLS,PACKAGE,ALWAYS F:\CodeSample\Test\hook\Debug\hOOKDLL.DLL </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">OUTPUT:F:\CodeSample\Test\hook\Debug\HOOK.NMS </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">SOURCE:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">E:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">E:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC</span><span style="COLOR: #000000">"</span></font><span style="COLOR: #000000"><font size="4">;F:\CodeSample\Test\hook<br /></font></span></div>然后双击生成的符号表，让SoftIce载入。<br />之后就可以在SoftIce调试界面里使用了。<br /><br />转：使用SoftIce调试free build版的Driver方法<br /><div class="solid_area">标题：使用SoftIce调试free build版的Driver方法<br />创建：2006/07/24<br /><br />--------------------------------------------------------------------------<br />1. 使用IDA生成map文件。<br /><br />2. 使用Visual Studio中的mapsym.exe生成sym文件。<br />e.x:<br />mapsym -m test.map<br />产生test.sym文件<br /><br />3. 使用Driver Studio中SoftIce目录下的nmsym.exe生成nms文件。<br />e.x:<br />nmsym test.sym<br />产生test.nms文件<br /><br />4. 加载test.nms文件，Ctrl-d呼出sice，就可以根据ida里的标签、变量等进行设置<br />断点了。<br />e.x:<br />nmsym /sym:test.nms<br /><br />--------------------------------------------------------------------------<br />windbg symbolsetting:<br />set _NT_SYMBOL_PATH=srv*DownstreamStore*http://msdl.microsoft.com/download/symbols</div><div class="solid_area">srv*E:\Cache\Symbols*http://msdn.microsoft.com/download/symbols;<br />--------------------------------------------------------------------------</div><div class="solid_area">再装vmware tools ，选择自定义安装项，只安装svga driver，next……finish。<br />找到虚拟的操作系统的vmx文件在最后添加以下两行代码：<br />vmmouse.present = "FALSE" <br />svga.maxFullscreenRefreshTick = "5"<br />ctlr+d 呼出正常。但返回后，键盘失灵。这个以前到是碰到过，将softice安装程序目录下的i8042prt.sys文件覆盖system32\drivers下同名文件。这下可以了.</div><div class="solid_area"> </div><img src ="http://www.cnitblog.com/wangk/aggbug/5214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-07 15:22 <a href="http://www.cnitblog.com/wangk/archive/2005/12/07/5214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流备份和枚举NTFS的数据流</title><link>http://www.cnitblog.com/wangk/archive/2005/12/05/5164.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Mon, 05 Dec 2005 01:15:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/05/5164.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5164.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/05/5164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5164.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5164.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Win32 备份 API 函数（<FONT color=#0000ff><B>BackupRead</B>、<B>BackupWrite</B></FONT> 等等），可被用来枚举文件中的流。不过，它们用起来有点怪异，而且看上去更像一个工作区，而不是有效的最终的解决方案。 
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其思路是，当您想要备份一个文件或整个文件夹时，您需要打包并存储全部可能存在的信息。因此，当需要尝试枚举文件中的流时，<B><FONT color=#0000ff>BackupRead()</FONT></B> 是您最好的朋友。我将重点介绍该函数的原型：<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><BR>BOOL&nbsp;BackupRead(<BR>&nbsp;&nbsp;HANDLE&nbsp;hFile,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;LPBYTE&nbsp;lpBuffer,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;DWORD&nbsp;nNumberOfBytesToRead,&nbsp;&nbsp;<BR>&nbsp;&nbsp;LPDWORD&nbsp;lpNumberOfBytesRead,&nbsp;&nbsp;<BR>&nbsp;&nbsp;BOOL&nbsp;bAbort,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;BOOL&nbsp;bProcessSecurity,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;LPVOID&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">lpContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>);<BR></SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了我们的目的，您此处可忽略诸如上下文和安全等方面。<B>hFile</B> 参数必须通过调用 <B><FONT color=#0000ff>CreateFile()</FONT></B> 获得，而 <B>lpBuffer</B> 应指向 <B>WIN32_STREAM_ID</B> 数据结构：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><BR>typedef&nbsp;struct&nbsp;_WIN32_STREAM_ID&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwStreamId;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwStreamAttributes;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;Size;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwStreamNameSize;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cStreamName[ANYSIZE_ARRAY];&nbsp;<BR>}&nbsp;WIN32_STREAM_ID,&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">LPWIN32_STREAM_ID;<BR></SPAN></DIV>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这种结构的前 20 个字节表示每个流的标题。流的名称紧随 <B>dwStreamNameSize</B> 字段后面出现，名称后面跟着流的内容。因为传统的文件内容可被视为流 — 尽管是未命名的流，所以要想枚举所有的流，您只需进行循环，直到 <B><FONT style="BACKGROUND-COLOR: #ffffff" color=#0000ff>BackupRead</FONT></B> 返回 False。实际上，<B><FONT color=#0000ff>BackupRead</FONT></B> 应该能读取所有与给定的文件或文件夹相关的信息：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><BR>WIN32_STREAM_ID&nbsp;sid;<BR>ZeroMemory(</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">sid,&nbsp;sizeof(WIN32_STREAM_ID));<BR>DWORD&nbsp;dwStreamHeaderSize&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(LPBYTE)</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">sid.cStreamName&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPBYTE)</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">sid</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;sid.dwStreamNameSize;<BR>bContinue&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;BackupRead(hfile,&nbsp;(LPBYTE)&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">sid,&nbsp;<BR>&nbsp;&nbsp;&nbsp;dwStreamHeaderSize,&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">dwRead,&nbsp;FALSE,&nbsp;FALSE,&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">lpContext);<BR></SPAN></DIV>
<P>&nbsp;&nbsp;&nbsp;&nbsp;上面的这个小段是在流的标题中读到的关键代码。如果该操作是成功的，即可尝试读取该流的实际名称：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><BR>WCHAR&nbsp;wszStreamName[MAX_PATH];&nbsp;<BR>BackupRead(hfile,&nbsp;(LPBYTE)&nbsp;wszStreamName,&nbsp;sid.dwStreamNameSize,&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">dwRead,&nbsp;FALSE,&nbsp;FALSE,&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">lpContext);<BR></SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在访问下一个流之前，首先要调用 <B><FONT color=#0000ff>BackupSeek()</FONT></B>，向前移动备份指示器：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><BR>BackupSeek(hfile,&nbsp;sid.Size.LowPart,&nbsp;sid.Size.HighPart,&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">dw1,&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">dw2,&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">lpContext);<BR></SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在多数情况下，您可将流视为常规文件 — 如，要删除流，可以用 <B><FONT color=#0000ff>DeleteFile()</FONT></B>。如果想要刷新流的内容，只需使用 <B><FONT color=#0000ff>ReadFile()</FONT></B> 和 <B><FONT color=#0000ff>WriteFile()</FONT></B>。没有正式的和得到支持的方法来移动或重新命名流。在本文的最后部分，我将利用本代码建立一个 NTFS 2000 专用的 Windows shell 扩展，将新的属性页添加到所有带流信息的文件中。<img src ="http://www.cnitblog.com/wangk/aggbug/5164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-05 09:15 <a href="http://www.cnitblog.com/wangk/archive/2005/12/05/5164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vc中将普通字符串和宽字符串互相转化的宏</title><link>http://www.cnitblog.com/wangk/archive/2005/12/02/5058.html</link><dc:creator>孤独的夜</dc:creator><author>孤独的夜</author><pubDate>Fri, 02 Dec 2005 00:26:00 GMT</pubDate><guid>http://www.cnitblog.com/wangk/archive/2005/12/02/5058.html</guid><wfw:comment>http://www.cnitblog.com/wangk/comments/5058.html</wfw:comment><comments>http://www.cnitblog.com/wangk/archive/2005/12/02/5058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/wangk/comments/commentRss/5058.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/wangk/services/trackbacks/5058.html</trackback:ping><description><![CDATA[在VC中输入Tchar麻烦，所以写了个宏方便使用。<br>// VS2005<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;">&nbsp;ChangeToTChar()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">DESCRIPTION:&nbsp;Change&nbsp;Normal&nbsp;String&nbsp;to&nbsp;T&nbsp;Char&nbsp;String,&nbsp;TChar&nbsp;String&nbsp;to&nbsp;Normal&nbsp;String.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;doc<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ActiveDocument<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">&nbsp;Be&nbsp;sure&nbsp;active&nbsp;document&nbsp;is&nbsp;a&nbsp;text&nbsp;document</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;doc&nbsp;</span><span style="color: #0000ff;">Is</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Nothing</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">ElseIf</span><span style="color: #000000;">&nbsp;doc.Type&nbsp;</span><span style="color: #000000;">&lt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Text</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;CurrTextLen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.Selection.Text<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;TEXT(""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;CurrText&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">"")</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection.CharLeft(</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">MsgBox&nbsp;Mid(CurrText,CurrTextLen,1)&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;CurrTextLen,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;TEXT(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;CurrText&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">ElseIf</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">_T</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">,&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">And</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;CurrTextLen,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">ElseIf</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">TEXT</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">,&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">And</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;CurrTextLen,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">Here&nbsp;Are&nbsp;Not&nbsp;String</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">CurrText&nbsp;=&nbsp;"&nbsp;_T("""&nbsp;&amp;&nbsp;CurrText&nbsp;&amp;&nbsp;""")&nbsp;"</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End&nbsp;Sub</span></div>
<br>// VS2003<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #0000ff;">Sub</span><span style="color: #000000;">&nbsp;ChangeToTChar()<br></span><span style="color: #008000;">'</span><span style="color: #008000;">DESCRIPTION:&nbsp;Change&nbsp;Normal&nbsp;String&nbsp;to&nbsp;T&nbsp;Char&nbsp;String,&nbsp;TChar&nbsp;String&nbsp;to&nbsp;Normal&nbsp;String.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;doc<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Set</span><span style="color: #000000;">&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ActiveDocument<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">&nbsp;Be&nbsp;sure&nbsp;active&nbsp;document&nbsp;is&nbsp;a&nbsp;text&nbsp;document</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;doc&nbsp;</span><span style="color: #0000ff;">Is</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Nothing</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Elseif</span><span style="color: #000000;">&nbsp;doc.Type&nbsp;</span><span style="color: #000000;">&lt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Text</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Dim</span><span style="color: #000000;">&nbsp;CurrTextLen<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Set</span><span style="color: #000000;">&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.Selection<br>&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;TEXT(""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;CurrText&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">"")</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection.CharLeft&nbsp;dsMove,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">MsgBox&nbsp;Mid(CurrText,CurrTextLen,1)&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,CurrTextLen,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">""</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;TEXT(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;CurrText&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">ElseIf</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">_T</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">3</span><span style="color: #000000;">,CurrTextLen</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,CurrTextLen,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">2</span><span style="color: #000000;">,CurrTextLen</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">ElseIf</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">TEXT</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">5</span><span style="color: #000000;">,CurrTextLen</span><span style="color: #000000;">-</span><span style="color: #000000;">4</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Trim</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrTextLen&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Len</span><span style="color: #000000;">(CurrText)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">and</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,CurrTextLen,</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">Then</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrText&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Mid</span><span style="color: #000000;">(CurrText,</span><span style="color: #000000;">2</span><span style="color: #000000;">,CurrTextLen</span><span style="color: #000000;">-</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">Here&nbsp;Are&nbsp;Not&nbsp;String</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">'</span><span style="color: #008000;">CurrText&nbsp;=&nbsp;"&nbsp;_T("""&nbsp;&amp;&nbsp;CurrText&nbsp;&amp;&nbsp;""")&nbsp;"</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">Exit</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">Sub</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Selection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CurrText<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">End</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">If</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">End&nbsp;Sub</span><span style="color: #000000;">&nbsp;</span></div><img src ="http://www.cnitblog.com/wangk/aggbug/5058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/wangk/" target="_blank">孤独的夜</a> 2005-12-02 08:26 <a href="http://www.cnitblog.com/wangk/archive/2005/12/02/5058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>