Сделай сам: "Вскрывалка паролей"
17.12.2007 от Иван ШиркоTxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
if txtlength>0 then
begin
txtlength := txtlength + 1;
setlength (buffer, txtlength);
//записываем текст окна в buffer
sendmessage(WindowHandle, wm_gettext, txtlength, longint(@buffer[1]));
result := buffer;
end else result:='';
end;
Теперь, если мы вызовем эту функцию, записав в параметр идентификатор поля ввода пароля, то она возвратит нам сам пароль. Как узнать идентификатор нужного окна будет рассказано далее. А сейчас поговорим о втором способе извлечения пароля. Только в данном способе мы не запишем пароль в какую-либо переменную, а заставим поле ввода отобразить вместо звёздочек нормальные символы. Для этого нужно послать ему сообщение EM_SETPASSWORDCHAR. Вообще, это сообщение используется и для того, чтобы нормальный текст заменить каким-либо символом (обычно используются звёздочки). Далее приведена процедура, которая не просто показывает нормальный текст вместо звёздочек, но, если у выбранного поля ввода текст не зашифрован, то мы заменяем его звёздочками. Т.е., если для поля ввода пароля применить эту процедуру, то появятся нормальные символы, а если для того же поля повторить операцию, то текст опять превратится в звёздочки.
Procedure ShowPass(h:hwnd);
var
ch:integer;
i:integer;
begin
//узнаём, закодирован ли текст
ch:=SendMessage(h, EM_GETPASSWORDCHAR, 0, 0);
//если закодирован, то раскодируем текст, иначе кодируем звёздочками
if ch>0 then
Рубрики: Delphi, Сделай сам |
03.03.2008 в 09:00
[…] На первый вопрос я уже дал частичный ответ в статье Сделай сам: “Вскрывалка паролей”, но нам нужно копнуть немного глубже, а второй вопрос […]