﻿<?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>C++博客-逆向分析专栏-随笔分类-MFC</title><link>http://www.cppblog.com/xunbu7/category/20248.html</link><description>内心的平静是一种修为，容易激动不是件好事。</description><language>zh-cn</language><lastBuildDate>Fri, 14 Dec 2012 22:19:52 GMT</lastBuildDate><pubDate>Fri, 14 Dec 2012 22:19:52 GMT</pubDate><ttl>60</ttl><item><title>内联汇编读写内存(返回当前函数的返回地址)</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/14/196248.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Fri, 14 Dec 2012 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/14/196248.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196248.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/14/196248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196248.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196248.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;addr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><br /><img id="Codehighlighter1_23_81_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_81_Open_Text.style.display='none'; Codehighlighter1_23_81_Closed_Image.style.display='inline'; Codehighlighter1_23_81_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_23_81_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_23_81_Closed_Text.style.display='none'; Codehighlighter1_23_81_Open_Image.style.display='inline'; Codehighlighter1_23_81_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;__asm</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_23_81_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_23_81_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;eax<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;eax,[ebp</span><span style="color: #000000">+</span><span style="color: #000000">4h]<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;addr,eax<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;eax<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strTemp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;strTemp.Format(</span><span style="color: #000000">"</span><span style="color: #000000">%x8</span><span style="color: #000000">"</span><span style="color: #000000">,addr);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxA(NULL,strTemp,</span><span style="color: #000000">"</span><span style="color: #000000">当前函数的返回地址</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">);</span></div><img src ="http://www.cppblog.com/xunbu7/aggbug/196248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-14 13:31 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/14/196248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程相关的几个总结函数</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/12/196191.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Wed, 12 Dec 2012 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/12/196191.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196191.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/12/196191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196191.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196191.html</trackback:ping><description><![CDATA[<div>1.提升进程访问权限 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;EnableDebugPriv()<br /><img id="Codehighlighter1_23_437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_437_Open_Text.style.display='none'; Codehighlighter1_23_437_Closed_Image.style.display='inline'; Codehighlighter1_23_437_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_23_437_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_23_437_Closed_Text.style.display='none'; Codehighlighter1_23_437_Open_Image.style.display='inline'; Codehighlighter1_23_437_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_23_437_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_23_437_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hToken;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;LUID&nbsp;seDebugNameValue;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;TOKEN_PRIVILEGES&nbsp;tkp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES</span><span style="color: #000000">|</span><span style="color: #000000">TOKEN_QUERY,</span><span style="color: #000000">&amp;</span><span style="color: #000000">hToken);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue(NULL,SE_DEBUG_NAME,</span><span style="color: #000000">&amp;</span><span style="color: #000000">seDebugNameValue);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[</span><span style="color: #000000">0</span><span style="color: #000000">].Luid&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;seDebugNameValue;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[</span><span style="color: #000000">0</span><span style="color: #000000">].Attributes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SE_PRIVILEGE_ENABLED;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;AdjustTokenPrivileges(hToken,FALSE,</span><span style="color: #000000">&amp;</span><span style="color: #000000">tkp,</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(tkp),NULL,NULL);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br />2.根据进程名称得到ID，如果有多个运行实例，返回第一个枚举到的进程的ID 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">DWORD&nbsp;ProcessNameToId(LPCTSTR&nbsp;lpszProcessName)<br /><img id="Codehighlighter1_47_336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_336_Open_Text.style.display='none'; Codehighlighter1_47_336_Closed_Image.style.display='inline'; Codehighlighter1_47_336_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_47_336_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_47_336_Closed_Text.style.display='none'; Codehighlighter1_47_336_Open_Image.style.display='inline'; Codehighlighter1_47_336_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_47_336_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_47_336_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hSnapShot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;PROCESSENTRY32&nbsp;pe;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;pe.dwSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(PROCESSENTRY32);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;Process32First(hSnapShot,</span><span style="color: #000000">&amp;</span><span style="color: #000000">pe);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;<br /><img id="Codehighlighter1_212_296_Open_Image" onclick="this.style.display='none'; Codehighlighter1_212_296_Open_Text.style.display='none'; Codehighlighter1_212_296_Closed_Image.style.display='inline'; Codehighlighter1_212_296_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_212_296_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_212_296_Closed_Text.style.display='none'; Codehighlighter1_212_296_Open_Image.style.display='inline'; Codehighlighter1_212_296_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_212_296_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_212_296_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">strcmp(lpszProcessName,pe.szExeFile))<br /><img id="Codehighlighter1_261_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_293_Open_Text.style.display='none'; Codehighlighter1_261_293_Closed_Image.style.display='inline'; Codehighlighter1_261_293_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_261_293_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_261_293_Closed_Text.style.display='none'; Codehighlighter1_261_293_Open_Image.style.display='inline'; Codehighlighter1_261_293_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_261_293_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_261_293_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;pe.th32ProcessID;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(Process32Next(hSnapShot,</span><span style="color: #000000">&amp;</span><span style="color: #000000">pe));<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div><br />3.<span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">通过进程的</span><span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang="EN-US">PID</span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">得到进程的路径<br /></span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">CString&nbsp;&nbsp;GetProcessFullPath(DWORD&nbsp;idProcess)<br /><img id="Codehighlighter1_45_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_457_Open_Text.style.display='none'; Codehighlighter1_45_457_Closed_Image.style.display='inline'; Codehighlighter1_45_457_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_45_457_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_45_457_Closed_Text.style.display='none'; Codehighlighter1_45_457_Open_Image.style.display='inline'; Codehighlighter1_45_457_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_45_457_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_45_457_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;str;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到进程句柄</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hProcess&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;OpenProcess(PROCESS_QUERY_INFORMATION&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;PROCESS_VM_READ,FALSE,&nbsp;idProcess);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(NULL&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;hProcess)<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">通过hProcess参数，得到指定进程的路径</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dw&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetModuleFileNameEx(hProcess,&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;str.GetBuffer(MAX_PATH),&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&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;MAX_PATH);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;str.ReleaseBuffer();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hProcess);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;str;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000">&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div><br />4.<span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">通过</span><span style="font-family: 'Times New Roman','serif'; font-size: 12pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang="EN-US">PID</span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">得到进程调用的各个模块的全路径，显示在列表框</span><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">CString&nbsp;CModule::GetProcessModuleFullPath(DWORD&nbsp;PID)<br /><img id="Codehighlighter1_53_762_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_762_Open_Text.style.display='none'; Codehighlighter1_53_762_Closed_Image.style.display='inline'; Codehighlighter1_53_762_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_53_762_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_53_762_Closed_Text.style.display='none'; Codehighlighter1_53_762_Open_Image.style.display='inline'; Codehighlighter1_53_762_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_53_762_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_53_762_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;hMod[</span><span style="color: #000000">1024</span><span style="color: #000000">];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;szModName[MAX_PATH];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;TCHAR&nbsp;Buffer[MAX_PATH];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hProcess;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;cbNeed&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;m_listmod.DeleteAllItems();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;hProcess&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::OpenProcess(PROCESS_QUERY_INFORMATION</span><span style="color: #000000">|</span><span style="color: #000000">PROCESS_VM_READ,FALSE,PID);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;EnumProcessModules(hProcess,&nbsp;hMod,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(hMod),&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">cbNeed);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;hProcess&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;INVALID_HANDLE_VALUE&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;FALSE&nbsp;)<br /><img id="Codehighlighter1_409_454_Open_Image" onclick="this.style.display='none'; Codehighlighter1_409_454_Open_Text.style.display='none'; Codehighlighter1_409_454_Closed_Image.style.display='inline'; Codehighlighter1_409_454_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_409_454_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_409_454_Closed_Text.style.display='none'; Codehighlighter1_409_454_Open_Image.style.display='inline'; Codehighlighter1_409_454_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_409_454_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_409_454_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(&nbsp;hProcess&nbsp;);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">(cbNeed&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(HMODULE));&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">&nbsp;)<br /><img id="Codehighlighter1_513_720_Open_Image" onclick="this.style.display='none'; Codehighlighter1_513_720_Open_Text.style.display='none'; Codehighlighter1_513_720_Closed_Image.style.display='inline'; Codehighlighter1_513_720_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_513_720_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_513_720_Closed_Text.style.display='none'; Codehighlighter1_513_720_Open_Image.style.display='inline'; Codehighlighter1_513_720_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_513_720_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_513_720_Open_Text"><span style="color: #000000">{&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(GetModuleFileNameEx(&nbsp;hProcess,&nbsp;hMod[i],&nbsp;szModName,<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(szModName)))<br /><img id="Codehighlighter1_598_717_Open_Image" onclick="this.style.display='none'; Codehighlighter1_598_717_Open_Text.style.display='none'; Codehighlighter1_598_717_Closed_Image.style.display='inline'; Codehighlighter1_598_717_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_598_717_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_598_717_Closed_Text.style.display='none'; Codehighlighter1_598_717_Open_Image.style.display='inline'; Codehighlighter1_598_717_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_598_717_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_598_717_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_listmod.InsertItem(</span><span style="color: #000000">0</span><span style="color: #000000">,szModName);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wsprintf(Buffer,</span><span style="color: #000000">"</span><span style="color: #000000">0x%08x</span><span style="color: #000000">"</span><span style="color: #000000">,hMod[i]);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_listmod.SetItemText(</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">1</span><span style="color: #000000">,Buffer);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(&nbsp;hProcess&nbsp;);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000">&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div></div><br />5.<span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">通过点击，得到列表值</span><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/aa.jpg" width="617" longdesc="" height="280" /><br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;OnClickProcessList()<br /><img id="Codehighlighter1_26_233_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_233_Open_Text.style.display='none'; Codehighlighter1_26_233_Closed_Image.style.display='inline'; Codehighlighter1_26_233_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_26_233_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_26_233_Closed_Text.style.display='none'; Codehighlighter1_26_233_Open_Image.style.display='inline'; Codehighlighter1_26_233_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_26_233_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_233_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(TRUE);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获得行号</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_listpro.GetNextItem(&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;LVNI_ALL&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;LVNI_SELECTED);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">通过行号得到进程名</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;szFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_listpro.GetItemText(nItem,</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">通过行号得到PID</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;szPID</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m_listpro.GetItemText(nItem,</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><img src ="http://www.cppblog.com/xunbu7/aggbug/196191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-12 09:26 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/12/196191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GetBuffer与ReleaseBuffer的用法，CString剖析</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/12/196189.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Wed, 12 Dec 2012 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/12/196189.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196189.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/12/196189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196189.html</trackback:ping><description><![CDATA[<p>GetBuffer()主要作用是将字符串的缓冲区长度锁定，releaseBuffer则是解除锁定，使得CString对象在以后的代码中继续可以<strong>实现长度自适应增长</strong>的功能。 </p>
<p align="left">CString ::GetBuffer有两个重载版本:</p>
<p align="left">LPTSTR GetBuffer( );LPTSTR GetBuffer(int nMinBufferLength);</p>
<p>在第二个版本中，当设定的长度小于原字符串长度时，nMinBufLength = nOldLen，该参数会被忽</p>
<p>略，不分配内存，指向原CString；当设定的长度大于原字符串本身的长度时就要重新分配（reallocate）一块比较大的空间出来。而调用第一个版本时，应如通过传入0来调用第二个版本一样。</p>
<p>是否需要在GetBufer后面调用ReleaseBuffer()，是根据你的后面的程序是否需要继续使用该字符串变量，并且是否动态改变其长度而定的。如果你GetBuffer以后程序自函数就退出，局部变量都不存在了，调用不调用ReleaseBuffer没什么意义了。</p>
<p>这是一个非常容易被用错的函数，主要可能是由于大家对它的功能不太了解。其实点破的话，也不是那么深奥。<br />&nbsp;&nbsp;&nbsp; GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。它和被重载的操作符LPCTSTR还是有点本质区别的，LPCTSTR是直接返回一个只读内存的指针，而GetBuffer则是返回一个可以供调用者写入的内存，并且，你可以给定大小。下面是个简单的，但也是非常典型的例子：<br />&nbsp;&nbsp;&nbsp; int readFile(CString&amp; str, const CString&amp; strPathName)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE* fp = fopen(strPathName, "r"); // 打开文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fseek(fp, 0, SEEK_END);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nLen = ftell(fp); // 获得文件长度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fseek(fp, 0, SEEK_SET); // 重置读指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char* psz = str.GetBuffer(nLen);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fread(psz, sizeof(char), nLen, fp); //读文件内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str.ReleaseBuffer(); //千万不能缺少<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fclose(fp);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; 上面的函数是GetBuffer函数最典型的用法了，其实它就相当于申请一块nLen大小的内存，只不过，这块内存是被引用在CString对象的内部而已，这是非常有效的一种用法，如果不直接用GetBuffer函数来申请的话，那么你必须用new操作符（或者malloc()函数）在CString的外部申请，然后再将申请的内存拷贝到CString对象中，显然这是一个非常冗余的操作，会使你函数的效率大大下降。<br />&nbsp;&nbsp;&nbsp; ReleaseBuffer函数是用来告诉CString对象，你的GetBuffer所引用的内存已经使用完毕，现在必须对它进行封口，否则 CString将不会知道它现在所包含的字符串的长度，所以在使用完GetBuffer之后，必须立即调用ReleaseBuffer函数重置 CString的内部属性，其实也就是头部信息。</p>
<p>&nbsp;</p>
<p>补充一下：</p>
<p>GetBuffer说白了就两个功能：</p>
<p>1：就是将CString里面的内存交到外部一个来处理，外部可以直接修改它的内容。</p>
<p>2：重新修改CString的内存大小，这个数值不包含null结尾符。</p>
<p>另一个典型的用法：就是将CString里面的内容变为int或long型，需要先获取里面的内存指针。这样就可以先GetBuffer（内存大小）方便直接转换。</p>
<p>如果在外部修改了CString里面的内容，在重新使用CString之前，需调用ReleaseBuffer()也就是说，ReleaseBuffer不需要每次都调用。</p>
<p>MSDN原文： </p>
<p>If you use the pointer returned by <strong>GetBuffer</strong> to change the string contents, you must call <a href="http://www.cnblogs.com/jamesmile/admin/ms-help:/ms.vscc.v80/ff0a3476-a7c4-4dc4-89fc-713fcfcdab16.htm">ReleaseBuffer</a> before using any other <strong>CSimpleStringT</strong> member methods. </p>
<p>The buffer memory is automatically freed when the <strong>CSimpleStringT</strong> object is destroyed. </p>
<p>If you keep track of the string length yourself, you should not append the terminating null character. You must, however, specify the final string length when you release the buffer with <strong>ReleaseBuffer</strong>. If you do append a terminating null character, you should pass &#8211;1 (the default) for the length to <strong>ReleaseBuffer</strong>, and <strong>ReleaseBuffer</strong> will perform a <strong>strlen</strong> on the buffer to determine its length.</p><img src ="http://www.cppblog.com/xunbu7/aggbug/196189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-12 09:13 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/12/196189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串的格式化</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/11/196181.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Tue, 11 Dec 2012 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/11/196181.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196181.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/11/196181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196181.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196181.html</trackback:ping><description><![CDATA[&nbsp;CString csText;<br />&nbsp;csText.Format( _T( "Last Scan Time taken - %lf sec" ), dblPerf );<br />&nbsp;::SendMessage(m_StatusBar, SB_SETTEXT, (WPARAM)2, (LPARAM)csText.GetBuffer(csText.GetLength()));<img src ="http://www.cppblog.com/xunbu7/aggbug/196181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-11 17:00 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/11/196181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用对话框</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/11/196179.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Tue, 11 Dec 2012 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/11/196179.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196179.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/11/196179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196179.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196179.html</trackback:ping><description><![CDATA[1.打开/保存对话框，获得文件路径显示到控件上<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/QQ截图20121212210856.jpg" /><br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;CMyWGDllTestDlg::OnBnClickedButton()<br /><img id="Codehighlighter1_42_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_215_Open_Text.style.display='none'; Codehighlighter1_42_215_Closed_Image.style.display='inline'; Codehighlighter1_42_215_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_42_215_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_42_215_Closed_Text.style.display='none'; Codehighlighter1_42_215_Open_Image.style.display='inline'; Codehighlighter1_42_215_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_42_215_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_42_215_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_67_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_99_Open_Text.style.display='none'; Codehighlighter1_67_99_Closed_Image.style.display='inline'; Codehighlighter1_67_99_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_67_99_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_67_99_Closed_Text.style.display='none'; Codehighlighter1_67_99_Open_Image.style.display='inline'; Codehighlighter1_67_99_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;CFileDialog&nbsp;dlg(TRUE);//</span><span id="Codehighlighter1_67_99_Open_Text"><span style="color: #008000">TRUE为OPEN对话框，FALSE为SAVE&nbsp;AS对话框</span><span style="color: #808080"></span></span><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dlg.DoModal()</span><span style="color: #000000">==</span><span style="color: #000000">IDOK)<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;m_path</span><span style="color: #000000">=</span><span style="color: #000000">dlg.GetPathName();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;SetDlgItemText(IDC_EDIT,m_path);</span><span style="color: #008000">//</span><span style="color: #008000">m_path是IDC_EDIT的CString控件变量</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" /></span><span style="color: #000000">}</span></span></div><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2.浏览文件夹对话框，获得路径</span><span style="font-family: 宋体; font-size: 12pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，将路径读到指定控件上。<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/o.jpg" width="322" longdesc="" height="314" /><br /></span><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/玩.jpg" width="483" longdesc="" height="108" /><br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BrowsePath()<br /><img id="Codehighlighter1_18_495_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_495_Open_Text.style.display='none'; Codehighlighter1_18_495_Closed_Image.style.display='inline'; Codehighlighter1_18_495_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_18_495_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_18_495_Closed_Text.style.display='none'; Codehighlighter1_18_495_Open_Image.style.display='inline'; Codehighlighter1_18_495_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_18_495_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_18_495_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;LPBROWSEINFO&nbsp;lpbi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BROWSEINFO;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">hwndOwner&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetSafeHwnd();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">pidlRoot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">pszDisplayName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">lpszTitle&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">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ulFlags&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;BIF_RETURNONLYFSDIRS</span><span style="color: #000000">|</span><span style="color: #000000">BIF_STATUSTEXT;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;lpbi</span><span style="color: #000000">-&gt;</span><span style="color: #000000">lpfn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;LPITEMIDLIST&nbsp;lpitemidlist&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SHBrowseForFolder(lpbi);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(lpitemidlist&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)<br /><img id="Codehighlighter1_335_378_Open_Image" onclick="this.style.display='none'; Codehighlighter1_335_378_Open_Text.style.display='none'; Codehighlighter1_335_378_Closed_Image.style.display='inline'; Codehighlighter1_335_378_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_335_378_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_335_378_Closed_Text.style.display='none'; Codehighlighter1_335_378_Open_Image.style.display='inline'; Codehighlighter1_335_378_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_335_378_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_335_378_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;lpbi;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpbi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;NULL;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;path[MAX_PATH];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;SHGetPathFromIDList(lpitemidlist,path);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;lpbi;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;m_dPath&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;path;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(FALSE);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div><img src ="http://www.cppblog.com/xunbu7/aggbug/196179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-11 16:45 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/11/196179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>截取字符串</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/11/196178.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Tue, 11 Dec 2012 08:33:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/11/196178.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196178.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/11/196178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196178.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196178.html</trackback:ping><description><![CDATA[1.截取当前exe全路径的前部分
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">CString&nbsp;GetModulePath()<br /><img id="Codehighlighter1_24_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_228_Open_Text.style.display='none'; Codehighlighter1_24_228_Closed_Image.style.display='inline'; Codehighlighter1_24_228_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_24_228_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_24_228_Closed_Text.style.display='none'; Codehighlighter1_24_228_Open_Image.style.display='inline'; Codehighlighter1_24_228_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_24_228_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_24_228_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;strPath;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;GetModuleFileName(NULL,&nbsp;strPath.GetBuffer(MAX_PATH),&nbsp;MAX_PATH);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;strPath.ReleaseBuffer();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPath.ReverseFind(</span><span style="color: #000000">'</span><span style="color: #000000">\\</span><span style="color: #000000">'</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;strPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPath.Left(nPos</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;strPath;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>2.截取全路径，得到进程名<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">CString&nbsp;CutPath(CString&nbsp;szFullPath)<br /><img id="Codehighlighter1_36_176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_176_Open_Text.style.display='none'; Codehighlighter1_36_176_Closed_Image.style.display='inline'; Codehighlighter1_36_176_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_36_176_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_36_176_Closed_Text.style.display='none'; Codehighlighter1_36_176_Open_Image.style.display='inline'; Codehighlighter1_36_176_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_36_176_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_36_176_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;szCut;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;szCut.Format(</span><span style="color: #000000">"</span><span style="color: #000000">%s</span><span style="color: #000000">"</span><span style="color: #000000">,szFullPath&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;szCut.ReverseFind(</span><span style="color: #000000">'</span><span style="color: #000000">\\</span><span style="color: #000000">'</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;szCut2&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;szCut.Mid(k&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;szCut2;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><img src ="http://www.cppblog.com/xunbu7/aggbug/196178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-11 16:33 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/11/196178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CreateProcess的一个参数问题</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/11/196163.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Tue, 11 Dec 2012 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/11/196163.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196163.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/11/196163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196163.html</trackback:ping><description><![CDATA[CreateProcess(m_path, NULL, NULL,NULL, FALSE, NULL,NULL, NULL,&amp;si,&amp;pi);<br />第5个参数为FAUSE表示不继承调用进程的句柄。<br />
<dl>
<dt><em>bInheritHandles</em> 
<dd>[in] Indicates whether the new process inherits handles from the calling process. If TRUE, each inheritable open handle in the calling process is inherited by the new process. Inherited handles have the same value and access privileges as the original handles. </dd></dl><img src ="http://www.cppblog.com/xunbu7/aggbug/196163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-11 11:20 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/11/196163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Cstring::GetLength()  </title><link>http://www.cppblog.com/xunbu7/archive/2012/12/03/195930.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Mon, 03 Dec 2012 09:54:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/03/195930.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/195930.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/03/195930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/195930.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/195930.html</trackback:ping><description><![CDATA[strText.GetLength(); <br />返回的是字符个数(不包括结尾的空字符)，<span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 13px/18px 'Helvetica Neue', Helvetica, Arial, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">要视乎你编译是UNICODE还是MBCS(多字符集)。<span style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; display: inline !important; font: 14px/24px Helvetica, Tahoma, Arial, sans-serif; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">CString&nbsp;本身就是TCHAR的封装，所以你定义了UNICODE那么他就占两个字节，否则就是一个字节。</span></span><br /><br />
<p><span style="color: #008000"><strong>我通常使用下面代码来取得字符串的字节数:</strong></span></p>
<p>int nBytes = (csSomeCString.GetLength() + 1) * sizeof(TCHAR);<br />注意:<span style="color: #ff0000"><strong>这字节数的长度还包括文件结束符.<br /><br /></strong></span></p>
<p>关于getlength()获取字符串的长度问题 下面几种是不一样的<br />只是一些实验，每个人都可以自己做。尽管简单，但是不做实验还真是无法知道，从而实际应用的时候因此出错也说不定哦。现把我的实验结果罗列在此，仅供其他网友参考：<br />在MBCS设置下：<br />1. 以'\0'为结尾。故_T("ab\0cd\n")长度为2，_T("abcd\n")长度为5。<br />2. 一个英文字母占1字节，一个其他文字占2字节，故_T("abcd汉字")长度为8。_T("セ&#946;&#916;尒ab汉字cd")长度为16。<br /><br />UNICODE设置下：<br />1. 每个字符占2字节，但是GetLength返回的是纯字符数，故_T("セ&#946;&#916;尒ab汉字cd")长度为10。<br />2. '\0'仍然是结尾，所以_T("セ&#946;\0&#916;尒ab汉字cd")的长度为2。<br /><br />另外W2A是把字符串从UNICODE转化到MBCS而不是ASCII，下面的代码可以证明：<br />CString str=_T("セ&#946;&#916;尒ab汉字cd");<br />USES_CONVERSION;<br />char *pValueTemp=W2A((LPCTSTR)str);<br />nLength=strlen(pValueTemp);<br />此时的nLength为16，说明pValueTemp为MBCS串。</p><img src ="http://www.cppblog.com/xunbu7/aggbug/195930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-03 17:54 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/03/195930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>