顯示密碼編輯框中的密碼 (轉)

worldblog發表於2007-12-09
顯示密碼編輯框中的密碼 (轉)[@more@]

我們在使用時,經常會碰到一些密碼編輯框,輸入其中的文字都以“*”顯示。現在,有許多共享和自由軟體都可以實現隱藏密碼的正確顯示。究竟這是怎樣實現的呢!其實,這比較簡單,雖然這些資訊都以“*”顯示,但其內部還是以當初的字元表示,所以,我們只要用Windows 就可以實現。

  在Windows中,每一個視窗、都有它的名字(叫做Name或Window Text)。對於Form、Dialog Box、Message Box來說,名字就顯示在Title Bar中;對於Edit、Button、Static Control,名字顯示在他所佔的區域中。密碼編輯框本身就是個Edit控制元件,雖然顯示的是特殊字元,但名字屬性沒有變,還是輸入時的字元。Windows提供了兩個API函式來獲得這個名字:

  int GetWindowTextLength(HWND hWnd); // 得到名字的長度

  其中,hWnd :想要得到的那個視窗或控制元件的控制程式碼 handle

  int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount );// 得到名字

  其中,hWnd :想要得到的那個視窗或控制元件的控制程式碼 handle;

  lpString:存放名字的字串的地址

  nMaxCount :可複製的最大字元數

  下面以為例,說明它的實現過程。

  新建一Form,放置Label、Edit、Button各一個到Form中,將Edit1的PassChar屬性改為“*”,雙擊Button1:

  procedure TForm1.Button1Click(Sender: T);

  var

  Name:PChar; // 名字

  L:integer; // 名字的長度

  begin

  L:=GetWindowTextLength(Edit1.handle)+1; // 得到名字長度,並將長度加1

  GetMem(Name,L);//為將要得到的名字分配

  GetWindowText(Edit1.handle,Name,L);//得到名字

  label1.Caption:=String(Name); // 將得到的名字顯示於 Label1

  FreeMem(Name,0); // 釋放分配的記憶體

  end;

  經過執行,在Edit1中輸入的密碼就可透過Label1顯示出來。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章