源码下载地址 http://pan.baidu.com/s/1hrIguaS
使用平台 Microsoft visual studio 2010及以上
VCShowPass.rc
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/
#undef APSTUDIO_READONLY_SYMBOLS
/
// 中文(简体,中国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/
//
// Dialog
//
IDD_DIALOG1 DIALOGEX 400, 300, 161, 94
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_OVERLAPPEDWINDOW
CAPTION "显示密码"
FONT 9, "宋体", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "显示密码",IDSHOWPASS,51,9,56,19,0,WS_EX_STATICEDGE
PUSHBUTTON "退 出",IDEXIT,51,37,56,18,0,WS_EX_STATICEDGE
CTEXT "雨绿凡尘 http://blog.csdn.net/chenlu5201314",IDC_STATIC1,10,70,146,20
ICON IDI_ICON1,IDC_STATIC,6,11,21,21
END
/
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "Res\\KEY.ICO"
/
//
// MIDI
//
IDR_MIDI1 MIDI "Res\\on.mid"
/
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "Comments", "http://blog.csdn.net/chenlu5201314"
VALUE "CompanyName", "雨绿凡尘"
VALUE "FileDescription", "在 2000/XP 里显示*的工具"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "ProductName", "ShowPass"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
/
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
RIGHTMARGIN, 156
BOTTOMMARGIN, 90
END
END
#endif // APSTUDIO_INVOKED
#endif // 中文(简体,中国) resources
/
#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//
/
#endif // not APSTUDIO_INVOKED
resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by VCShowPass.rc
//
#define IDD_DIALOG1 101
#define IDI_ICON1 104
#define IDR_MIDI1 107
#define IDC_STATIC1 1000
#define IDSHOWPASS 1001
#define IDEXIT 1002
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1003
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
main.h
/**************************************************************************\
*
* 版权 (c) 2000 - 2100 雨绿凡尘。 保留所有权利。
*
* 模块名称:
*
* main.h
*
* 摘 要:
* 包含头文件、定义常用宏、声明函数
\**************************************************************************/
#ifndef __WINMAIN_H__
#define __WINMAIN_H__
//---------------------------------------------------------------------------
// 包含 窗口ID,按钮ID,图标ID
//---------------------------------------------------------------------------
#include "resource.h"
//---------------------------------------------------------------------------
// 包含 _T
//---------------------------------------------------------------------------
#include <atlstr.h>
//---------------------------------------------------------------------------
//将密码替换成需要的字符 1~128
//---------------------------------------------------------------------------
#define SHOWCHAR_0 0 //显示密码
//---------------------------------------------------------------------------
//将密码替换成需要的字符 1~128
//注: 129~256 为ASCII扩展码,ASCII码并没有规定编号为128~255的字符,
// 为了能表示更多字符,各厂商制定了很多种ASCII码的扩展规范。
// 所以129~256不同的机器或不同的编辑框显示的字符都有可能不同
//---------------------------------------------------------------------------
#define SHOWCHAR_1 1 //显示密码为 ┌
#define SHOWCHAR_2 2 //显示密码为 ┐
#define SHOWCHAR_3 3 //显示密码为 └
#define SHOWCHAR_4 4 //显示密码为 ┘
#define SHOWCHAR_5 5 //显示密码为 │
#define SHOWCHAR_6 6 //显示密码为 -
#define SHOWCHAR_7 7 //显示密码为 ·
#define SHOWCHAR_8 8 //显示密码为 ◘
#define SHOWCHAR_9 9 //显示密码为 \t
#define SHOWCHAR_10 10 //显示密码为 \n
#define SHOWCHAR_11 11 //显示密码为 ♂
#define SHOWCHAR_12 12 //显示密码为 ♀
#define SHOWCHAR_13 13 //显示密码为 \r
#define SHOWCHAR_14 14 //显示密码为 ♬
#define SHOWCHAR_15 15 //显示密码为 ☼
#define SHOWCHAR_16 16 //显示密码为 +
#define SHOWCHAR_17 17 //显示密码为 ◀
#define SHOWCHAR_18 18 //显示密码为 ↕
#define SHOWCHAR_19 19 //显示密码为
#define SHOWCHAR_20 20 //显示密码为 ¶
#define SHOWCHAR_21 21 //显示密码为 ┴
#define SHOWCHAR_22 22 //显示密码为 ┬
#define SHOWCHAR_23 23 //显示密码为 ┤
#define SHOWCHAR_24 24 //显示密码为 ↑
#define SHOWCHAR_25 25 //显示密码为 ├
#define SHOWCHAR_26 26 //显示密码为 →
#define SHOWCHAR_27 27 //显示密码为 ←
#define SHOWCHAR_28 28 //显示密码为 向右游标
#define SHOWCHAR_29 29 //显示密码为 向左游标
#define SHOWCHAR_30 30 //显示密码为 向上游标
#define SHOWCHAR_31 31 //显示密码为 向下游标
#define SHOWCHAR_32 32 //显示密码为
#define SHOWCHAR_33 33 //显示密码为 !
#define SHOWCHAR_34 34 //显示密码为 "
#define SHOWCHAR_35 35 //显示密码为 #
#define SHOWCHAR_36 36 //显示密码为 $
#define SHOWCHAR_37 37 //显示密码为 %
#define SHOWCHAR_38 38 //显示密码为 &
#define SHOWCHAR_39 39 //显示密码为 '
#define SHOWCHAR_40 40 //显示密码为 (
#define SHOWCHAR_41 41 //显示密码为 )
#define SHOWCHAR_42 42 //显示密码为 *
#define SHOWCHAR_43 43 //显示密码为 +
#define SHOWCHAR_44 44 //显示密码为 ,
#define SHOWCHAR_45 45 //显示密码为 -
#define SHOWCHAR_46 46 //显示密码为 .
#define SHOWCHAR_47 47 //显示密码为 /
#define SHOWCHAR_48 48 //显示密码为 0
#define SHOWCHAR_49 49 //显示密码为 1
#define SHOWCHAR_50 50 //显示密码为 2
#define SHOWCHAR_51 51 //显示密码为 3
#define SHOWCHAR_52 52 //显示密码为 4
#define SHOWCHAR_53 53 //显示密码为 5
#define SHOWCHAR_54 54 //显示密码为 6
#define SHOWCHAR_55 55 //显示密码为 7
#define SHOWCHAR_56 56 //显示密码为 8
#define SHOWCHAR_57 57 //显示密码为 9
#define SHOWCHAR_58 58 //显示密码为 :
#define SHOWCHAR_59 59 //显示密码为 ;
#define SHOWCHAR_60 60 //显示密码为 <
#define SHOWCHAR_61 61 //显示密码为 =
#define SHOWCHAR_62 62 //显示密码为 >
#define SHOWCHAR_63 63 //显示密码为 ?
#define SHOWCHAR_64 64 //显示密码为 @
#define SHOWCHAR_65 65 //显示密码为 A
#define SHOWCHAR_66 66 //显示密码为 B
#define SHOWCHAR_67 67 //显示密码为 C
#define SHOWCHAR_68 68 //显示密码为 D
#define SHOWCHAR_69 69 //显示密码为 E
#define SHOWCHAR_70 70 //显示密码为 F
#define SHOWCHAR_71 71 //显示密码为 G
#define SHOWCHAR_72 72 //显示密码为 H
#define SHOWCHAR_73 73 //显示密码为 I
#define SHOWCHAR_74 74 //显示密码为 J
#define SHOWCHAR_75 75 //显示密码为 K
#define SHOWCHAR_76 76 //显示密码为 L
#define SHOWCHAR_77 77 //显示密码为 M
#define SHOWCHAR_78 78 //显示密码为 N
#define SHOWCHAR_79 79 //显示密码为 O
#define SHOWCHAR_80 80 //显示密码为 P
#define SHOWCHAR_81 81 //显示密码为 Q
#define SHOWCHAR_82 82 //显示密码为 R
#define SHOWCHAR_83 83 //显示密码为 S
#define SHOWCHAR_84 84 //显示密码为 T
#define SHOWCHAR_85 85 //显示密码为 U
#define SHOWCHAR_86 86 //显示密码为 V
#define SHOWCHAR_87 87 //显示密码为 W
#define SHOWCHAR_88 88 //显示密码为 X
#define SHOWCHAR_89 89 //显示密码为 Y
#define SHOWCHAR_90 90 //显示密码为 Z
#define SHOWCHAR_91 91 //显示密码为 [
#define SHOWCHAR_92 92 //显示密码为 \
#define SHOWCHAR_93 93 //显示密码为 ]
#define SHOWCHAR_94 94 //显示密码为 ^
#define SHOWCHAR_95 95 //显示密码为 _
#define SHOWCHAR_96 96 //显示密码为 `
#define SHOWCHAR_97 97 //显示密码为 a
#define SHOWCHAR_98 98 //显示密码为 b
#define SHOWCHAR_99 99 //显示密码为 c
#define SHOWCHAR_100 100 //显示密码为 d
#define SHOWCHAR_101 101 //显示密码为 e
#define SHOWCHAR_102 102 //显示密码为 f
#define SHOWCHAR_103 103 //显示密码为 g
#define SHOWCHAR_104 104 //显示密码为 h
#define SHOWCHAR_105 105 //显示密码为 i
#define SHOWCHAR_106 106 //显示密码为 j
#define SHOWCHAR_107 107 //显示密码为 k
#define SHOWCHAR_108 108 //显示密码为 l
#define SHOWCHAR_109 109 //显示密码为 m
#define SHOWCHAR_110 110 //显示密码为 n
#define SHOWCHAR_111 111 //显示密码为 o
#define SHOWCHAR_112 112 //显示密码为 p
#define SHOWCHAR_113 113 //显示密码为 q
#define SHOWCHAR_114 114 //显示密码为 r
#define SHOWCHAR_115 115 //显示密码为 s
#define SHOWCHAR_116 116 //显示密码为 t
#define SHOWCHAR_117 117 //显示密码为 u
#define SHOWCHAR_118 118 //显示密码为 v
#define SHOWCHAR_119 119 //显示密码为 w
#define SHOWCHAR_120 120 //显示密码为 x
#define SHOWCHAR_121 121 //显示密码为 y
#define SHOWCHAR_122 122 //显示密码为 z
#define SHOWCHAR_123 123 //显示密码为 {
#define SHOWCHAR_124 124 //显示密码为 |
#define SHOWCHAR_125 125 //显示密码为 }
#define SHOWCHAR_126 126 //显示密码为 ~
#define SHOWCHAR_127 127 //显示密码为 删除
#define SHOWCHAR_128 128 //显示密码为 €
//---------------------------------------------------------------------------
// 主窗口的消息处理
//---------------------------------------------------------------------------
extern LRESULT CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM);
//---------------------------------------------------------------------------
// 枚举所有窗口
//---------------------------------------------------------------------------
extern BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam);
//---------------------------------------------------------------------------
// 显示和隐藏密码的处理函数
//---------------------------------------------------------------------------
extern void ShowAll(HWND hwnd, int i);
#endif
main.cpp
/**************************************************************************\
*
* 版权 (c) 2000 - 2100 雨绿凡尘。 保留所有权利。
*
* 模块名称:
*
* main.cpp
*
* 摘 要:
* 实现函数
\**************************************************************************/
#include "main.h"
//---------------------------------------------------------------------------
// 记录显示和隐藏密码的状态
//---------------------------------------------------------------------------
static bool g_bShowPassWord = false;
//---------------------------------------------------------------------------
// 程序入口函数
//---------------------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
DialogBox (hInstance, (LPCSTR)IDD_DIALOG1, NULL, (DLGPROC)DialogFunc) ;
return TRUE ;
}
//---------------------------------------------------------------------------
// 主窗口的消息处理
//---------------------------------------------------------------------------
LRESULT CALLBACK DialogFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
RECT rc;
switch(message)
{
case WM_INITDIALOG:
GetWindowRect(hwnd, &rc);
ShowWindow(hwnd, SW_SHOW);
case WM_SHOWWINDOW:
return TRUE;
case WM_TIMER:
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDSHOWPASS:
if (!g_bShowPassWord)
{
SetWindowText(hwnd,_T("隐藏密码"));
SetWindowText(GetDlgItem(hwnd,IDSHOWPASS),_T("隐藏密码"));
}
else
{
SetWindowText(hwnd,_T("隐藏密码"));
SetWindowText(GetDlgItem(hwnd,IDSHOWPASS),_T("显示密码"));
}
ShowAll(hwnd, 1);
return (FALSE);
case IDEXIT:
SendMessage(hwnd, WM_CLOSE, 0, 0);
return (TRUE);
}
break;
case WM_CLOSE:
case WM_DESTROY:
GetWindowRect(hwnd, &rc);
PostQuitMessage(0);
return FALSE;
}
return (FALSE);
}
//---------------------------------------------------------------------------
// 显示和隐藏密码的处理函数
//---------------------------------------------------------------------------
void ShowAll(HWND hwnd, int i)
{
g_bShowPassWord = !g_bShowPassWord;
HWND Window_Handle;
Window_Handle = GetWindow(hwnd, GW_HWNDFIRST);
while (Window_Handle != 0)
{
if (Window_Handle != 0)
EnumChildWindows(Window_Handle, &EnumChildWindowsProc, i);
Window_Handle = GetWindow(Window_Handle, GW_HWNDNEXT);
}
}
//---------------------------------------------------------------------------
// 枚举所有窗口
//---------------------------------------------------------------------------
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam)
{
char buffer[255];
GetClassName(hwnd, buffer, 256);
if (GetWindowLong(hwnd, GWL_STYLE | ES_PASSWORD))
{
if (g_bShowPassWord)
{
PostMessage(hwnd, EM_SETPASSWORDCHAR,SHOWCHAR_0, 0);
}
else
{
PostMessage(hwnd, EM_SETPASSWORDCHAR,SHOWCHAR_42, 0);
}
}
InvalidateRgn(hwnd, 0, TRUE);
return TRUE; //终止循环
}
KEY.ICO
预防查看
BOOL CxxxDialog::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == EM_SETPASSWORDCHAR)
{
//一定要返回TRUE 否则无法预防
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}