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;

Kod wzięty z FAQ forum czytelników KŚ Eksperta

0 komentarzy