﻿<?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++博客-Life &amp; Code-随笔分类-Win32</title><link>http://www.cppblog.com/lovelypig/category/1219.html</link><description>代码是咒语,我是魔法师</description><language>zh-cn</language><lastBuildDate>Mon, 27 Oct 2008 12:10:19 GMT</lastBuildDate><pubDate>Mon, 27 Oct 2008 12:10:19 GMT</pubDate><ttl>60</ttl><item><title>100行代码去除QQ广告</title><link>http://www.cppblog.com/lovelypig/archive/2008/10/26/65130.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Sun, 26 Oct 2008 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2008/10/26/65130.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/65130.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2008/10/26/65130.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/65130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/65130.html</trackback:ping><description><![CDATA[<p>为什么写这个:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; 1，像我这么爱干净的人，当然不能容忍和MM聊天的时候，看到一个内衣广告在上面一闪一闪，这不引诱老纳么；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2，为什么不用其它外挂？珊瑚虫已S，再没用过其它。现有的外挂实现了一些我不想要的功能，看IP也没必要，聊天的都是熟人。另外，不知道它做了些什么事情；<br>&nbsp;&nbsp;&nbsp;&nbsp; 3，打发这个无聊的周末。<br><br>怎样实现：<br>&nbsp;&nbsp;&nbsp;&nbsp; 1，万能的HOOK<br><br>现在用到的是全局的SHELL HOOK，Hook的是窗口创建完成的消息；</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;g_hShellHook&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SetWindowsHookEx(&nbsp;WH_SHELL,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(HOOKPROC)ShellHook,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_hInstance,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&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">);</span></div>
<p>&nbsp;ShellHook 的实现如下:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;LRESULT&nbsp;CALLBACK&nbsp;ShellHook(UINT&nbsp;nCode,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br><img id=Codehighlighter1_76_342_Open_Image onclick="this.style.display='none'; Codehighlighter1_76_342_Open_Text.style.display='none'; Codehighlighter1_76_342_Closed_Image.style.display='inline'; Codehighlighter1_76_342_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_76_342_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_76_342_Closed_Text.style.display='none'; Codehighlighter1_76_342_Open_Image.style.display='inline'; Codehighlighter1_76_342_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_76_342_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_76_342_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(nCode&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">goto</span><span style="COLOR: #000000">&nbsp;CallOrg;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;HSHELL_WINDOWCREATED&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;nCode&nbsp;)<br><img id=Codehighlighter1_149_267_Open_Image style="DISPLAY: inline" onclick="this.style.display='none'; Codehighlighter1_149_267_Open_Text.style.display='none'; Codehighlighter1_149_267_Closed_Image.style.display='inline'; Codehighlighter1_149_267_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_149_267_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_267_Closed_Text.style.display='none'; Codehighlighter1_149_267_Open_Image.style.display='inline'; Codehighlighter1_149_267_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_149_267_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_149_267_Open_Text style="DISPLAY: inline"><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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">isQQWnd(&nbsp;(HWND)wParam&nbsp;)&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">goto</span><span style="COLOR: #000000">&nbsp;CallOrg;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumChildWindows(&nbsp;(HWND)wParam,&nbsp;EnumChildProc,&nbsp;(LPARAM)</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>CallOrg:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;CallNextHookEx(&nbsp;g_hShellHook,&nbsp;nCode,&nbsp;wParam,&nbsp;lParam);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>在收到窗口创建后的消息时，就判断这个窗口是不是QQ的,这里用到了 GetWindowThreadProcessId ，它返回窗口相关的进程ID</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;isQQWnd(HWND&nbsp;hWnd)<br><img id=Codehighlighter1_24_284_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_284_Open_Text.style.display='none'; Codehighlighter1_24_284_Closed_Image.style.display='inline'; Codehighlighter1_24_284_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_284_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_284_Closed_Text.style.display='none'; Codehighlighter1_24_284_Open_Image.style.display='inline'; Codehighlighter1_24_284_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_24_284_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_24_284_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;g_pContext&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;g_dwQQProcessID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_dwQQProcessID&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetQQProcessID();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwWndProcessID;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;GetWindowThreadProcessId(&nbsp;hWnd,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwWndProcessID&nbsp;)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;FALSE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;dwWndProcessID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;g_dwQQProcessID;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>然后枚举它的子窗口，看它的子窗口有没有广告控件，有的话就给子控件发送个WM_CLOSE的消息.</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BOOL&nbsp;CALLBACK&nbsp;EnumChildProc(HWND&nbsp;hwnd,&nbsp;LPARAM&nbsp;lParam&nbsp;&nbsp;)<br><img id=Codehighlighter1_56_339_Open_Image onclick="this.style.display='none'; Codehighlighter1_56_339_Open_Text.style.display='none'; Codehighlighter1_56_339_Closed_Image.style.display='inline'; Codehighlighter1_56_339_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_56_339_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_339_Closed_Text.style.display='none'; Codehighlighter1_56_339_Open_Image.style.display='inline'; Codehighlighter1_56_339_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_56_339_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_56_339_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwID&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetDlgCtrlID(&nbsp;hwnd&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;dwID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x3e9</span><span style="COLOR: #000000">&nbsp;)<br><img id=Codehighlighter1_116_251_Open_Image onclick="this.style.display='none'; Codehighlighter1_116_251_Open_Text.style.display='none'; Codehighlighter1_116_251_Closed_Image.style.display='inline'; Codehighlighter1_116_251_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_116_251_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_251_Closed_Text.style.display='none'; Codehighlighter1_116_251_Open_Image.style.display='inline'; Codehighlighter1_116_251_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_116_251_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_116_251_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hPrarent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetParent(&nbsp;hwnd&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(hwnd,&nbsp;WM_CLOSE,&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;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(hPrarent,&nbsp;WM_PAINT,&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;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&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;dwID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x643f</span><span style="COLOR: #000000">&nbsp;)<br><img id=Codehighlighter1_281_322_Open_Image onclick="this.style.display='none'; Codehighlighter1_281_322_Open_Text.style.display='none'; Codehighlighter1_281_322_Closed_Image.style.display='inline'; Codehighlighter1_281_322_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_281_322_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_281_322_Closed_Text.style.display='none'; Codehighlighter1_281_322_Open_Image.style.display='inline'; Codehighlighter1_281_322_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_281_322_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_281_322_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(hwnd,&nbsp;WM_CLOSE,&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;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>其中的两个硬编码是用 spy++ 分析出来的，可能因为版本的不同，会有差异。所以我不确定能不能关闭其它版本的QQ广告。我使用的版本是QQ2008贺岁版。<br><br>--------------------------------------------------------------------------<br><br>后记:<br>&nbsp;&nbsp;&nbsp;尽管实现的技术很简单,但还是花了我大半天的时间.&nbsp;写完之后觉得枚举子窗口的方式太低效, 或者还有其它高效点的方式。另外还有全局钩子,可能没有必要。如果下午周末持续无聊，我会尝试改进一下。<br><br>&nbsp;&nbsp;&nbsp;QQ的聊天对话框很简单,不像MSN的对话框,铁板一块,用spy++啥都看不到.但是可以用 AccExplorer 分析.想在MSN的对话框上加点东西进去，实现起来很困难。对这方面有研究的同学不妨与我讨论一下实现，一起学习、进步。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;代码的行数没数，有效代码估计也就百把行吧，呵呵，我承认我是标题党。<br><br>附:&nbsp;&nbsp;&nbsp;<a href="http://www.cppblog.com/Files/lovelypig/QQWndHook.rar">源代码 + bin</a></p>
<img src ="http://www.cppblog.com/lovelypig/aggbug/65130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2008-10-26 20:18 <a href="http://www.cppblog.com/lovelypig/archive/2008/10/26/65130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜索内存取得QQ号码</title><link>http://www.cppblog.com/lovelypig/archive/2006/12/13/16347.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Tue, 12 Dec 2006 16:36:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/12/13/16347.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/16347.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/12/13/16347.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/16347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/16347.html</trackback:ping><description><![CDATA[
		<p>这样的帖子,不知道可不可以放到首页..如果不行,麻烦管理员清理. 谢谢.</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">HANDLE GetQQProcess();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">bool</span>
				<span style="COLOR: #000000"> SeachQQNumber(HANDLE _hProcess,</span>
				<span style="COLOR: #0000ff">string</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">strQQ);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> _tmain(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> argc, _TCHAR</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000"> argv[])<br /><img id="Codehighlighter1_112_295_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_295_Open_Text.style.display='none'; Codehighlighter1_112_295_Closed_Image.style.display='inline'; Codehighlighter1_112_295_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_112_295_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_295_Closed_Text.style.display='none'; Codehighlighter1_112_295_Open_Image.style.display='inline'; Codehighlighter1_112_295_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_112_295_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_112_295_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    HANDLE hProces </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> GetQQProcess() ;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(hProces</span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> NULL)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        cout </span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">No run QQ!</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">string</span>
						<span style="COLOR: #000000"> strQQ;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    SeachQQNumber(hProces,strQQ);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    cout </span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">strQQ</span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    system(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">pause</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.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.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">bool</span>
				<span style="COLOR: #000000"> SeachQQNumber(HANDLE _hProcess, </span>
				<span style="COLOR: #0000ff">string</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">strQQ)<br /><img id="Codehighlighter1_350_1592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_350_1592_Open_Text.style.display='none'; Codehighlighter1_350_1592_Closed_Image.style.display='inline'; Codehighlighter1_350_1592_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_350_1592_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_350_1592_Closed_Text.style.display='none'; Codehighlighter1_350_1592_Open_Image.style.display='inline'; Codehighlighter1_350_1592_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_350_1592_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_350_1592_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    SuspendThread(_hProcess);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    DWORD dwBaseAddress; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    MEMORY_BASIC_INFORMATION mbi;<br /><img id="Codehighlighter1_462_464_Open_Image" onclick="this.style.display='none'; Codehighlighter1_462_464_Open_Text.style.display='none'; Codehighlighter1_462_464_Closed_Image.style.display='inline'; Codehighlighter1_462_464_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_462_464_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_462_464_Closed_Text.style.display='none'; Codehighlighter1_462_464_Open_Image.style.display='inline'; Codehighlighter1_462_464_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">  process_mem[</span>
						<span style="COLOR: #000000">4096</span>
						<span style="COLOR: #000000">] </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span id="Codehighlighter1_462_464_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_462_464_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    DWORD number_of_bytes_read </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    SYSTEM_INFO si; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    GetSystemInfo(</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">si);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    dwBaseAddress </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> (DWORD)si.lpMinimumApplicationAddress; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000">(dwBaseAddress </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> (DWORD)si.lpMaximumApplicationAddress) <br /><img id="Codehighlighter1_660_1549_Open_Image" onclick="this.style.display='none'; Codehighlighter1_660_1549_Open_Text.style.display='none'; Codehighlighter1_660_1549_Closed_Image.style.display='inline'; Codehighlighter1_660_1549_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_660_1549_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_660_1549_Closed_Text.style.display='none'; Codehighlighter1_660_1549_Open_Image.style.display='inline'; Codehighlighter1_660_1549_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_660_1549_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_660_1549_Open_Text">
								<span style="COLOR: #000000">{ <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        mbi.BaseAddress </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (LPVOID)dwBaseAddress; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        VirtualQueryEx(_hProcess, (LPVOID)dwBaseAddress, </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">mbi, </span>
								<span style="COLOR: #0000ff">sizeof</span>
								<span style="COLOR: #000000">(mbi));<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        dwBaseAddress </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (DWORD)mbi.BaseAddress </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> mbi.RegionSize; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(mbi.State </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> MEM_COMMIT </span>
								<span style="COLOR: #000000">||</span>
								<span style="COLOR: #000000"> mbi.AllocationProtect </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> PAGE_READWRITE) </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">跳过未分配或不可读写的区域 </span>
								<span style="COLOR: #008000">
										<br />
										<img id="Codehighlighter1_930_949_Open_Image" onclick="this.style.display='none'; Codehighlighter1_930_949_Open_Text.style.display='none'; Codehighlighter1_930_949_Closed_Image.style.display='inline'; Codehighlighter1_930_949_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_930_949_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_930_949_Closed_Text.style.display='none'; Codehighlighter1_930_949_Open_Image.style.display='inline'; Codehighlighter1_930_949_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span id="Codehighlighter1_930_949_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_930_949_Open_Text">
										<span style="COLOR: #000000">{ <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">continue</span>
										<span style="COLOR: #000000">; <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">搜索</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">(DWORD i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (DWORD)mbi.BaseAddress; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> dwBaseAddress; i</span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000">4096</span>
								<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1032_1546_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1032_1546_Open_Text.style.display='none'; Codehighlighter1_1032_1546_Closed_Image.style.display='inline'; Codehighlighter1_1032_1546_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1032_1546_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1032_1546_Closed_Text.style.display='none'; Codehighlighter1_1032_1546_Open_Image.style.display='inline'; Codehighlighter1_1032_1546_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span id="Codehighlighter1_1032_1546_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_1032_1546_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000">(</span>
										<span style="COLOR: #000000">!</span>
										<span style="COLOR: #000000">ReadProcessMemory(_hProcess,LPCVOID(i),process_mem,</span>
										<span style="COLOR: #000000">4096</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">&amp;</span>
										<span style="COLOR: #000000">number_of_bytes_read))<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
										<span style="COLOR: #0000ff">break</span>
										<span style="COLOR: #000000">;            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">for</span>
										<span style="COLOR: #000000">(</span>
										<span style="COLOR: #0000ff">int</span>
										<span style="COLOR: #000000"> j</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">;j</span>
										<span style="COLOR: #000000">&lt;</span>
										<span style="COLOR: #000000">4096</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">-</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">9</span>
										<span style="COLOR: #000000">;j</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1169_1542_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1169_1542_Open_Text.style.display='none'; Codehighlighter1_1169_1542_Closed_Image.style.display='inline'; Codehighlighter1_1169_1542_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1169_1542_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1169_1542_Closed_Text.style.display='none'; Codehighlighter1_1169_1542_Open_Image.style.display='inline'; Codehighlighter1_1169_1542_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
										<span id="Codehighlighter1_1169_1542_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_1169_1542_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
												<span style="COLOR: #0000ff">if</span>
												<span style="COLOR: #000000">(</span>
												<span style="COLOR: #000000">!</span>
												<span style="COLOR: #000000">memcmp(</span>
												<span style="COLOR: #000000">&amp;</span>
												<span style="COLOR: #000000">process_mem[j],</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">\\MsgEx.db</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">,</span>
												<span style="COLOR: #000000">9</span>
												<span style="COLOR: #000000">) )<br /><img id="Codehighlighter1_1226_1537_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1226_1537_Open_Text.style.display='none'; Codehighlighter1_1226_1537_Closed_Image.style.display='inline'; Codehighlighter1_1226_1537_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1226_1537_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1226_1537_Closed_Text.style.display='none'; Codehighlighter1_1226_1537_Open_Image.style.display='inline'; Codehighlighter1_1226_1537_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
												<span id="Codehighlighter1_1226_1537_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_1226_1537_Open_Text">
														<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                    </span>
														<span style="COLOR: #008000">//</span>
														<span style="COLOR: #008000">printf("begin\n");</span>
														<span style="COLOR: #008000">
																<br />
																<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
														</span>
														<span style="COLOR: #000000">                    </span>
														<span style="COLOR: #0000ff">for</span>
														<span style="COLOR: #000000">(</span>
														<span style="COLOR: #0000ff">int</span>
														<span style="COLOR: #000000"> k</span>
														<span style="COLOR: #000000">=</span>
														<span style="COLOR: #000000">j</span>
														<span style="COLOR: #000000">-</span>
														<span style="COLOR: #000000">1</span>
														<span style="COLOR: #000000">; k </span>
														<span style="COLOR: #000000">&gt;</span>
														<span style="COLOR: #000000"> j</span>
														<span style="COLOR: #000000">-</span>
														<span style="COLOR: #000000">12</span>
														<span style="COLOR: #000000">; k</span>
														<span style="COLOR: #000000">--</span>
														<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1295_1440_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1295_1440_Open_Text.style.display='none'; Codehighlighter1_1295_1440_Closed_Image.style.display='inline'; Codehighlighter1_1295_1440_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1295_1440_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1295_1440_Closed_Text.style.display='none'; Codehighlighter1_1295_1440_Open_Image.style.display='inline'; Codehighlighter1_1295_1440_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span>
														<span id="Codehighlighter1_1295_1440_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_1295_1440_Open_Text">
																<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
																<span style="COLOR: #0000ff">if</span>
																<span style="COLOR: #000000">(process_mem[k] </span>
																<span style="COLOR: #000000">&gt;=</span>
																<span style="COLOR: #000000"> </span>
																<span style="COLOR: #000000">'</span>
																<span style="COLOR: #000000">0</span>
																<span style="COLOR: #000000">'</span>
																<span style="COLOR: #000000"> </span>
																<span style="COLOR: #000000">&amp;&amp;</span>
																<span style="COLOR: #000000"> process_mem[k] </span>
																<span style="COLOR: #000000">&lt;=</span>
																<span style="COLOR: #000000"> </span>
																<span style="COLOR: #000000">'</span>
																<span style="COLOR: #000000">9</span>
																<span style="COLOR: #000000">'</span>
																<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_1360_1408_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1360_1408_Open_Text.style.display='none'; Codehighlighter1_1360_1408_Closed_Image.style.display='inline'; Codehighlighter1_1360_1408_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1360_1408_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1360_1408_Closed_Text.style.display='none'; Codehighlighter1_1360_1408_Open_Image.style.display='inline'; Codehighlighter1_1360_1408_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                        </span>
																<span id="Codehighlighter1_1360_1408_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_1360_1408_Open_Text">
																		<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                            strQQ </span>
																		<span style="COLOR: #000000">=</span>
																		<span style="COLOR: #000000">  process_mem[k] </span>
																		<span style="COLOR: #000000">+</span>
																		<span style="COLOR: #000000"> strQQ;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                        }</span>
																</span>
																<span style="COLOR: #000000">
																		<br />
																		<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
																<span style="COLOR: #0000ff">else</span>
																<span style="COLOR: #000000">
																		<br />
																		<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                            </span>
																<span style="COLOR: #0000ff">break</span>
																<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span>
														</span>
														<span style="COLOR: #000000">
																<br />
																<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                    </span>
														<span style="COLOR: #0000ff">if</span>
														<span style="COLOR: #000000">(strQQ.length())<br /><img id="Codehighlighter1_1471_1528_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1471_1528_Open_Text.style.display='none'; Codehighlighter1_1471_1528_Closed_Image.style.display='inline'; Codehighlighter1_1471_1528_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1471_1528_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1471_1528_Closed_Text.style.display='none'; Codehighlighter1_1471_1528_Open_Image.style.display='inline'; Codehighlighter1_1471_1528_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span>
														<span id="Codehighlighter1_1471_1528_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_1471_1528_Open_Text">
																<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                        ResumeThread(_hProcess);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />                        </span>
																<span style="COLOR: #0000ff">return</span>
																<span style="COLOR: #000000"> </span>
																<span style="COLOR: #0000ff">true</span>
																<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                    }</span>
														</span>
														<span style="COLOR: #000000">            <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
												</span>
												<span style="COLOR: #000000">
														<br />
														<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    ResumeThread(_hProcess);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">false</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />HANDLE GetQQProcess()<br /><img id="Codehighlighter1_1618_2045_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1618_2045_Open_Text.style.display='none'; Codehighlighter1_1618_2045_Closed_Image.style.display='inline'; Codehighlighter1_1618_2045_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1618_2045_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1618_2045_Closed_Text.style.display='none'; Codehighlighter1_1618_2045_Open_Image.style.display='inline'; Codehighlighter1_1618_2045_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_1618_2045_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_1618_2045_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    PROCESSENTRY32 pe;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    pe.dwSize </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">sizeof</span>
						<span style="COLOR: #000000">(PROCESSENTRY32);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    HANDLE hSnapshot </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    Process32First(hSnapshot, </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">pe);<br /><img id="Codehighlighter1_1782_1967_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1782_1967_Open_Text.style.display='none'; Codehighlighter1_1782_1967_Closed_Image.style.display='inline'; Codehighlighter1_1782_1967_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1782_1967_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1782_1967_Closed_Text.style.display='none'; Codehighlighter1_1782_1967_Open_Image.style.display='inline'; Codehighlighter1_1782_1967_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">do</span>
						<span id="Codehighlighter1_1782_1967_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_1782_1967_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #000000">_tcsicmp(pe.szExeFile,_T(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">qq.exe</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">)))<br /><img id="Codehighlighter1_1829_1926_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1829_1926_Open_Text.style.display='none'; Codehighlighter1_1829_1926_Closed_Image.style.display='inline'; Codehighlighter1_1829_1926_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1829_1926_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1829_1926_Closed_Text.style.display='none'; Codehighlighter1_1829_1926_Open_Image.style.display='inline'; Codehighlighter1_1829_1926_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span id="Codehighlighter1_1829_1926_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_1829_1926_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            CloseHandle(hSnapshot);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">return</span>
										<span style="COLOR: #000000"> OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        pe.dwSize </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">sizeof</span>
								<span style="COLOR: #000000">(PROCESSENTRY32);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000">(Process32Next(hSnapshot, </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">pe));<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    CloseHandle(hSnapshot);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> NULL;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.cppblog.com/lovelypig/aggbug/16347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-12-13 00:36 <a href="http://www.cppblog.com/lovelypig/archive/2006/12/13/16347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>生成的小程序的技巧</title><link>http://www.cppblog.com/lovelypig/archive/2006/09/13/12420.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Wed, 13 Sep 2006 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/09/13/12420.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/12420.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/09/13/12420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/12420.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/12420.html</trackback:ping><description><![CDATA[A:<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.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">t _tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, _TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /><img id="Codehighlighter1_35_294_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_294_Open_Text.style.display='none'; Codehighlighter1_35_294_Closed_Image.style.display='inline'; Codehighlighter1_35_294_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_35_294_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_294_Closed_Text.style.display='none'; Codehighlighter1_35_294_Open_Image.style.display='inline'; Codehighlighter1_35_294_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_35_294_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_35_294_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> typedef </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (WINAPI </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">myMsg)( IN HWND hWnd,IN LPCSTR lpText, IN LPCSTR lpCaption,IN UINT uType);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> HANDLE m_hDLL </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::LoadLibrary(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">user32.dll</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> myMsg msg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (myMsg)GetProcAddress((HMODULE)m_hDLL, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MessageBoxA</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">msg)(NULL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TEST</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TEST</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> <br /><img src="http://www.cppblog.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.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />B:<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.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> _tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, _TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /><img id="Codehighlighter1_37_86_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_86_Open_Text.style.display='none'; Codehighlighter1_37_86_Closed_Image.style.display='inline'; Codehighlighter1_37_86_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_37_86_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_86_Closed_Text.style.display='none'; Codehighlighter1_37_86_Open_Image.style.display='inline'; Codehighlighter1_37_86_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_37_86_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_37_86_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    MessageBoxA(NULL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.cppblog.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.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />A生成的exe 的大小  &lt; B<br /><img src ="http://www.cppblog.com/lovelypig/aggbug/12420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-09-13 17:41 <a href="http://www.cppblog.com/lovelypig/archive/2006/09/13/12420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程线程插入,获得其它进程ListCtrl信息</title><link>http://www.cppblog.com/lovelypig/archive/2006/06/26/8999.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Sun, 25 Jun 2006 18:07:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/06/26/8999.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/8999.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/06/26/8999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/8999.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/8999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 因为进浩方玩星际,每次都要挤房间,所以做了一个挤房间的小工具.VC7.1 工程下载关键代码如下:						  1								typedef 				struct				 _remoteparameter				  2																																												{    						...&nbsp;&nbsp;<a href='http://www.cppblog.com/lovelypig/archive/2006/06/26/8999.html'>阅读全文</a><img src ="http://www.cppblog.com/lovelypig/aggbug/8999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-06-26 02:07 <a href="http://www.cppblog.com/lovelypig/archive/2006/06/26/8999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32服务控制类</title><link>http://www.cppblog.com/lovelypig/archive/2006/04/01/4871.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Sat, 01 Apr 2006 01:55:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/04/01/4871.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/4871.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/04/01/4871.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/4871.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/4871.html</trackback:ping><description><![CDATA[
		<p>/**<br />W32Server.h   <br /><a href="/lovelypig">http://www.cppblog.com/lovelypig</a>  橙子<br />*/<br />#ifndef  _CW32SERVER_H <br />#define  _CW32SERVER_H <br />#include &lt;windows.h&gt;<br />#include &lt;stdio.h&gt;</p>
		<p> </p>
		<p>class CW32Server<br />{<br /> TCHAR  m_szServerName[MAX_PATH];<br /> SC_HANDLE   m_hService;<br /> SC_HANDLE   m_hScm;<br /> SERVICE_STATUS ServiceStatus;<br /> BYTE  m_cfgBuf[4096];<br />public:</p>
		<p> CW32Server(void);<br /> CW32Server(const TCHAR *strServerName); <br /> BOOL    Open(const TCHAR *strServerName);  </p>
		<p> /**  返回状态: <br />  SERVICE_CONTINUE_PENDING The service continue is pending. <br />  SERVICE_PAUSE_PENDING The service pause is pending. <br />  SERVICE_PAUSED The service is paused. <br />  SERVICE_RUNNING The service is running. <br />  SERVICE_START_PENDING The service is starting. <br />  SERVICE_STOP_PENDING The service is stopping. <br />  SERVICE_STOPPED The service is not running. <br /> */<br /> DWORD GetState();     <br /> BOOL    SetState(DWORD state);<br /> BOOL    Start();<br /> BOOL    Stop();</p>
		<p> /**<br />  SERVICE_AUTO_START  A service started automatically by the service control manager during system startup. <br />  SERVICE_BOOT_START  A device driver started by the system loader. This value is valid only for driver services. <br />  SERVICE_DEMAND_START A service started by the service control manager when a process calls the StartService function. <br />  SERVICE_DISABLED  A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED. <br />  SERVICE_SYSTEM_START <br /> */<br /> BOOL    GetConfig();   //如果返回真，配置状态填充在 m_config  中 <br /> SC_HANDLE    GetHandle();  //需要禁用、启动服务，使用 ChangeServiceConfig(GetHandle(),...)   查看MSDN<br /> ~CW32Server(void);</p>
		<p> QUERY_SERVICE_CONFIG *m_config;<br />};</p>
		<p>
				<br />#endif <br /><br /><br />/**<br />W32Server.cpp<br /><a href="/lovelypig">http://www.cppblog.com/lovelypig</a>  橙子<br />*/<br />#include ".\w32server.h"<br />#include &lt;assert.h&gt;</p>
		<p>CW32Server::CW32Server(void)<br />{<br /> memset((char*)&amp;m_szServerName,0,sizeof(TCHAR)*MAX_PATH);<br /> memset((char*)&amp;m_config,0,sizeof(m_config));<br /> m_hService = 0;<br /> m_hScm   = 0;<br /> m_config = (QUERY_SERVICE_CONFIG*)m_cfgBuf;<br />}</p>
		<p>CW32Server::CW32Server(const TCHAR *strServerName)<br />{ <br /> assert(strServerName);</p>
		<p> CW32Server();<br /> _tcscpy(m_szServerName,strServerName); </p>
		<p> m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);<br /> if(!m_hScm)<br /> {<br />  return ;<br /> }<br /> m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);<br /> if(!m_hService)<br /> {<br />  CloseServiceHandle(m_hScm);<br />  m_hScm = NULL;<br />    }<br />}<br />CW32Server::~CW32Server(void)<br />{<br /> if( m_hScm )<br /> {<br />  CloseServiceHandle(m_hScm);<br />  m_hScm = NULL;<br /> }<br /> if( m_hService )<br /> {<br />  CloseServiceHandle(m_hService);<br />  m_hService = NULL;<br /> }<br />}</p>
		<p>BOOL   CW32Server:: Open(const TCHAR *strServerName)<br />{<br /> assert(strServerName);</p>
		<p> if( m_hScm )<br /> {<br />  CloseServiceHandle(m_hScm);<br />  m_hScm = NULL;<br /> }<br /> if( m_hService )<br /> {<br />  CloseServiceHandle(m_hService);<br />  m_hService = NULL;<br /> }</p>
		<p> _tcscpy(m_szServerName,strServerName); <br /> m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);<br /> if(!m_hScm)<br /> {<br />  return FALSE;<br /> }<br /> m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);<br /> if(!m_hService)<br /> {<br />  CloseServiceHandle(m_hScm);<br />  m_hScm = NULL;<br />  return FALSE;<br /> }<br /> return TRUE;<br />}</p>
		<p>DWORD CW32Server::GetState()<br />{ <br /> assert(m_hService);</p>
		<p>    if(QueryServiceStatus(m_hService,&amp;ServiceStatus))<br /> {<br />  return ServiceStatus.dwCurrentState;<br /> }<br /> else<br /> {<br />  return 0xffffffff;<br /> }<br />}</p>
		<p>BOOL    CW32Server::SetState(DWORD state)<br />{<br /> assert(m_hService);</p>
		<p> return ControlService(m_hService,state,&amp;ServiceStatus);<br />}</p>
		<p>BOOL    CW32Server::Start()<br />{<br /> assert(m_hService);</p>
		<p> return StartService(m_hService,0,NULL);</p>
		<p>}</p>
		<p>BOOL    CW32Server::Stop()<br />{<br /> assert(m_hService);</p>
		<p> return ControlService(m_hService,SERVICE_CONTROL_STOP,&amp;ServiceStatus);<br />}</p>
		<p>BOOL    CW32Server::GetConfig()<br />{<br /> assert(m_hService);<br /> <br /> DWORD cbBufSize = 4096;<br /> DWORD pcbBytesNeeded = 4096;<br /> return QueryServiceConfig(m_hService,m_config,cbBufSize, &amp;pcbBytesNeeded);<br />}</p>
		<p>SC_HANDLE  CW32Server::GetHandle()<br />{<br /> assert(m_hService);<br /> return m_hService;<br />}</p>
<img src ="http://www.cppblog.com/lovelypig/aggbug/4871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-04-01 09:55 <a href="http://www.cppblog.com/lovelypig/archive/2006/04/01/4871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网卡类</title><link>http://www.cppblog.com/lovelypig/archive/2006/04/01/4870.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Sat, 01 Apr 2006 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/04/01/4870.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/4870.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/04/01/4870.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/4870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/4870.html</trackback:ping><description><![CDATA[
		<p>//说明：平时做更改网卡ＩＰ这样的活挺多的，粘来粘去麻烦，简单的打了个包．<br />//引用：<font color="#000000"><a class="" title="" href="http://www.vckbase.com/document/viewdoc/?id=851" target="">VCkbase＿不重起Windows直接更改IP地址<br /></a></font>//代码：<br /><br /><br />//Adapter_.h<br />#ifndef _ADAPTER_H<br />#define _ADAPTER_H<br />#include &lt;tchar.h&gt;<br />#include &lt;Windows.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;Iphlpapi.h&gt;<br />#pragma comment(lib,"iphlpapi.lib")<br />#pragma comment(lib,"ws2_32.lib")<br />#include &lt;assert.h&gt;<br />#include &lt;string&gt;<br />#include &lt;vector&gt;<br />using   namespace  std;</p>
		<p>
				<br />typedef int (CALLBACK* DHCPNOTIFYPROC)(LPWSTR, LPWSTR, BOOL, DWORD, DWORD, DWORD, int);</p>
		<p>class CAdapter<br />{<br /> private:<br />  class ADAPTER_INFO<br />  {<br />    string strName;   // 适配器名称<br />    string strDriverDesc; // 适配器描述<br />    string strIP;   // IP地址<br />    string strSubnetMask;  // 子网掩码<br />    string strNetGate;  // 网关<br />    string strDNS;         //DNS<br />    string strMAC;<br />    ::MIB_IFROW IfRow;  //用于流量,状态显示</p>
		<p>    BOOL   RegSetIP();<br />    BOOL   ChangeSysSet();<br />    <br />   public:<br />    void   SetInx(DWORD _dwpIndex) { IfRow.dwIndex  = _dwpIndex; }</p>
		<p>    //取得IP信息<br />    string&amp; GetName(){  return strName; }<br />    string&amp; GetDriverDesc(){ return strDriverDesc; }<br />    string&amp; GetIP(){ return strIP; }<br />    string&amp; GetSubnetMask(){ return strSubnetMask; }<br />    string&amp; GetNetGate(){ return strNetGate; }<br />    string&amp; GetDNS(){ return strDNS; }<br />    string&amp; GetMAC(){ return strMAC; }<br />    <br />    //取得状态,流量<br />    DWORD    GetState(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     /*<br />     #define MIB_IF_OPER_STATUS_NON_OPERATIONAL      0<br />     #define MIB_IF_OPER_STATUS_UNREACHABLE          1<br />     #define MIB_IF_OPER_STATUS_DISCONNECTED         2<br />     #define MIB_IF_OPER_STATUS_CONNECTING           3<br />     #define MIB_IF_OPER_STATUS_CONNECTED            4<br />     #define MIB_IF_OPER_STATUS_OPERATIONAL          5<br />     */<br />     return IfRow.dwOperStatus ;<br />    }<br />    <br />    DWORD    GetSendBytes(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwOutOctets;<br />    }<br />    DWORD    GetReceiveBytes(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }  <br />     return IfRow.dwInOctets;<br />    }<br />    DWORD   GetSpeed(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwSpeed;<br />    }</p>
		<p>    DWORD   GetOutUcastPkts(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwOutUcastPkts;<br />    } <br />    DWORD   GetOutNUcastPkts(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwOutNUcastPkts;<br />    } <br />    DWORD   GetInUcastPkts(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwInUcastPkts;<br />    } <br />    DWORD   GetInNUcastPkts(){<br />     if(GetIfEntry(&amp;IfRow) != NO_ERROR)<br />     {<br />      return 0;<br />     }<br />     return IfRow.dwInNUcastPkts;<br />    } <br />    //设置IP信息<br />    BOOL SetName(string _PstrName  ,BOOL bChange = 0)  { <br />     strName = _PstrName ;<br />     if( bChange)<br />      return ChangeSysSet();<br />     return TRUE;<br />    }<br />    BOOL SetDriverDesc(string _PstrDriverDesc,BOOL bChange = 0){   <br />     strDriverDesc = _PstrDriverDesc;<br />     if( bChange)<br />      ChangeSysSet();<br />     return TRUE;<br />    }<br />    BOOL SetIP(string _PstrIP,BOOL bChange = 0){  <br />     strIP = _PstrIP ;<br />     if( bChange)<br />      ChangeSysSet();<br />     return TRUE;<br />    }<br />    BOOL SetSubnetMask(string _PstrSubnetMask,BOOL bChange = 0){  <br />     strSubnetMask = _PstrSubnetMask; <br />     if( bChange)<br />      ChangeSysSet();<br />     return TRUE;<br />    }<br />    BOOL SetNetGate(string _PstrNetGate,BOOL bChange = 0){ <br />     strNetGate = _PstrNetGate; <br />     if( bChange)<br />      ChangeSysSet();<br />     return TRUE;<br />    }<br />    BOOL SetDNS(string strSetDNS = ""){<br />     if( !strSetDNS.length() )<br />     {<br />      HKEY hKey;<br />      DWORD dwType;<br />      char  szReadBuf[64];<br />      DWORD cbData = 64;<br />      string strKeyName ="SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";<br />      strKeyName += this-&gt;strName;<br />      if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,strKeyName.c_str(),0,<br />         KEY_READ,&amp;hKey) != ERROR_SUCCESS)<br />      {<br />       return FALSE;<br />      }<br />      if( RegQueryValueExA(hKey,"NameServer",0,&amp;dwType,(BYTE*)szReadBuf,&amp;cbData) != ERROR_SUCCESS)<br />      {<br />       return FALSE;<br />      }<br />      RegCloseKey(hKey);<br />      strDNS = szReadBuf;<br />     }<br />     else<br />     {<br />      strDNS = strSetDNS;<br />      return ChangeSysSet();<br />     }<br />     return TRUE;<br />    }<br />    void SetMAC(BYTE *Address){  <br />      char  buf[6];<br />      for(int i= 0;i&lt; 6;i++)<br />      {<br />       sprintf( buf,"%02x",Address[i]);<br />       strMAC += string(buf);<br />      }<br />      /*<br />      sprintf(pAI-&gt;mac, "%02X%02X%02X%02X%02X%02X",<br />       int (pAdapterInfo-&gt;Address[0]),<br />       int (pAdapterInfo-&gt;Address[1]),<br />       int (pAdapterInfo-&gt;Address[2]),<br />       int (pAdapterInfo-&gt;Address[3]),<br />       int (pAdapterInfo-&gt;Address[4]),<br />       int (pAdapterInfo-&gt;Address[5]));<br />      */<br />    }<br />  };<br /> vector&lt;ADAPTER_INFO&gt; m_AdapterVec;<br /> public:<br />  CAdapter(void);<br />  ~CAdapter(void);</p>
		<p>  size_t GetAdapterCount ()<br />  {<br />   return m_AdapterVec.size();<br />  }</p>
		<p>  ADAPTER_INFO&amp; operator[](DWORD iInx)<br />  {<br />   assert(iInx &lt; m_AdapterVec.size());<br />   return m_AdapterVec[iInx];<br />  }<br />};</p>
		<p>
				<br />#endif<br /><br /><br />//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />//Adapter_.cpp<br />#include ".\adapter_.h"</p>
		<p>
				<br />CAdapter::CAdapter(void)<br />{<br /> DWORD ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);<br /> IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];<br /> if( GetAdaptersInfo(pAdapterInfo, &amp;ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大<br /> {<br />  delete pAdapterInfo;<br />  pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];<br /> }<br /> if( GetAdaptersInfo(pAdapterInfo, &amp;ulAdapterInfoSize) == ERROR_SUCCESS )<br /> {<br />  do {<br />   if (pAdapterInfo-&gt;Type == MIB_IF_TYPE_ETHERNET)<br />   {<br />    ADAPTER_INFO *pAI = new ADAPTER_INFO;<br />    pAI-&gt;SetInx(pAdapterInfo-&gt;Index);<br />    pAI-&gt;SetName(pAdapterInfo-&gt;AdapterName);<br />    pAI-&gt;SetDriverDesc(pAdapterInfo-&gt;Description);<br />    pAI-&gt;SetMAC(pAdapterInfo-&gt;Address);<br />    pAI-&gt;SetIP(pAdapterInfo-&gt;IpAddressList.IpAddress.String);<br />    pAI-&gt;SetNetGate(pAdapterInfo-&gt;GatewayList.IpAddress.String);<br />    pAI-&gt;SetSubnetMask(pAdapterInfo-&gt;IpAddressList.IpMask.String);<br />    pAI-&gt;SetDNS();<br />    m_AdapterVec.push_back(*pAI);<br />   }<br />   pAdapterInfo = pAdapterInfo-&gt;Next;<br />  } while(pAdapterInfo);<br /> }<br /> delete pAdapterInfo;<br />}</p>
		<p>CAdapter::~CAdapter(void)<br />{<br /> m_AdapterVec.clear();<br />}</p>
		<p>BOOL CAdapter::ADAPTER_INFO::ChangeSysSet()<br />{<br /> //在注册表中修改信息<br /> if(!RegSetIP())<br /> {<br />  return FALSE;<br /> }</p>
		<p> HINSTANCE  hDhcpDll;<br /> DHCPNOTIFYPROC pDhcpNotifyProc;<br /> WCHAR wcAdapterName[256];<br /> MultiByteToWideChar(CP_ACP, 0, this-&gt;strName.c_str(), -1, wcAdapterName,256);</p>
		<p> if((hDhcpDll = LoadLibraryA("dhcpcsvc")) == NULL)<br /> {<br />  return FALSE;<br /> }</p>
		<p> if((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)<br /> {<br />  if((pDhcpNotifyProc)(NULL, wcAdapterName, TRUE, <br />   0,    //指明第几个IP地址，如果只有该接口只有一个IP地址则为0<br />   inet_addr(strIP.c_str()), //<br />   inet_addr(strSubnetMask.c_str()), <br />   0    //对DHCP的操作 0:不修改, 1:启用 DHCP，2:禁用 DHCP<br />   ) != ERROR_SUCCESS)<br />  {<br />   FreeLibrary(hDhcpDll);<br />   return FALSE;<br />  }<br />  FreeLibrary(hDhcpDll);<br /> }<br /> return TRUE;<br />}</p>
		<p>BOOL CAdapter::ADAPTER_INFO::RegSetIP()<br />{<br /> HKEY hKey;<br /> string strKeyName ="SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";<br /> strKeyName += strName;</p>
		<p> if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,<br />  strKeyName.c_str(),<br />  0,<br />  KEY_WRITE,<br />  &amp;hKey) != ERROR_SUCCESS)<br /> {<br />  return FALSE;<br /> }<br /> strIP.push_back('\0');<br /> strSubnetMask.push_back('\0');<br /> strNetGate.push_back('\0');</p>
		<p> RegSetValueExA(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)strIP.data(), (DWORD)strIP.length()+2);<br /> RegSetValueExA(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)strSubnetMask.data(),(DWORD)strSubnetMask.length()+2 );<br /> RegSetValueExA(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)strNetGate.data(), (DWORD)strNetGate.length()+2);<br /> RegSetValueExA(hKey, "NameServer", 0, REG_SZ, (unsigned char*)strDNS.data(),(DWORD) strDNS.length());<br /> RegCloseKey(hKey);<br /> return TRUE;<br />}<br /><br /></p>
<img src ="http://www.cppblog.com/lovelypig/aggbug/4870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-04-01 09:46 <a href="http://www.cppblog.com/lovelypig/archive/2006/04/01/4870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>