分享
 
 
 

开发一个密码查看器

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

现在有很多软件都有密码输入对话框。上面显示的是*标识符。如果想查看其字符串并不难。下面我们就用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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有