WEB开发网
开发学院软件开发Delphi 开发一个密码查看器 阅读

开发一个密码查看器

 2006-02-04 13:47:10 来源:WEB开发网   
核心提示:现在有很多软件都有密码输入对话框,上面显示的是*标识符,开发一个密码查看器,如果想查看其字符串并不难,下面我们就用delphi使用API函数来开发一个查看其密码字符的程序吧,以下是源代码,在delphi6.0+winXP测试通过,功能:当鼠标移动到密码处就会在程序的指定地方显示其字符串,问题一:当鼠标移动到密码对话框处

现在有很多软件都有密码输入对话框。上面显示的是*标识符。如果想查看其字符串并不难。下面我们就用delphi使用API函数来开发一个查看其密码字符的程序吧。

功能:当鼠标移动到密码处就会在程序的指定地方显示其字符串。

问题一:当鼠标移动到密码对话框处时查找出此处的控件句柄。这样才可以对这个对象进行操作.具体实现如下:

function gethwnd(): thandle;
var
  hwnd: thandle;
  wndpoint: tpoint;
begin
  try
   GetCursorPos(wndpoint); //获取鼠标指针
   hwnd:=WindowFromPoint(wndpoint);
   Result:=wndpoint
  except
   Result:=0;
  end;
end;

问题二: 根据获取的句柄得到此对象的密码字符。具体实现如下:

function getpass(var hwnd: thandle): string;
var
  passbuf: integer;
  passlong: longint;
  passText: PChar;
begin
  passlong:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0)+1; //获取此对象的长度
  GetMem(passText,passlong); //开辟一个内存区。存放数据长度为passlong
  passbuf:=LongInt(passtext); //获取此数据区的首地址
  SendMessage(hwnd,WM_GETTEXT,passlong,passbuf); //发送消息让此对象将密码数据存入首地址为passbuf的数据区。存入长度为passlong
  result:=passtext;
end;

这样主要问题都解决了。还可以使用GetClassName,GetWindowText等API函数将此对象的类、标题等都读出来。以下是源代码,在delphi6.0+winXP测试通过,仅供参考。


{-----------------------------pas内容--------------------------------------}
unit getwnd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus;

type
  TForm1 = class(TForm)
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Timer1: TTimer;
   Label5: TLabel;
   Label6: TLabel;
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   Shape1: TShape;
   Shape2: TShape;
   Shape3: TShape;
   Shape4: TShape;
   N2: TMenuItem;
   PRocedure Timer1Timer(Sender: TObject);
   procedure N1Click(Sender: TObject);
   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
   procedure FormCreate(Sender: TObject);
   procedure N2Click(Sender: TObject);
  private
   { Private declarations }
  public
   procedure Createparams(Var Params:TCreateParams);override;
   { Public declarations }
  end;

var
  Form1: TForm1;
  hwnd,htemp:THandle;
  point,mouse:TPoint;
  wndcaption:array[0..255] of char;
  wndclass:array[0..255] of char;
  fmove: boolean;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
  buf: integer;
  ret: longint;
  mText:PChar;
begin
  GetCursorPos(point);
  htemp:=WindowFromPoint(point);
  if hwnd<>htemp then
  begin
    hwnd:=htemp;
    GetClassName(hwnd,wndclass,256);
    GetWindowText(hwnd,wndcaption,256);
    if wndcaption='' then
    begin
     Ret:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0)+1;
     GetMem(mText,Ret);
     buf:=LongInt(mtext);
     SendMessage(hwnd,WM_GETTEXT,ret,buf);
     label4.Caption:=mText;
    end else
     label4.Caption:=wndcaption;
    label3.Caption:=inttostr(hwnd);
    label6.Caption:=wndclass;
  end;

end;

procedure TForm1.N1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fmove:=true;
  mouse.X:=x;
  mouse.Y:=y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fmove:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if fmove then
  begin
    top:=top+y-mouse.Y;
    left:=left+x-mouse.X;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  left:=screen.Width-width-3;
  top :=screen.Height-height-34;
end;

procedure TForm1.Createparams(var Params: TCreateParams);
var
  wndParnet: THandle;
begin
  Inherited CreateParams(Params);
  With Params do
  begin
  EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES;
  wndParnet:=GetDesktopWindow;
  end;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
  timer1.Enabled:=not timer1.Enabled;
  if timer1.Enabled then
    n2.Caption:='暂停'
  else
    n2.Caption:='开始';
end;

end.
{-------------------------------------------------------------------------}


{----------------------------dfm内容--------------------------------------}
object Form1: TForm1
  Left = 308
  Top = 302
  BorderStyle = bsNone
  Caption = 'xiewh_open'
  ClientHeight = 59
  ClientWidth = 179
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PopupMenu = PopupMenu1
  OnCreate = FormCreate
  OnMouseDown = FormMouseDown
  OnMouseMove = FormMouseMove
  OnMouseUp = FormMouseUp
  PixelsPerInch = 96
  TextHeight = 13
  object Shape1: TShape
   Left = 0
   Top = 0
   Width = 179
   Height = 2
   Align = alTop
   Pen.Color = clBlue
   OnMouseDown = FormMouseDown
   OnMouseMove = FormMouseMove
   OnMouseUp = FormMouseUp
  end
  object Label1: TLabel
   Left = 8
   Top = 11
   Width = 57
   Height = 13
   AutoSize = False
   Caption = #21477#26564#21495#65306
   Transparent = True
  end
  object Label2: TLabel
   Left = 8
   Top = 26
   Width = 64
   Height = 13
   AutoSize = False
   Caption = #26631#39064#21517#65306
   Transparent = True
  end
  object Label3: TLabel
   Left = 56
   Top = 12
   Width = 117
   Height = 13
   AutoSize = False
   Transparent = True
  end
  object Label4: TLabel
   Left = 56
   Top = 25
   Width = 117
   Height = 13
   AutoSize = False
   Transparent = True
  end
  object Label5: TLabel
   Left = 8
   Top = 40
   Width = 56
   Height = 13
   Caption = #31867#12288#21517#65306
   Transparent = True
  end
  object Label6: TLabel
   Left = 56
   Top = 39
   Width = 117
   Height = 13
   AutoSize = False
   Transparent = True
  end
  object Shape2: TShape
   Left = 0
   Top = 0
   Width = 2
   Height = 73
   Pen.Color = clActiveCaption
   Pen.Width = 2
  end
  object Shape3: TShape
   Left = 0
   Top = 57
   Width = 179
   Height = 2
   Align = alBottom
   Pen.Color = clBlue
   Pen.Width = 2
  end
  object Shape4: TShape
   Left = 177
   Top = -1
   Width = 2
   Height = 71
   Pen.Color = clBlue
   Pen.Width = 2
  end
  object Timer1: TTimer
   Interval = 100
   OnTimer = Timer1Timer
   Left = 120
   Top = 32
  end
  object PopupMenu1: TPopupMenu
   Left = 88
   Top = 32
   object N2: TMenuItem
    Caption = #26242#20572
    OnClick = N2Click
   end
   object N1: TMenuItem
    Caption = #36864#20986
    OnClick = N1Click
   end
  end
end

{--------------------------------------------------------------------------}

Tags:开发 一个 密码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接