﻿<?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>BlogJava-天堂露珠&lt;br /&gt;&lt;font style="font-size:30px;" &gt;の技術ブログ&lt;/font&gt;-随笔分类-C++</title><link>http://www.blogjava.net/wintys/category/38355.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 12 Oct 2009 09:51:16 GMT</lastBuildDate><pubDate>Mon, 12 Oct 2009 09:51:16 GMT</pubDate><ttl>60</ttl><item><title>[原]简易Windows密码查看器</title><link>http://www.blogjava.net/wintys/archive/2009/10/10/cpp_passwordviewer.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Fri, 09 Oct 2009 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/10/10/cpp_passwordviewer.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/297612.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/10/10/cpp_passwordviewer.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/297612.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/297612.html</trackback:ping><description><![CDATA[<p>[标题]:简易Windows密码查看器 <br />
[时间]:2009-10-09 <br />
[摘要]:通过全局钩子获取当前鼠标处的窗口控件句柄，然后直接调用GetWindowText()获取密码文本。 <br />
[关键字]:密码、查看、星号、全局钩子、Hook、WM_COPYDATA、DLL、XP样式 <br />
[环境]:Visual Studio 2008、Visual C++ 6.0 <br />
[作者]:天堂露珠 (wintys@gmail.com) <a href="http://www.blogjava.net/wintys">http://www.blogjava.net/wintys</a> <br />
<br />
[正文]:</p>
<p>&nbsp;&nbsp;&nbsp; 此密码查看器原理:通过全局钩子获取当前鼠标处的窗口控件句柄，然后直接调用GetWindowText()获取密码文本。工程在VC++6.0和VS2008中编译通过。 </p>
<h3>1、查看密码的DLL工程</h3>
<p>&nbsp;&nbsp;&nbsp; 因为查看密码功能要用到全局鼠标Hook，所以要把功能放到一个DLL中。</p>
<p>PasswordViewerMouseHookDLL.h:</p>
<div class="mycode">
<p>#pragma once </p>
<p>#ifdef PSWMOUSEHOOKDLL_API_EXPORTS <br />
#define PSWMOUSEHOOKDLL_API __declspec(dllexport) <br />
#else <br />
#define PSWMOUSEHOOKDLL_API __declspec(dllimport) <br />
#endif </p>
<p>/* <br />
Winty:2009-09-29 <br />
调用SetHook()设置Hook，但无需卸载Hook，DLLMain中有清理。 <br />
*/ <br />
//My Declaration================================ <br />
#define MAXCOUNT 200 //密码最大长度 <br />
#define DWDATA_PSW_NOTIFY 1 //COPYDATASTRUCT的dwData自定义值 </p>
<p>//密码信息结构体，用于发送 <br />
typedef struct tagPswNotify <br />
{ <br />
&nbsp;&nbsp;&nbsp; char psw[MAXCOUNT];//password/text <br />
&nbsp;&nbsp;&nbsp; POINT pt;//鼠标位置 <br />
&nbsp;&nbsp;&nbsp; HWND hWnd;//控件句柄 <br />
} PSWNOTIFY , *PPSWNOTIFY; </p>
<p>/*extern表示这里只是变量声明，变量定义在cpp文件中*/ <br />
extern PSWMOUSEHOOKDLL_API BOOL g_bReadySend;//WM_COPYDATA互斥的标志，因为WM_COPYDATA不能重叠 <br />
extern PSWMOUSEHOOKDLL_API HWND g_hWnd; //接收消息的窗体句柄 <br />
extern PSWMOUSEHOOKDLL_API HHOOK g_hhk; //钩子句柄 <br />
extern PSWMOUSEHOOKDLL_API BOOL g_bView;//是否需要查看密码 </p>
<p>//鼠标钩子过程 <br />
PSWMOUSEHOOKDLL_API LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam ); <br />
//设置钩子(可在窗口的OnInitDialog()中调用) <br />
PSWMOUSEHOOKDLL_API void SetHook(HWND hWnd);</p>
</div>
<p>PasswordViewerMouseHookDLL.cpp:</p>
<div class="mycode">
<p>#include "stdafx.h" </p>
<p>#define PSWMOUSEHOOKDLL_API_EXPORTS <br />
#include "PasswordViewerMouseHookDLL.h" </p>
<p>#include &lt;stdio.h&gt;</p>
<p>//进程间共享数据,还要在链接器选项里添加:"/SECTION:.MyShare,RWS" <br />
//或: #pragma&nbsp;&nbsp; comment(linker,"/SECTION:.MyShare,RWS")&nbsp; <br />
//查看结果:dumpbin /headers *.DLL <br />
#pragma data_seg(".MyShare") <br />
HHOOK g_hhk = NULL;/*Hook句柄*/ <br />
HWND&nbsp; g_hWnd = NULL;/*接收消息的窗口句柄*/ <br />
BOOL&nbsp; g_bReadySend = TRUE;/*用于同步COPYDATA消息*/ <br />
#pragma data_seg() <br />
#pragma&nbsp;&nbsp; comment(linker,"/SECTION:.MyShare,RWS") </p>
<p>BOOL APIENTRY DllMain( HANDLE hModule, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD&nbsp; ul_reason_for_call, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPVOID lpReserved <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br />
{ <br />
&nbsp;&nbsp;&nbsp; switch (ul_reason_for_call) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case DLL_PROCESS_ATTACH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case DLL_PROCESS_DETACH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(g_hhk != NULL) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnhookWindowsHookEx(g_hhk); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_hhk = NULL; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_hWnd = NULL; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case DLL_THREAD_ATTACH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case DLL_THREAD_DETACH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; </p>
<p>&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; return TRUE; <br />
} </p>
<p>LRESULT CALLBACK MouseProc( <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nCode,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // hook code <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WPARAM wParam,&nbsp; // message identifier <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPARAM lParam&nbsp;&nbsp; // mouse coordinates <br />
) <br />
{ <br />
&nbsp;&nbsp;&nbsp; if(nCode == HC_ACTION) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PMOUSEHOOKSTRUCT pMouseHookStruct <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = reinterpret_cast&lt;PMOUSEHOOKSTRUCT&gt;(lParam); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG x = pMouseHookStruct-&gt;pt.x; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG y = pMouseHookStruct-&gt;pt.y; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND hWnd = pMouseHookStruct-&gt;hwnd; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HWND hWndFromPoint = <strong>::WindowFromPoint</strong>(pMouseHookStruct-&gt;pt); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(hWndFromPoint != g_hWnd&nbsp; &amp;&amp;&nbsp; g_bReadySend)//不能获取显示密码的文本框的内容 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_bReadySend = FALSE; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char psw[MAXCOUNT]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::GetWindowText(hWndFromPoint , psw , MAXCOUNT); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSWNOTIFY pswNotify; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy(pswNotify.psw , psw); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pswNotify.pt.x = x; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pswNotify.pt.y = y; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pswNotify.hWnd = hWndFromPoint; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COPYDATASTRUCT cd; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.lpData = &amp;pswNotify; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.cbData = sizeof(PSWNOTIFY); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.dwData = DWDATA_PSW_NOTIFY; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::SendMessage(g_hWnd, <font color="#ff0000">WM_COPYDATA</font>, NULL , (LPARAM)(LPVOID)&amp;cd); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; return CallNextHookEx(g_hhk , nCode , wParam ,lParam); <br />
} </p>
<p>void SetHook(HWND hWnd) <br />
{ <br />
&nbsp;&nbsp;&nbsp; g_hWnd = hWnd; <br />
&nbsp;&nbsp;&nbsp; g_hhk = SetWindowsHookEx(WH_MOUSE , <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MouseProc , <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>GetModuleHandle("PasswordViewerMouseHookDLL")</strong> , <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL); <br />
}</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <font color="#ff0000">DLL要想将密码消息发送到主窗口显示，要用WM_COPYDATA消息(或其它进程间通信方式)，否则会发送失败。</font>如果用WM_SETTEXT，因为全局Hook发送的消息所带的字符串指针lParam可能不能被主窗口访问，从而造成访问异常。</p>
<p>&nbsp;&nbsp;&nbsp; g_bReadySend的设置是因为WM_COPYDATA消息不能连续发送，必须等前一条消息取走之后才能发送下一条消息。</p>
<h3>2、显示密码的工程PasswordViewer</h3>
<p>&nbsp;&nbsp;&nbsp; 创建一个对话框工程PasswordViewer。</p>
<p>使用DLL步骤:</p>
<ul>
    <li>把PasswordViewerMouseHookDLL工程生成的PasswordViewerMouseHookDLL.dll、PasswordViewerMouseHookDLL.lib，以及PasswordViewerMouseHookDLL.h复制到PasswordViewer工程。 <br />
    [参考资料]: <br />
    [附件]:  </li>
    <li>在PasswordViewerDlg.cpp 中加入#include "PasswordViewerMouseHookDLL.h"和#pragma comment(lib , "PasswordViewerMouseHookDLL.lib") </li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 如果要设置最后生成XP样式的窗口，得在PasswordViewerDlg.cpp 中加入</p>
<div class="mycode">
<p>#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; PasswordViewerDlg.cpp主要代码为响应WM_COPYDATA消息，把消息内容显示到窗口上:</p>
<div class="mycode">
<p>BOOL CPasswordViewerDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) <br />
{ <br />
&nbsp;&nbsp;&nbsp; if(pCopyDataStruct-&gt;dwData == DWDATA_PSW_NOTIFY &amp;&amp; !g_bReadySend) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PPSWNOTIFY pPswNotify = (PPSWNOTIFY)pCopyDataStruct-&gt;lpData; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString strMousePosition; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strMousePosition.Format("(%3d,%3d)" , pPswNotify-&gt;pt.x ,pPswNotify-&gt;pt.y); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strMousePosition = strMousePosition; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString strPsw; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strPsw.Format("%s" , pPswNotify-&gt;psw); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strPsw = strPsw; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString strHWnd; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strHWnd.Format("%p" , pPswNotify-&gt;hWnd); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strHWnd = strHWnd; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateData(FALSE); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_bReadySend = TRUE; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return TRUE; <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str(_T("未发现窗口")); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_strPsw = str; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateData(FALSE); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CDialog::OnCopyData(pWnd, pCopyDataStruct); <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
}</p>
</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 别忘了要在CPasswordViewerDlg::OnInitDialog()中调用DLL的SetHook(m_hWnd)，初始化全局钩子。</p>
<h3>3、运行</h3>
<p>&nbsp;&nbsp;&nbsp; 运行结果如图:</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/1_11D15/cpp_PasswordViewer_4.jpg"><img style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="cpp_PasswordViewer" alt="cpp_PasswordViewer" src="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/1_11D15/cpp_PasswordViewer_thumb_1.jpg" border="0" height="350" width="470" /></a> </p>
<p align="center">【cpp_PasswordViewer.jpg】</p>
<p>[附件]:</p>
<p> </p>
<div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:3a281a8f-e72d-4343-9cec-4b8b3b1d6ac6" class="wlWriterEditableSmartContent">
<div><a href="http://www.blogjava.net/images/blogjava_net/wintys/WindowsLiveWriter/1_11D15/PasswordViewer.zip" target="_self">PasswordViewer.zip</a></div>
</div>
:&nbsp;
<p>PasswordViewer.exe、PasswordViewerMouseHookDLL.dll、工程源代码</p>
<div id="mycopyright" style="border-width: 1px 0pt 0pt; border-top: 1px solid red; padding: 5px; margin-top: 5px;">
<span style="color: #ff0000;">原创作品，转载请注明出处。<br />
作者:Winty (wintys@gmail.com)<br />
博客:http://www.blogjava.net/wintys</span>
</div>
<img src ="http://www.blogjava.net/wintys/aggbug/297612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-10-10 00:08 <a href="http://www.blogjava.net/wintys/archive/2009/10/10/cpp_passwordviewer.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]VC实现重启路由器</title><link>http://www.blogjava.net/wintys/archive/2009/05/29/cpp_basicauthorization.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Fri, 29 May 2009 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/05/29/cpp_basicauthorization.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/278962.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/05/29/cpp_basicauthorization.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/278962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/278962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用VC发送一个HTTP请求给路由器,实现重启TP-LINK路由器功能。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/05/29/cpp_basicauthorization.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/278962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-05-29 23:36 <a href="http://www.blogjava.net/wintys/archive/2009/05/29/cpp_basicauthorization.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]使用"异或"简单加密的实现</title><link>http://www.blogjava.net/wintys/archive/2009/04/19/cpp_xorencryption.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sun, 19 Apr 2009 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/04/19/cpp_xorencryption.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/266446.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/04/19/cpp_xorencryption.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/266446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/266446.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 需要使用加密算法加密密码，但是面对DES等算法，实现起来还是有难度的。并且自己的应用也不需要很强的加密算法，只要不直接使用明文就可以了。所以，实现了用"异或"简单加密密码。加密解密都是使用同一算法。要提醒的是，这种加密并不可靠，而且极易被破解。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/04/19/cpp_xorencryption.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/266446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-04-19 19:30 <a href="http://www.blogjava.net/wintys/archive/2009/04/19/cpp_xorencryption.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]在全局鼠标钩子中模拟鼠标右键单击</title><link>http://www.blogjava.net/wintys/archive/2009/03/28/vc_mousehook_rightmousebutton.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Sat, 28 Mar 2009 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/28/vc_mousehook_rightmousebutton.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/262616.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/28/vc_mousehook_rightmousebutton.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/262616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/262616.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文分为两部分，第一部分:使用SwapMouseButton()切换鼠标左右键功能。第二部分:在全局鼠标钩子中模拟鼠标右键单击。&nbsp;&nbsp;<a href='http://www.blogjava.net/wintys/archive/2009/03/28/vc_mousehook_rightmousebutton.html'>阅读全文</a><img src ="http://www.blogjava.net/wintys/aggbug/262616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-28 15:55 <a href="http://www.blogjava.net/wintys/archive/2009/03/28/vc_mousehook_rightmousebutton.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]最简单的Win32程序示例</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260423.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260423.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260423.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260423.html</trackback:ping><description><![CDATA[<div>最简单的Win32程序示例:<br />
</div>
<div>
<div>
<div style="border: 1px solid #cccccc; padding: 4px; font-size: 10pt; width: 98%; color: #000000; line-height: 16px; font-family: verdana,宋体; background-color: #eeeeee;">#include &lt;windows.h&gt; <br />
<font color="#0000ff">int</font> WINAPI WinMain (HINSTANCE hInstance, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE hPrevInstance, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSTR szCmdLine, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff">int</font> iCmdShow) <br />
{ <br />
&nbsp;
MessageBox(NULL, <font color="#800000">"Hello, Win32!"</font>, <font color="#800000">"问候"</font>, MB_OK) ;&nbsp;&nbsp;<br />
&nbsp;
<br />
&nbsp;
<font color="#0000ff">return</font> 0 ; <br />
} <br />
</div>
</div>
</div>
<br />
文章来源:<a href="http://wintys.blog.51cto.com/425414/92287">http://wintys.blog.51cto.com/425414/92287</a>
<img src ="http://www.blogjava.net/wintys/aggbug/260423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]wsprintf用法</title><link>http://www.blogjava.net/wintys/archive/2009/03/18/260415.html</link><dc:creator>天堂露珠</dc:creator><author>天堂露珠</author><pubDate>Wed, 18 Mar 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/wintys/archive/2009/03/18/260415.html</guid><wfw:comment>http://www.blogjava.net/wintys/comments/260415.html</wfw:comment><comments>http://www.blogjava.net/wintys/archive/2009/03/18/260415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wintys/comments/commentRss/260415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wintys/services/trackbacks/260415.html</trackback:ping><description><![CDATA[在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是用 wsprintf这个函数 它的格式如下:<br /><br />wsprintf(缓冲区,格式，要格式化的值)；<br />第一个参数是字符缓冲区，后面是格式字符串，wsprintf不是将格式化结果写到标准输出，而是将其写入缓冲区中，该函数返回该字符串的长度。<br /><br />比如我们想通过MessageBox来输出一个整形变量的值，可以用以下代码实现：<br />char szBuffer[100];<br />ing number=100;<br />wsprintf(szBuffer, &#8220;%d&#8221;,number);<br />MessgaeBox(NULL,szBrffer,TEXT(&#8220;格式化字符串&#8221;),0);<br />这个函数除了将内容格式化输出到第一个参数所提供的字符串缓冲区以外，其它功能与printf函数相同<br /><br />wsprintf对应的字符串是宽字符型wchar_t,即一个字符占用2个字节的内存空间.<br />sprintf对应的字符串是字符类型为char,几一个字符占用1个字节的内存空间.<br />sprintf是用于对ASCII码的127个字符进行操作,wsprintf是对UNICODE的多语言字符进行操作.<br />如:<br />sprintf(buffer, "ascii");<br />wsprintf(buffer, L"unicode");<br /><br />来源:[url]http://www.cppblog.com/liuxubin/archive/2007/08/14/29993.html[/url]<br /><br />文章来源:<a href='http://wintys.blog.51cto.com/425414/111494'>http://wintys.blog.51cto.com/425414/111494</a> 
<img src ="http://www.blogjava.net/wintys/aggbug/260415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wintys/" target="_blank">天堂露珠</a> 2009-03-18 12:02 <a href="http://www.blogjava.net/wintys/archive/2009/03/18/260415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>