﻿<?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++博客-清风竹林-随笔分类-minitools</title><link>http://www.cppblog.com/xmli/category/9139.html</link><description>ぷ雪飘绛梅映残红 &lt;br&gt;
&amp;nbsp;&amp;nbsp; ぷ花舞霜飞映苍松&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----- Do more,suffer less</description><language>zh-cn</language><lastBuildDate>Thu, 04 Mar 2010 13:28:42 GMT</lastBuildDate><pubDate>Thu, 04 Mar 2010 13:28:42 GMT</pubDate><ttl>60</ttl><item><title>如何通过程序屏蔽windows粘滞键之热键</title><link>http://www.cppblog.com/xmli/archive/2010/03/04/108880.html</link><dc:creator>李现民</dc:creator><author>李现民</author><pubDate>Thu, 04 Mar 2010 05:36:00 GMT</pubDate><guid>http://www.cppblog.com/xmli/archive/2010/03/04/108880.html</guid><wfw:comment>http://www.cppblog.com/xmli/comments/108880.html</wfw:comment><comments>http://www.cppblog.com/xmli/archive/2010/03/04/108880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmli/comments/commentRss/108880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmli/services/trackbacks/108880.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近在游戏开发中遇到这样的需求：玩家需要不停的连击shift键。<br>&nbsp;&nbsp;&nbsp; 大家都知道，在windows下默认连击shift键到5次会弹出粘滞键设置的对话框，如下图所示。<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/xmli/stickykeys.JPG" width=410 height=160><br><br>&nbsp;&nbsp;&nbsp; 在游戏中必须屏蔽windows对粘滞键热键的反应，否则游戏体验将会非常差。在网上查找一段时间后发现，关于如何通过程序屏蔽粘滞键热键的中文资料非常少，大多数的答案都是打开&#8220;控制面板&#8221;，然后找到&#8220;辅助功能选项&#8221;条目云云，这显示不是程序员所需要的解决手法。<br>&nbsp;&nbsp;&nbsp; 经过多方查找，问题最终得以解决。下面列表代码，以飨未来者，程序VC6.0+XP系统下运行通过。<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;activate&nbsp;or&nbsp;inactivate&nbsp;sticky&nbsp;keys&nbsp;hot&nbsp;key&nbsp;(pop&nbsp;up&nbsp;&nbsp;a&nbsp;set&nbsp;up&nbsp;dialog&nbsp;after&nbsp;continually&nbsp;pressed&nbsp;shift&nbsp;5&nbsp;times)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;ActivateStickyHotkey(</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;isActivate,&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pIsPreviouslyActivate</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;fetch&nbsp;current&nbsp;sticky&nbsp;keys&nbsp;state</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STICKYKEYS&nbsp;skf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;DWORD&nbsp;datasize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(STICKYKEYS);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skf.cbSize&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">=</span><span style="COLOR: #000000">&nbsp;datasize;<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">SystemParametersInfo(SPI_GETSTICKYKEYS,&nbsp;datasize,&nbsp;(LPVOID)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">skf,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&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;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;isPreviouslyActivate&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(skf.dwFlags&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;SKF_HOTKEYACTIVE)&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;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;store&nbsp;old&nbsp;sticky&nbsp;keys&nbsp;state</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;(NULL</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;pIsPreviouslyActivate)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIsPreviouslyActivate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;isPreviouslyActivate;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;return&nbsp;true&nbsp;if&nbsp;no&nbsp;need&nbsp;to&nbsp;change&nbsp;state</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;(isActivate</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">isPreviouslyActivate)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&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;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;change&nbsp;sticky&nbsp;keys&nbsp;state</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skf.dwFlags&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">=</span><span style="COLOR: #000000">&nbsp;isActivate</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;(skf.dwFlags&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;SKF_HOTKEYACTIVE)&nbsp;:&nbsp;(skf.dwFlags&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">SKF_HOTKEYACTIVE));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;isSuccess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;TRUE</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">SystemParametersInfo(SPI_SETSTICKYKEYS,&nbsp;datasize,&nbsp;(LPVOID)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">skf,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;isSuccess;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br></span></div>
<br>参考资料：<br>1, <a href="http://msdn.microsoft.com/en-us/library/aa925903.aspx">http://msdn.microsoft.com/en-us/library/aa925903.aspx</a>&nbsp;<br>2, <a href="http://stackoverflow.com/questions/734618/disabling-accessibility-shortcuts-in-net-application">http://stackoverflow.com/questions/734618/disabling-accessibility-shortcuts-in-net-application</a>
<img src ="http://www.cppblog.com/xmli/aggbug/108880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmli/" target="_blank">李现民</a> 2010-03-04 13:36 <a href="http://www.cppblog.com/xmli/archive/2010/03/04/108880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2009年终奖个税计算器 python</title><link>http://www.cppblog.com/xmli/archive/2010/02/11/107713.html</link><dc:creator>李现民</dc:creator><author>李现民</author><pubDate>Thu, 11 Feb 2010 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/xmli/archive/2010/02/11/107713.html</guid><wfw:comment>http://www.cppblog.com/xmli/comments/107713.html</wfw:comment><comments>http://www.cppblog.com/xmli/archive/2010/02/11/107713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmli/comments/commentRss/107713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmli/services/trackbacks/107713.html</trackback:ping><description><![CDATA[&nbsp;看看你的年终奖发的是否合理：<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">def</span><span style="COLOR: #000000">&nbsp;getTaxRatio(taxSalary):<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;ratiolist&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">,&nbsp;0),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0.10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">5000</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0.15</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">125</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">20000</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">0.20</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">375</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">40000</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">0.25</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1375</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">60000</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">0.30</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">3375</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">80000</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">0.35</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">6375</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">100000</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.40</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10375</span><span style="COLOR: #000000">),<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #000000">9999999</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.45</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">15375</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;taxSalary</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;ratio&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;ratiolist:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;taxSalary</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;ratio[0]:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(ratio[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;ratio[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(0,&nbsp;0)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">def</span><span style="COLOR: #000000">&nbsp;calcYearAwardTax(yearAward):<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;monthAward&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;yearAward&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;taxRatio,&nbsp;taxAdjust&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getTaxRatio(monthAward)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;tax&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">=</span><span style="COLOR: #000000">&nbsp;yearAward&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;taxRatio&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;taxAdjust<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;resultAward&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;yearAward&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;tax<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;retcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(yearAward,&nbsp;resultAward,&nbsp;tax,&nbsp;taxRatio,&nbsp;taxAdjust)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">print('yearAward=&nbsp;%d,&nbsp;resultAward=&nbsp;%f,&nbsp;tax=&nbsp;%f,&nbsp;taxRatio=&nbsp;%f,&nbsp;taxAdjust=&nbsp;%d'%retcode)</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;retcode<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">#</span><span style="COLOR: #008000">###############################################################################</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;sys<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;os<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">argNum&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;len(sys.argv)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;argNum&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;scriptName&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;os.path.basename(</span><span style="COLOR: #800080">__file__</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">usage1:&nbsp;&nbsp;&nbsp;&nbsp;%s&nbsp;awardUpperBound</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">scriptName)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">usage2:&nbsp;&nbsp;&nbsp;&nbsp;%s&nbsp;awardLowerBound&nbsp;awardUpperBound</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">scriptName)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">-----------------------------------------------------------------------</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">awardLowerBound,&nbsp;awardUpperBound&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;0,&nbsp;0<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;argNum&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;awardUpperBound&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">=</span><span style="COLOR: #000000">&nbsp;int(sys.argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">elif</span><span style="COLOR: #000000">&nbsp;argNum&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;awardLowerBound,&nbsp;awardUpperBound&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;int(sys.argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]),&nbsp;int(sys.argv[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;awardLowerBound</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;awardUpperBound:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(awardLowerBound,&nbsp;awardUpperBound)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">perfectAward,&nbsp;perfectGain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;0,&nbsp;0<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;award&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;range(awardLowerBound,&nbsp;awardUpperBound&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">):<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;retcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;calcYearAwardTax(award)&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;len(retcode)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;retcode[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;perfectGain:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perfectAward&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;retcode[0]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perfectGain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;retcode[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;award</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;awardUpperBound:<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">upperBoundAward=&nbsp;%d,\tgain=&nbsp;%f,\ttax=&nbsp;%f</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(retcode[0],&nbsp;retcode[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;retcode[0]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;retcode[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">print</span><span style="COLOR: #000000">(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">perfectAward=&nbsp;%d,\tgain=&nbsp;%f,\ttax=&nbsp;%f</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(perfectAward,&nbsp;perfectGain,&nbsp;perfectAward&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;perfectGain))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<br>保存成文件 awardTax.py 然后在命令行调用即可。<br>比如你年终奖发了25000，则：<br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/xmli/yearAwardTax.JPG" width=525 height=77><br>ok, 那么你亏了，你比拿24000的同志多交税3625-2375= 1250元，最终收益还比他少21625-21375= 250元。<br>这个数值段最佳的年终奖数额为24000，因此还是向老板申请少给你发点年终奖吧。
<img src ="http://www.cppblog.com/xmli/aggbug/107713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmli/" target="_blank">李现民</a> 2010-02-11 15:32 <a href="http://www.cppblog.com/xmli/archive/2010/02/11/107713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目录文件比较工具  python</title><link>http://www.cppblog.com/xmli/archive/2009/05/04/81844.html</link><dc:creator>李现民</dc:creator><author>李现民</author><pubDate>Mon, 04 May 2009 10:15:00 GMT</pubDate><guid>http://www.cppblog.com/xmli/archive/2009/05/04/81844.html</guid><wfw:comment>http://www.cppblog.com/xmli/comments/81844.html</wfw:comment><comments>http://www.cppblog.com/xmli/archive/2009/05/04/81844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmli/comments/commentRss/81844.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmli/services/trackbacks/81844.html</trackback:ping><description><![CDATA[&nbsp; 用于目录文件的比较，如果有文件的md5值不一样， 则copy覆盖。由于写的很久匆忙，没有加注释，但好在代码很少，如下：<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;">import</span><span style="color: #000000;">&nbsp;sys,&nbsp;os,&nbsp;shutil<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;hashlib<br><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;FileHash(object):<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__hash_file</span><span style="color: #000000;">(self,&nbsp;filepath):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;os.path.exists(filepath):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;hashlib.md5()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(filepath,&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">rb</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;as&nbsp;fin:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;True:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fin.read(</span><span style="color: #000000;">8096</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;data:<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;</span><span style="color: #0000ff;">break</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.update(data)<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;m.hexdigest()<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;compare_file(self,&nbsp;srcfile,&nbsp;destfile):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src_md5</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.</span><span style="color: #800080;">__hash_file</span><span style="color: #000000;">(srcfile)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest_md5</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.</span><span style="color: #800080;">__hash_file</span><span style="color: #000000;">(destfile)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isOk</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(src_md5</span><span style="color: #000000;">==</span><span style="color: #000000;">dest_md5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;isOk<br><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">__main__</span><span style="color: #800000;">'</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;file_hash</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FileHash()<br>&nbsp;&nbsp;&nbsp;&nbsp;srcdir&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">r</span><span style="color: #800000;">'</span><span style="color: #800000;">E:\game</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;destdir&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">r</span><span style="color: #800000;">'</span><span style="color: #800000;">C:\game</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;root,&nbsp;dirs,&nbsp;files&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;os.walk(srcdir):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;filename&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;files:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src_file_path&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.join(root,&nbsp;filename)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest_file_path&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.join(destdir,&nbsp;src_file_path[len(srcdir)</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">:])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur_dest_dir</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;os.path.split(dest_file_path)[0]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;os.path.exists(cur_dest_dir):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutil.copytree(root,&nbsp;cur_dest_dir)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #800000;">'</span><span style="color: #800000;">created&nbsp;dir:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%s</span><span style="color: #800000;">'</span><span style="color: #000000;">%</span><span style="color: #000000;">cur_dest_dir)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">elif</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;os.path.exists(dest_file_path)&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">not</span><span style="color: #000000;">&nbsp;file_hash.compare_file(src_file_path,&nbsp;dest_file_path):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutil.copyfile(src_file_path,&nbsp;dest_file_path)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #800000;">'</span><span style="color: #800000;">created&nbsp;file:&nbsp;&nbsp;&nbsp;&nbsp;%s</span><span style="color: #800000;">'</span><span style="color: #000000;">%</span><span style="color: #000000;">dest_file_path)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br><br><br><br><img src ="http://www.cppblog.com/xmli/aggbug/81844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmli/" target="_blank">李现民</a> 2009-05-04 18:15 <a href="http://www.cppblog.com/xmli/archive/2009/05/04/81844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络校时　python</title><link>http://www.cppblog.com/xmli/archive/2008/12/16/69582.html</link><dc:creator>李现民</dc:creator><author>李现民</author><pubDate>Tue, 16 Dec 2008 08:53:00 GMT</pubDate><guid>http://www.cppblog.com/xmli/archive/2008/12/16/69582.html</guid><wfw:comment>http://www.cppblog.com/xmli/comments/69582.html</wfw:comment><comments>http://www.cppblog.com/xmli/archive/2008/12/16/69582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmli/comments/commentRss/69582.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmli/services/trackbacks/69582.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 由于手动调整和计算机时钟精度的问题，我的windows时间经常需要校正。以前用c#写过一个ntp的时间校正工具，为此从网上找了好多ntp server的ip地址，但最终发现渐渐的它们都不能用了。后来慢慢地感觉到自己对系统时钟的要求也没那么精确，于是开始打web server的主意：通常web server，特别是一些比较著名的网站的server总有一些是在线的。<br>　　代码似乎也不是很复杂，基于python 3.0---<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;">import</span><span style="color: #000000;">&nbsp;time<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;urllib.request<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;urllib.parse<br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;ctypes<br><br><br>SetSystemTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ctypes.windll.kernel32.SetSystemTime<br>GetSystemTime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ctypes.windll.kernel32.GetSystemTime<br><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;SYSTEMTIME(ctypes.Structure):<br>&nbsp;&nbsp;&nbsp;&nbsp;c_ushort</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ctypes.c_ushort<br>&nbsp;&nbsp;&nbsp;&nbsp;_fields_&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wYear</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wMonth</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wDayOfWeek</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wDay</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wHour</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wMinute</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wSecond</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #800000;">'</span><span style="color: #800000;">wMilliseconds</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;c_ushort),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__str__</span><span style="color: #000000;">(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">%4d%02d%02d%02d%02d%02d.%03d</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(self.wYear,self.wMonth,self.wDay,self.wHour,self.wMinute,self.wSecond,self.wMilliseconds)<br><br></span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;updateSystemTime():<br>&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">http://www.baidu.com</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;urllib.request.urlopen(url)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;response.info()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date</span><span style="color: #000000;">=</span><span style="color: #000000;">header[</span><span style="color: #800000;">'</span><span style="color: #800000;">Date</span><span style="color: #800000;">'</span><span style="color: #000000;">]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gmt</span><span style="color: #000000;">=</span><span style="color: #000000;">time.strptime(date[</span><span style="color: #000000;">5</span><span style="color: #000000;">:</span><span style="color: #000000;">25</span><span style="color: #000000;">],&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">%d&nbsp;%b&nbsp;%Y&nbsp;%H:%M:%S</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st</span><span style="color: #000000;">=</span><span style="color: #000000;">SYSTEMTIME(gmt.tm_year,gmt.tm_mon,gmt.tm_wday,gmt.tm_mday,gmt.tm_hour,gmt.tm_min,gmt.tm_sec,0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetSystemTime(ctypes.byref(st))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #800000;">'</span><span style="color: #800000;">网络校时成功！</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">except</span><span style="color: #000000;">&nbsp;Exception&nbsp;as&nbsp;ex:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(ex)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #800000;">'</span><span style="color: #800000;">网络校时失败</span><span style="color: #800000;">'</span><span style="color: #000000;">)<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;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;True<br></span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;printCurTime():<br>&nbsp;&nbsp;&nbsp;&nbsp;now</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;time.localtime(time.time())<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">(</span><span style="color: #800000;">'</span><span style="color: #800000;">当前系统时间:</span><span style="color: #800000;">'</span><span style="color: #000000;">,&nbsp;time.strftime(</span><span style="color: #800000;">"</span><span style="color: #800000;">%Y-%m-%d&nbsp;%H:%M:%S</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;now))<br>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">__main__</span><span style="color: #800000;">'</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;printCurTime()<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;updateSystemTime():<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printCurTime()<br></span></div>
&nbsp; 保存文件名为updateTime.py，放入某个系统目录，在命令行中测试如下：<br><br>C:\&gt;updatetime<br>当前系统时间: 2009-12-16 16:51:11<br>网络校时成功！<br>当前系统时间: 2008-12-16 16:51:12<br><br>C:\&gt;<br><br>　之前，我故意把时间调整到了2009年。<br><br>　　<br><br><img src ="http://www.cppblog.com/xmli/aggbug/69582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmli/" target="_blank">李现民</a> 2008-12-16 16:53 <a href="http://www.cppblog.com/xmli/archive/2008/12/16/69582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>