{
POINT P;
::GetCursorPos(&P);//捕捉鼠標屏幕位置
//取得鼠標位置下窗口handle
HWND HWnd = ::WindowFromPoint(P);
//向此窗口送出"取得標題字符串"信息
char buffer[100];char Char;
Char = SendMessage (HWnd,EM_GETPASSWORDCHAR,0,0);//獲取密碼字符
PostMessage (HWnd,EM_SETPASSWORDCHAR,0,0);//取消密碼字符
Sleep (60);
SendMessage (HWnd,WM_GETTEXT,255,long(buffer));獲取真實密碼
PostMessage (HWnd,EM_SETPASSWORDCHAR,Char,0);還原密碼字符//顯現在Form1窗口的字符串對象上
Caption = buffer;
} 這裏用了壹個計時器,每隔100毫秒調用壹次上面的代碼。 我們已經看出來了,主要是幾個消息壞了我們的大事,如果我們能夠屏蔽這幾個消息,即可安全隱藏真實密碼。網上有很多屏蔽消息的方法,但都顯過於復雜,我的思路如下: 二、防範星號密碼查看器 我們可以從TEdit派生壹個新的組件,名字為TBugEyesEdit,然後修改其消息定義。在頭文件添加代碼如下: public:
__fastcall TBugEyesEdit(TComponent* Owner);
void __fastcall BugEyes(TMessage &Msg);//自定義消息處理函數
BEGIN_MESSAGE_MAP //消息影射
VCL_MESSAGE_HANDLER(EM_GETPASSWORDCHAR,TMessage,BugEyes)
VCL_MESSAGE_HANDLER(WM_GETTEXT,TMessage,BugEyes)
VCL_MESSAGE_HANDLER(EM_SETPASSWORDCHAR,TMessage,BugEyes)
END_MESSAGE_MAP(TEdit) //結束消息影射 然後在其cpp文件中添加如下代碼:void __fastcall TBugEyesEdit::BugEyes(TMessage &Msg)
{
Msg.Result =0;
} 最後安裝這個新的組件,並添加到自己的程序中,設置其PasswordChar屬性為“*”,然後運行程序,這時星號密碼查看器就失效了,無法再看到真實密碼。