Jak odczytać zamaskowany tekst z kontrolki edycyjnej
-=JaCkObS=-
Często w aplikacjach, programiści używają maskowania tekstu wpisanego w kontrolce edycyjnej (np. podczas wpisywania hasła). Najczęściej taki tekst jest maskowany znakiem *. Poniższy kod umożliwia odczytanie rzeczywistego tekstu wpisanego przez użytkownika.
Najpierw musimy ustawić położenie okna (najlepiej w OnActivate
formy):
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_NOACTIVATE);
Wrzucamy na formę 2 edity, checkbox i timer (w nim będzie funkcja odczytywania)
A teraz kod odczytujący tekst:
//wg mnie najlepiej to zrobić w timerze ;p
var
Uchwyt : HWND;
NazwaKlasy : String;
DlugBufora : DWORD;
buffer : string;
TxtLength : integer;
begin
Uchwyt:=WindowFromPoint(Mouse.CursorPos);
DlugBufora := 64;
SetLength(NazwaKlasy, DlugBufora);
GetClassName(Uchwyt,Pchar(NazwaKlasy),DlugBufora);
Edit1.Text:='Nazwa: '+NazwaKlasy;
PostMessage( Uchwyt, EM_SETPASSWORDCHAR, 0, 0 );
TxtLength := SendMessage(Uchwyt, WM_GETTEXTLENGTH, 0, 0);
inc(TxtLength, 1);
SetLength(buffer, TxtLength);
SendMessage(Uchwyt, WM_GETTEXT,TxtLength,longint(@buffer[1]) );
Edit2.Text:='Tekst: '+buffer;
if CheckBox1.Checked=false then // jesli nie wlaczony "BRUTAL"
exit;
for TxtLength:=1 to 300000 do
begin
if CheckBox1.Checked=false then
exit;
PostMessage( TxtLength, EM_SETPASSWORDCHAR, 0, 0 );
end;
end;