您的位置:首页 > 其它

【框架-MFC】MFC 显示和隐藏 星号密码 以及如何预防被查看

2016-05-11 14:33 501 查看
源码下载地址 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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: