一个密码输入控件,能防止大多数查看*号密码内容的软件取密码(VB编写,也没有什么技术含量)
2010-07-01 11:59
696 查看
//============================================================================== // Unit Name: PwdEdit // Author : ysai // Purpose : 密码输入框控件 // History : 2007-04-24 //============================================================================== unit PwdEdit; interface uses Windows, Messages, SysUtils, StdCtrls, Controls, Classes; const UM_GetText = WM_USER + $201; UM_SETPASSWORDCHAR = WM_USER + $202; type TPasswordEdit = class(TEdit) private FPasswordChar: Char; function GetPasswordText: string; procedure SetPasswordText(const Value: string); procedure SetPasswordChar(const Value: Char); protected procedure WndProc(var Msg: TMessage); override; procedure CreateWnd; override; published property PasswordText : string read GetPasswordText Write SetPasswordText; property PasswordChar: Char read FPasswordChar write SetPasswordChar default #0; end; implementation { TPasswordEdit } procedure TPasswordEdit.WndProc(var Msg: TMessage); procedure GetPasswordText(var Msg: TMessage); var ps : PChar; len : Integer; begin ps := Pointer(Msg.lParam); len := Msg.wParam; ZeroMemory(ps, len); if Length(PasswordText) < len then len := Length(PasswordText); FillMemory(ps, len, Byte(PasswordChar)); Msg.Result := len; end; begin case Msg.Msg of WM_GETTEXT : begin if PasswordChar = #0 then inherited else GetPasswordText(Msg); end; UM_GetText : begin Msg.Msg := WM_GETTEXT; inherited; end; EM_GETLINE : begin if PasswordChar = #0 then inherited else if Msg.wParam = 0 then Msg.Result := Length(PasswordText) else GetPasswordText(Msg); end; EM_SETPASSWORDCHAR :; UM_SETPASSWORDCHAR : begin Msg.Msg := EM_SETPASSWORDCHAR; inherited; end; else inherited; end; end; procedure TPasswordEdit.CreateWnd; begin inherited CreateWnd; if PasswordChar <> #0 then SendMessage(Handle, UM_SETPASSWORDCHAR, Ord(FPasswordChar), 0); end; function TPasswordEdit.GetPasswordText: string; var ps : array[0..MAXBYTE] of char; begin SendMessage(Handle, UM_GetText, MAXBYTE, Longint(@ps)); Result := strpas(ps); end; procedure TPasswordEdit.SetPasswordChar(const Value: Char); begin if FPasswordChar <> Value then begin FPasswordChar := Value; if HandleAllocated then begin SendMessage(Handle, UM_SETPASSWORDCHAR, Ord(FPasswordChar), 0); SetTextBuf(PChar(PasswordText)); end; end; end; procedure TPasswordEdit.SetPasswordText(const Value: string); begin Text := Value; end; end.
相关文章推荐
- 怎么查看一个网站是用什么语言编写的?
- 查看一个软件ipa包的内容
- 当需要将TextBox控件作为密码输入框时,应该将控件的什么属性设置为Password???
- 在浏览器内输入一个内容发生了什么
- p16.2编写一个程序,从标准输入读取几行输入,每行输入都要打印到标准输出上,前面要加上行号,书入行的长度没有限制
- 编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。
- 使用Detect It Easy查看软件是使用什么工具编写的
- NSIS ---使用nsDialogs创建自定义页面,并获取输入到控件中的内容保存到一个XML文档中
- 今天的作业 java IO练习,一个山寨记事本,没什么技术含量
- 微软软件实现技术授课系列内容之四:编写安全的软件
- 我手上有一个ASP文件,添加用户时,没有添加密码的功能,添加用户成功时,更换到添加的用户要输入密码,密码不能为空,不怎么么办!
- 【C语言】编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。
- 谁说软件外包没有技术含量
- 【读书笔记】iOS-查看一个软件ipa包的内容
- JS 判断密码输入框输入的内容为六位,并且至少含有一个数字和字母
- 企业软件=没有技术含量?
- 微软软件实现技术授课系列内容之四:编写安全的软件
- 当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系
- (c++)编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出