Windows system >> Windowsの知識 >  >> Windows XPシステムチュートリアル >> XPシステムの基本 >> Win2000 /XP /2003のパスワード検出器

Win2000 /XP /2003のパスワード検出器

  

Win98の下では、他のプログラムのパスワードボックスに対してSendMessage関数を使用して、このパスワードボックス内の次のWM_GETTEXTコマンド用のこのパスワードボックスの内容を取得できます。しかし、2000年以降、マイクロソフトのセキュリティに対する意識はやや強くなっているように見えますが、通常のウィンドウではこのコマンドを使用しますが、パスワードボックスでは機能しません。

ダイナミックリンクライブラリを作成することによって得られるものと似たようなプログラムはかなりたくさんありますが、それは非常に面倒です。つまり、次のコマンドを実行し、パスワードボックスのプロパティを削除してから内容を取得し、最後にパスワードボックスのプロパティを復元します。

{
アイテム:のWin2000 /XP /2003アスタリスクパスワード検出器
著者下:黄タオ[email protected]
日:2004年1月18日

interface uPassword;

インターフェース

はウィンドウズ、メッセージ、SysUtils、バリアント、クラス、グラフィック、コントロール、フォーム、ダイアログ、StdCtrls、ExtCtrlsを使用します。 Br>

type TfrmPassword = class(TForm)
edPassword:TEdit; //パスワードテキストボックスを表示
Timer1:TTimer; //Timer <プロシージャ> Timer1Timer(Sender:TObject);< private<プライベート宣言> {プライベート宣言}<パブリック宣言> end;
< p> var< fr> frmPassword:TfrmPassword;
< P>実装< Br>

{$ R * .dfm}

手順TfrmPassword.Timer1Timer(送信者:TObject); var s:pchar;
i、n:integer;
p: Tpoint; h:整数; c:整数; begin getcursorpos(p); //現在のカーソルの位置を取得するh:= windowfrompoint(p); ////ハンドルへのカーソルがn:= getwindowlong(h、GWL_STYLE); //ウィンドウのプロパティを取得する(nおよび$ 20)<> 0の場合、//パスワードであるかどうかを判断するBox
c:= sendMessage(h、EM_GETPASSWORDCHAR、0、0); //'' * ''などのパスワードボックスの現在の文字を取得する。PostMessage(h、EM_SETPASSWORDCHAR、0,0); //パスワードボックスの文字を空白に設定します。つまり、パスワードボックスのパスワード属性を削除します。

//これはPostMessageを使用する必要がありますが、SendMessageは使用できません。後者は無効です。
i: = sendmessage(h、WM_GETTEXTLENGTH、0,0); inc(i); //パスワード文字列の長さを取得
getmem(s、i); //メモリを割り当てる
sendmessage(h、WM_GETTEXT、 i、longint(s); //パスワード文字列を取得するedPassword.Text:= s; //パスワードをテキストボックスに入力するpostMessage(h、EM_SETPASSWORDCHAR、c、0); ////復元する元のパスワード属性 end; <終了>
<終了>
<プログラム>このプログラムは、Windows Server 2003、Delphi 7.0にあります。 Enterpriseでコンパイルされています。ただし、このプログラムはQQ ganmeのように保護されていないプログラムに対してのみ有効ですが、それに反するプログラムのためにはまだ実行することができません例えば、QQ2004 Betaのパスワードボックスは役に立ちません。 Win2000 /XP /2003のパスワードボックスのセキュリティも相対的なものであることがわかります。

Copyright © Windowsの知識 All Rights Reserved