﻿<?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++博客-Zero Code</title><link>http://www.cppblog.com/cntrump/</link><description>零度代码</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 02:42:26 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 02:42:26 GMT</pubDate><ttl>60</ttl><item><title>Ring3 Api Hook (2) Hot patching inline hook</title><link>http://www.cppblog.com/cntrump/archive/2011/05/11/146197.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Wed, 11 May 2011 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/05/11/146197.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/146197.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/05/11/146197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/146197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/146197.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000; ">#pragma&nbsp;once<br></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;module:&nbsp;InlineHook.h&nbsp;<br></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;author:&nbsp;cntrump<br></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;create:&nbsp;2011-05-11</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#if</span><span style="color: #000000; ">&nbsp;defined(DEBUG)||defined(_DEBUG)</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;HOOKTRACE&nbsp;Trace</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#else</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;HOOKTRACE</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;inline&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Trace(LPCWSTR&nbsp;fmt,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">)<br></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;wzOut[MAX_PATH];<br></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(wzOut,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(wzOut));<br></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;arg_list;<br></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;va_start(arg_list,&nbsp;fmt);<br></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;_vswprintf_p(wzOut,&nbsp;_countof(wzOut),&nbsp;fmt,&nbsp;arg_list);<br></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;va_end(arg_list);<br></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;OutputDebugStringW(wzOut);<br></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #000000; ">}<br></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;CHotPatchInlineHook<br></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;CHotPatchInlineHook(HANDLE&nbsp;hProcess,&nbsp;LPVOID&nbsp;pRealFuncAddress,&nbsp;LPVOID&nbsp;pFakeFuncAddress)<br></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:m_hProcess(hProcess)&nbsp;<br></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,m_pRealFuncAddress(pRealFuncAddress)<br></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">&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; ">WriteLongJmp(pRealFuncAddress,&nbsp;pFakeFuncAddress))<br></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HOOKTRACE(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">WriteLongJmp&nbsp;error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #000000; ">&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; ">WriteShortJmp(pRealFuncAddress))<br></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HOOKTRACE(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">WriteShortJmp&nbsp;error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">~</span><span style="color: #000000; ">CHotPatchInlineHook()&nbsp;<br></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnHook();<br></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;VOID&nbsp;UnHook()<br></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnloadShortJmp();<br></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnloadLongJmp();<br></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;WriteShortJmp(LPVOID&nbsp;pRealFuncAddress)<br></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;VirtualProtectEx(m_hProcess,&nbsp;pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #000000; ">&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; ">bRet)<br></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;FALSE;<br></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HOOKTRACE(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Org&nbsp;Address:&nbsp;%X</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;(DWORD)pRealFuncAddress);<br></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_orgShortJmp,&nbsp;pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp));<br></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_shortJmp,&nbsp;pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp));<br></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;构造&nbsp;jmp&nbsp;$-5</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_shortJmp.op&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xEB</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_shortJmp.offset&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xF9</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwNumberOfByteWritten;<br></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WriteProcessMemory(m_hProcess,&nbsp;pRealFuncAddress,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_shortJmp,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwNumberOfByteWritten);<br></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;dwOldProtect,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;WriteLongJmp(LPVOID&nbsp;pRealFuncAddress,&nbsp;LPVOID&nbsp;pFakeFuncAddress)<br></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwRealFuncAddress&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GetRealFuncAddress(pFakeFuncAddress);<br></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;构造&nbsp;call&nbsp;xxxxxxxx</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_longJmp.op&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xE8</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_longJmp.offset&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GetFuncOffset((LPBYTE)pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;(LPVOID)dwRealFuncAddress,&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;(LPBYTE)pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_orgLongJmp,&nbsp;(LPBYTE)pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp));<br></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwNumberOfByteWritten;<br></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WriteProcessMemory(m_hProcess,&nbsp;(LPBYTE)pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_longJmp,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwNumberOfByteWritten);<br></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;(LPBYTE)pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;dwOldProtect,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;UnloadShortJmp()<br></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwNumberOfBytesWritten;<br></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;m_pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WriteProcessMemory(m_hProcess,&nbsp;m_pRealFuncAddress,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_orgShortJmp,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwNumberOfBytesWritten);<br></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;m_pRealFuncAddress,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ShortJmp),&nbsp;dwOldProtect,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;bRet;<br></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;UnloadLongJmp()<br></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwNumberOfBytesWritten;<br></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bRet;<br></span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;(LPBYTE)m_pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WriteProcessMemory(m_hProcess,&nbsp;(LPBYTE)m_pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m_longJmp,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwNumberOfBytesWritten);<br></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtectEx(m_hProcess,&nbsp;(LPBYTE)m_pRealFuncAddress</span><span style="color: #000000; ">-</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(LongJmp),&nbsp;dwOldProtect,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwOldProtect);<br></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">110</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;bRet;<br></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">112</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;m_hProcess;<br></span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;m_pRealFuncAddress;<br></span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br></span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">118</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;GetRealFuncAddress(LPVOID&nbsp;pFunc)<br></span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;realaddr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(DWORD)pFunc;<br></span><span style="color: #008080; ">121</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LongJmp&nbsp;longJmp;<br></span><span style="color: #008080; ">122</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">longJmp,&nbsp;pFunc,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(longJmp));<br></span><span style="color: #008080; ">123</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">124</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">125</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(longJmp.op&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0xE9</span><span style="color: #000000; ">)<br></span><span style="color: #008080; ">126</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">127</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realaddr&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;longJmp.offset&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">128</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">129</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">130</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;realaddr;<br></span><span style="color: #008080; ">131</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">132</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">133</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;GetFuncOffset(LPVOID&nbsp;pInAddress,&nbsp;LPVOID&nbsp;pFuncAddress,&nbsp;UINT&nbsp;nCodeLen)<br></span><span style="color: #008080; ">134</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">135</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(DWORD)pFuncAddress&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;(DWORD)pInAddress&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;nCodeLen;<br></span><span style="color: #008080; ">136</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">137</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">138</span>&nbsp;<span style="color: #000000; ">#pragma&nbsp;pack(push,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br></span><span style="color: #008080; ">139</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">140</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;LongJmp&nbsp;&nbsp;<br></span><span style="color: #008080; ">141</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">142</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;op;<br></span><span style="color: #008080; ">143</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;offset;<br></span><span style="color: #008080; ">144</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}m_longJmp,&nbsp;m_orgLongJmp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;把长跳转写入&nbsp;nop&nbsp;块</span><span style="color: #008000; "><br></span><span style="color: #008080; ">145</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br></span><span style="color: #008080; ">146</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;ShortJmp&nbsp;<br></span><span style="color: #008080; ">147</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">148</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;op;<br></span><span style="color: #008080; ">149</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;offset;<br></span><span style="color: #008080; ">150</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}m_shortJmp,&nbsp;m_orgShortJmp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;短跳，用于跳转到前面的&nbsp;nop&nbsp;块</span><span style="color: #008000; "><br></span><span style="color: #008080; ">151</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br></span><span style="color: #008080; ">152</span>&nbsp;<span style="color: #000000; ">#pragma&nbsp;pack(pop)<br></span><span style="color: #008080; ">153</span>&nbsp;<span style="color: #000000; ">};</span></div><img src ="http://www.cppblog.com/cntrump/aggbug/146197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-05-11 16:10 <a href="http://www.cppblog.com/cntrump/archive/2011/05/11/146197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ring3 Api Hook (1) 古老的 inline Hook</title><link>http://www.cppblog.com/cntrump/archive/2011/05/10/146150.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Tue, 10 May 2011 15:23:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/05/10/146150.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/146150.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/05/10/146150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/146150.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/146150.html</trackback:ping><description><![CDATA[
最古老的 Hook ，非常不稳定。<br>
<div style="border-left-color: rgb(204, 204, 204); padding-bottom: 4px; background-color: rgb(238, 238, 238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; padding-top: 4px; "><span style="COLOR: #008080">&nbsp;1</span><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#pragma&nbsp;pack(push,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">typedef&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id="Codehighlighter1_38_69_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_69_Open_Text.style.display='none'; Codehighlighter1_38_69_Closed_Image.style.display='inline'; Codehighlighter1_38_69_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_38_69_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_38_69_Closed_Text.style.display='none'; Codehighlighter1_38_69_Open_Image.style.display='inline'; Codehighlighter1_38_69_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_38_69_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_38_69_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;BYTE&nbsp;op;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;DWORD&nbsp;dwOffset;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">HookCode;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#pragma&nbsp;pack(pop)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">HookCode&nbsp;oldCode,&nbsp;newCode;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">LPBYTE&nbsp;pOrgAddress&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">HANDLE&nbsp;WINAPI&nbsp;fakeCreateFileW(DWORD&nbsp;dwReturnAddress,&nbsp;__in&nbsp;LPCWSTR&nbsp;lpFileName,&nbsp;__in&nbsp;DWORD&nbsp;dwDesiredAccess,&nbsp;__in&nbsp;DWORD&nbsp;dwShareMode,&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__in_opt&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpSecurityAttributes,&nbsp;__in&nbsp;DWORD&nbsp;dwCreationDisposition,&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__in&nbsp;DWORD&nbsp;dwFlagsAndAttributes,&nbsp;__in_opt&nbsp;HANDLE&nbsp;hTemplateFile&nbsp;)<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id="Codehighlighter1_470_919_Open_Image" onclick="this.style.display='none'; Codehighlighter1_470_919_Open_Text.style.display='none'; Codehighlighter1_470_919_Closed_Image.style.display='inline'; Codehighlighter1_470_919_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_470_919_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_470_919_Closed_Text.style.display='none'; Codehighlighter1_470_919_Open_Image.style.display='inline'; Codehighlighter1_470_919_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_470_919_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_470_919_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;VirtualProtect(pOrgAddress,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwOldProtect);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;CopyMemory(pOrgAddress,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">oldCode,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode));<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;VirtualProtect(pOrgAddress,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode),&nbsp;dwOldProtect,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwOldProtect);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;MessageBoxW(NULL,&nbsp;lpFileName,&nbsp;NULL,&nbsp;MB_OK);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;CreateFileW(lpFileName,&nbsp;dwDesiredAccess,&nbsp;dwShareMode,<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;lpSecurityAttributes,&nbsp;dwCreationDisposition,<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;dwFlagsAndAttributes,&nbsp;hTemplateFile);<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">DWORD&nbsp;GetRealAddress(LPVOID&nbsp;pFunc)<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id="Codehighlighter1_957_1188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_957_1188_Open_Text.style.display='none'; Codehighlighter1_957_1188_Closed_Image.style.display='inline'; Codehighlighter1_957_1188_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_957_1188_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_957_1188_Closed_Text.style.display='none'; Codehighlighter1_957_1188_Open_Image.style.display='inline'; Codehighlighter1_957_1188_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_957_1188_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_957_1188_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;计算函数真实地址</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #008000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;LPBYTE&nbsp;funaddr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPBYTE)pFunc;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(funaddr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0xE9</span><span style="COLOR: #000000">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;判断是否为虚拟函数地址，E9为jmp指令</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img id="Codehighlighter1_1054_1161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1054_1161_Open_Text.style.display='none'; Codehighlighter1_1054_1161_Closed_Image.style.display='inline'; Codehighlighter1_1054_1161_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_1054_1161_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1054_1161_Closed_Text.style.display='none'; Codehighlighter1_1054_1161_Open_Image.style.display='inline'; Codehighlighter1_1054_1161_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&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_1054_1161_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_1054_1161_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;realaddr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(DWORD)pFunc;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;realaddr&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;funaddr[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">0x100</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">funaddr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img 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;realaddr;<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(DWORD)pFunc;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id="Codehighlighter1_1228_1872_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1228_1872_Open_Text.style.display='none'; Codehighlighter1_1228_1872_Closed_Image.style.display='inline'; Codehighlighter1_1228_1872_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id="Codehighlighter1_1228_1872_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1228_1872_Closed_Text.style.display='none'; Codehighlighter1_1228_1872_Open_Image.style.display='inline'; Codehighlighter1_1228_1872_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_1228_1872_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_1228_1872_Open_Text"><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;pOrgAddress&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPBYTE)GetProcAddress(LoadLibrary(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">kernel32.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)),&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">CreateFileW</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;DWORD&nbsp;dwOldProtect;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;VirtualProtect(pOrgAddress,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode),&nbsp;PAGE_EXECUTE_READWRITE,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwOldProtect);<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;CopyMemory(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">oldCode,&nbsp;pOrgAddress,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode));<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;newCode.op&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0xE8</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;DWORD&nbsp;dwPatch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetRealAddress(fakeCreateFileW);<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;newCode.dwOffset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dwPatch&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(DWORD)pOrgAddress&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;CopyMemory(pOrgAddress,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">newCode,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode));<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;VirtualProtect(pOrgAddress,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(HookCode),&nbsp;dwOldProtect,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwOldProtect);<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;CreateFileW(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C:\\a.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;GENERIC_WRITE,&nbsp;FILE_SHARE_READ,&nbsp;NULL,&nbsp;CREATE_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;NULL);<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img 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: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/cntrump/aggbug/146150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-05-10 23:23 <a href="http://www.cppblog.com/cntrump/archive/2011/05/10/146150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Gdiplus 将图片设置为窗口背景</title><link>http://www.cppblog.com/cntrump/archive/2011/05/04/145663.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Wed, 04 May 2011 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/05/04/145663.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/145663.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/05/04/145663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/145663.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/145663.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">在窗口创建时加载一幅图作为背景<br></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;WM_CREATE:<br></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::GdiplusStartup(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">token,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">input,&nbsp;NULL);<br></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Gdiplus::Image(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pic02.png</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">在&nbsp;WM_ERASEBKGND&nbsp;消息中显示图片，也可以直接返回&nbsp;TRUE&nbsp;，而在&nbsp;WM_PAINT&nbsp;中显示图片。<br></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;WM_ERASEBKGND:<br></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hdc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(HDC)wParam;<br></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;rc;<br></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(hWnd,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">rc);<br></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;hMemDC&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CreateCompatibleDC(hdc);<br></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;hMemBmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CreateCompatibleBitmap(hdc,&nbsp;rc.right,&nbsp;rc.bottom);<br></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hMemDC,&nbsp;hMemBmp);<br></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FillRect(hMemDC,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">rc,&nbsp;GetSysColorBrush(COLOR_WINDOW));&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;把透明背景填充为系统窗口颜色</span><span style="color: #008000; "><br></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gdiplus::Graphics&nbsp;g(hMemDC);<br></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.DrawImage(pImage,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;rc.right,&nbsp;rc.bottom);<br></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitBlt(hdc,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;rc.right,&nbsp;rc.bottom,&nbsp;hMemDC,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;SRCCOPY);<br></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(hMemBmp);<br></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(hMemDC);<br></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;TRUE;<br></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">对于一般窗口这样就可以了，网上的很多代码也是这样写的，但是用于对话框时，就会有问题，在拖动改变对话框大小之后，背景图片会有残留。需要在&nbsp;WM_SIZE&nbsp;中&nbsp;调用&nbsp;RedrawWindow&nbsp;进行处理：<br></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;WM_SIZE:<br></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedrawWindow(hWnd,&nbsp;NULL,&nbsp;NULL,&nbsp;RDW_INVALIDATE);<br></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">这样就完美了。<br></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;<br></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/cntrump/aggbug/145663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-05-04 14:10 <a href="http://www.cppblog.com/cntrump/archive/2011/05/04/145663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XmlHelper 一个简单的 MSXml 包装类</title><link>http://www.cppblog.com/cntrump/archive/2011/05/03/145518.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Mon, 02 May 2011 16:31:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/05/03/145518.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/145518.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/05/03/145518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/145518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/145518.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下载 : http://www.cppblog.com/Files/cntrump/XmlHelper.rar&nbsp;&nbsp;1//&nbsp;module:XmlHelper.h&nbsp;&nbsp;2//&nbsp;author:cntrump&nbsp;&nbsp;3//&nbsp;create:2011-05-02&nbsp;&nbsp;4&nbsp;&nbsp;5#ifnd...&nbsp;&nbsp;<a href='http://www.cppblog.com/cntrump/archive/2011/05/03/145518.html'>阅读全文</a><img src ="http://www.cppblog.com/cntrump/aggbug/145518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-05-03 00:31 <a href="http://www.cppblog.com/cntrump/archive/2011/05/03/145518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在桌面上显示画图</title><link>http://www.cppblog.com/cntrump/archive/2011/04/25/144928.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Sun, 24 Apr 2011 17:34:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/04/25/144928.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/144928.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/04/25/144928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/144928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/144928.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;g_hDesktopDC&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GetDC(NULL);<br></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SetBkMode(g_hDesktopDC,&nbsp;TRANSPARENT);<br></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SetTextColor(g_hDesktopDC,&nbsp;RGB(</span><span style="color: #000000; ">196</span><span style="color: #000000; ">,</span><span style="color: #000000; ">196</span><span style="color: #000000; ">,</span><span style="color: #000000; ">196</span><span style="color: #000000; ">));<br></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;HFONT&nbsp;hFont&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(HFONT)SendMessage(GetDesktopWindow(),&nbsp;WM_GETFONT,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(g_hDesktopDC,&nbsp;hFont);<br></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;TextOut(g_hDesktopDC,&nbsp;</span><span style="color: #000000; ">50</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">50</span><span style="color: #000000; ">,&nbsp;_T(</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: #000000; ">6</span><span style="color: #000000; ">);<br></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(g_hDesktopDC);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;不删除获取的桌面DC，将无法显示文字</span><span  style="color: rgb(0, 128, 0); ">。</span></div><img src ="http://www.cppblog.com/cntrump/aggbug/144928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-04-25 01:34 <a href="http://www.cppblog.com/cntrump/archive/2011/04/25/144928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用系统的 SDK 创建多级目录</title><link>http://www.cppblog.com/cntrump/archive/2011/04/18/144425.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Sun, 17 Apr 2011 17:03:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/04/18/144425.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/144425.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/04/18/144425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/144425.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/144425.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<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"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">shlobj.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#pragma&nbsp;comment(lib,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shell32.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">BOOL&nbsp;CreateDir(LPCTSTR&nbsp;pszDirPath)<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_111_734_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_734_Open_Text.style.display='none'; Codehighlighter1_111_734_Closed_Image.style.display='inline'; Codehighlighter1_111_734_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_111_734_Closed_Image onclick="this.style.display='none'; Codehighlighter1_111_734_Closed_Text.style.display='none'; Codehighlighter1_111_734_Open_Image.style.display='inline'; Codehighlighter1_111_734_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_111_734_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_111_734_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#if</span><span style="COLOR: #000000">&nbsp;defined(UNICODE)&nbsp;||&nbsp;defined(_UNICODE)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;std::wstring&nbsp;strDirPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pszDirPath;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;strDirPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pszDirPath;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img 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;(strDirPath.empty())<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img 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;FALSE;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szPreFix[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\\\?\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img 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;(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;strDirPath.find(szPreFix))<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_367_424_Open_Image onclick="this.style.display='none'; Codehighlighter1_367_424_Open_Text.style.display='none'; Codehighlighter1_367_424_Closed_Image.style.display='inline'; Codehighlighter1_367_424_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_367_424_Closed_Image onclick="this.style.display='none'; Codehighlighter1_367_424_Closed_Text.style.display='none'; Codehighlighter1_367_424_Open_Image.style.display='inline'; Codehighlighter1_367_424_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_367_424_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_367_424_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDirPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;szPreFix;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDirPath&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;pszDirPath;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;INT&nbsp;nErrorCode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SHCreateDirectoryEx(NULL,&nbsp;strDirPath.c_str(),&nbsp;NULL);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(nErrorCode)<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id=Codehighlighter1_521_716_Open_Image onclick="this.style.display='none'; Codehighlighter1_521_716_Open_Text.style.display='none'; Codehighlighter1_521_716_Closed_Image.style.display='inline'; Codehighlighter1_521_716_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_521_716_Closed_Image onclick="this.style.display='none'; Codehighlighter1_521_716_Closed_Text.style.display='none'; Codehighlighter1_521_716_Open_Image.style.display='inline'; Codehighlighter1_521_716_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_521_716_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_521_716_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;ERROR_SUCCESS:<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img 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;TRUE;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;ERROR_ALREADY_EXISTS:<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;ERROR_FILE_EXISTS:<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img 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;(FILE_ATTRIBUTE_DIRECTORY&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;GetFileAttributes(strDirPath.c_str()))<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img 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;TRUE;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img 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">&nbsp;no&nbsp;default</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img 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;FALSE;<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])&nbsp;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id=Codehighlighter1_775_840_Open_Image onclick="this.style.display='none'; Codehighlighter1_775_840_Open_Text.style.display='none'; Codehighlighter1_775_840_Closed_Image.style.display='inline'; Codehighlighter1_775_840_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_775_840_Closed_Image onclick="this.style.display='none'; Codehighlighter1_775_840_Closed_Text.style.display='none'; Codehighlighter1_775_840_Open_Image.style.display='inline'; Codehighlighter1_775_840_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_775_840_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_775_840_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;CreateDir(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d:\\a\\b\\c\\d\\e\\f</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img 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: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<img src ="http://www.cppblog.com/cntrump/aggbug/144425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-04-18 01:03 <a href="http://www.cppblog.com/cntrump/archive/2011/04/18/144425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调用系统的文件复制，移动和删除功能</title><link>http://www.cppblog.com/cntrump/archive/2011/04/14/144168.html</link><dc:creator>cntrump</dc:creator><author>cntrump</author><pubDate>Wed, 13 Apr 2011 17:51:00 GMT</pubDate><guid>http://www.cppblog.com/cntrump/archive/2011/04/14/144168.html</guid><wfw:comment>http://www.cppblog.com/cntrump/comments/144168.html</wfw:comment><comments>http://www.cppblog.com/cntrump/archive/2011/04/14/144168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cntrump/comments/commentRss/144168.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cntrump/services/trackbacks/144168.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">stdafx.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;利用Shell复制多个文件，以｜分隔，末尾以两个｜结束<br></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;返回&nbsp;0&nbsp;表示全部复制成功<br></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;否则表示操作被中止</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">LONG&nbsp;ShellCopyFile(__in&nbsp;LPCTSTR&nbsp;pszSrc,&nbsp;__in&nbsp;LPCTSTR&nbsp;pszDest)<br></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;srclen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lstrlen(pszSrc)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;destlen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lstrlen(pszDest)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;pszSrcBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TCHAR[srclen];<br></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;pszDestBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TCHAR[destlen];<br></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(pszSrcBuffer,&nbsp;srclen</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(TCHAR));<br></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(pszDestBuffer,&nbsp;destlen</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(TCHAR));<br></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;lstrcpy(pszSrcBuffer,&nbsp;pszSrc);<br></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;lstrcpy(pszDestBuffer,&nbsp;pszDest);<br></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;p;<br></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #000000; ">&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; ">p&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_T(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">|</span><span style="color: #000000; ">'</span><span style="color: #000000; ">))<br></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">p;<br></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszDestBuffer;<br></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">&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; ">p&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_T(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">|</span><span style="color: #000000; ">'</span><span style="color: #000000; ">))<br></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">p;<br></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFILEOPSTRUCT&nbsp;shFileOperation;<br></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(shFileOperation));<br></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.fFlags&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FOF_ALLOWUNDO</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_MULTIDESTFILES</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_NOCONFIRMATION;<br></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.wFunc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FO_COPY;<br></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.pFrom&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.pTo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszDestBuffer;<br></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFileOperation(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation);<br></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pszDestBuffer;<br></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;shFileOperation.fAnyOperationsAborted;<br></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; ">}<br></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;利用Shell删除文件(到&nbsp;回收站)<br></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;删除多个文件用｜分隔，末尾以两个｜结束<br></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;返回值为&nbsp;0&nbsp;表示所有文件删除成功</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">LONG&nbsp;ShellDeleteFile(__in&nbsp;LPCTSTR&nbsp;pszSrc)<br></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lstrlen(pszSrc)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;pszSrcBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TCHAR[len];<br></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(pszSrcBuffer,&nbsp;len</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(TCHAR));<br></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;lstrcpy(pszSrcBuffer,&nbsp;pszSrc);<br></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&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; ">p&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_T(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">|</span><span style="color: #000000; ">'</span><span style="color: #000000; ">))<br></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">p;<br></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFILEOPSTRUCT&nbsp;shFileOperation;<br></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(shFileOperation));<br></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.wFunc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FO_DELETE;<br></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.fFlags&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FOF_MULTIDESTFILES</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_ALLOWUNDO</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_NOCONFIRMATION;<br></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.pFrom&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFileOperation(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation);<br></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;shFileOperation.fAnyOperationsAborted;<br></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #000000; ">}<br></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;利用Shell移动文件或文件夹<br></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;返回&nbsp;0&nbsp;表示所有文件或文件夹操作成功<br></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;多个文件用｜分隔，最后以两个｜结束</span><span style="color: #008000; "><br></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">LONG&nbsp;ShellMoveFile(__in&nbsp;LPCTSTR&nbsp;pszSrc,&nbsp;__in&nbsp;LPCTSTR&nbsp;pszDest)<br></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;srclen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lstrlen(pszSrc)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;destlen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lstrlen(pszDest)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;pszSrcBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TCHAR[srclen];<br></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;pszDestBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TCHAR[destlen];<br></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(pszSrcBuffer,&nbsp;srclen</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(TCHAR));<br></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(pszDestBuffer,&nbsp;destlen</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(TCHAR));<br></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;lstrcpy(pszSrcBuffer,&nbsp;pszSrc);<br></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;lstrcpy(pszDestBuffer,&nbsp;pszDest);<br></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;LPTSTR&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; ">&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; ">p&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_T(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">|</span><span style="color: #000000; ">'</span><span style="color: #000000; ">))<br></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">p;<br></span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszDestBuffer;<br></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br></span><span style="color: #008080; ">110</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #000000; ">&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; ">p&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_T(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">|</span><span style="color: #000000; ">'</span><span style="color: #000000; ">))<br></span><span style="color: #008080; ">112</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">p;<br></span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFILEOPSTRUCT&nbsp;shFileOperation;<br></span><span style="color: #008080; ">118</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(shFileOperation));<br></span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.wFunc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FO_MOVE;<br></span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.fFlags&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FOF_ALLOWUNDO</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_MULTIDESTFILES</span><span style="color: #000000; ">|</span><span style="color: #000000; ">FOF_NOCONFIRMATION;<br></span><span style="color: #008080; ">121</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.pFrom&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszSrcBuffer;<br></span><span style="color: #008080; ">122</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;shFileOperation.pTo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;pszDestBuffer;<br></span><span style="color: #008080; ">123</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;SHFileOperation(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">shFileOperation);<br></span><span style="color: #008080; ">124</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">125</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;shFileOperation.fAnyOperationsAborted;<br></span><span style="color: #008080; ">126</span>&nbsp;<span style="color: #000000; ">}<br></span><span style="color: #008080; ">127</span>&nbsp;<span style="color: #000000; "><br></span><span style="color: #008080; ">128</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_tmain(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br></span><span style="color: #008080; ">129</span>&nbsp;<span style="color: #000000; ">{<br></span><span style="color: #008080; ">130</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;ShellMoveFile(_T("D:\\*.rar"),&nbsp;_T("E:\\"));<br></span><span style="color: #008080; ">131</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;ShellDeleteFile(_T("D:\\eHomeNet.rar"));<br></span><span style="color: #008080; ">132</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;ShellCopyFile(L"D:\\video\\AV\\*.*",&nbsp;L"E:\\");</span><span style="color: #008000; "><br></span><span style="color: #008080; ">133</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br></span><span style="color: #008080; ">134</span>&nbsp;<span style="color: #000000; ">}<br></span><span style="color: #008080; ">135</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/cntrump/aggbug/144168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cntrump/" target="_blank">cntrump</a> 2011-04-14 01:51 <a href="http://www.cppblog.com/cntrump/archive/2011/04/14/144168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>