|
一般windows控件经过加密处理,在控件的消息中加入了对WM_GETTEXT进行处理,所以一般想得到密码框的文本都是加密的字符串!java可能处理方式不同
这里是个delphi对密码框处理WM_GETTEXT 消息的代码,你可以从中看到其中的奥秘!
下边是得到password密码框密码的源代码!你可以通过这段delphi代码得到你要的得到的password框的代码
// 显示鼠标当前所在的文本框内容
function ShowWindowText():string;
var
pPoint:TPoint;
WinText:string;
mTextChar;
hWnd:Integer;
begin
GetCursorPos(pPoint);
SetLength(WinText,256);
hWnd:=WindowFromPoint(pPoint);
GetWindowText(hWND,PChar(WinText),256);
SetLength(WinText,StrLen(PChar(WinText)));
result:=WinText;
end;
而windows有的密码框控件对这个消息进行了处理,下边是一个控件的代码:
unit uCEdit;
interface
uses Windows,StdCtrls,Messages,Classes;
TYPE
TCEdit=class(TEdit)
private
bEnable:boolean; // 允许使用
procedure WndProc(var Msg: TMessage);override;
public
constructor Create(AOwner: TComponent); override;
function MyGetText():string;
published
end;
procedure Register;
implementation
{ CEdit }
//注册控件
procedure Register;
begin
RegisterComponents('Additional', [TCEdit]);
end;
constructor TCEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// 禁止使用
bEnable:=false;
end;
function TCEdit.MyGetText: string;
begin
// 程序本身还是用允许的
bEnable:=true;
result:=Text;
end;
procedure TCEdit.WndProc(var Msg: TMessage);
begin
if (Msg.Msg=WM_GETTEXT) or (Msg.Msg=EM_GETLINE) then
begin
if bEnable then
begin
bEnable:=false;
inherited;
end;
end
else inherited;
end;
end.
所以你遇到这样的控件你是很难得到他的password的!其实winrunner获得属性,得到密码的情况类似!
对于java的情况我没有做实验,所以无法得出具体的情况!不过从自动化实现上来说我觉得得到一个密码框的密码,我觉得这需要考虑! |
|