! c 2013 .

PasswordChar обман Windows

12 2012

Многие из начинающих считают, что раз Дядя-VCL создал PasswordChar в таких объектах как TEdit,
значит это намертво скрытый от всех глаз набор символов.

Но разумеется это не так, по крайней мере для создателя программы

Ничего "хакерского" в этой статье не будет,  хотя, вероятно, судя по названию можно подумать иначе)

Если вы не работали с ClipBoard, то сегодня вы поймете как просто получить доступ к тексту в буфер обмена посредством VCL
(хотя на низком уровне работа с ClipBoard'ом - жуткая вещь)

Хотя желание написать данную статью появилось не столько из-за значимости ее содержания, сколько из-за реакции Windows на подобного рода обман. А почему я назвал это обманом вы сейчас поймете..

Приступим:


Для начала подключим

#include <ClipBrd.hpp>

Ничего особенного, элементарно получаем состояние клавиши CTRL в обработчике TEdit OnKeyDown, если Key == 'C', значит происходит копирование в буфер обмена.

Извлекать/записывать текстовую информацию в ClibBoard очень удобно функцией AsText
Код:

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
    if (GetKeyState(17)) {
        if (Key == 67) {
            Clipboard()->AsText=Edit1->Text;
        }
    }
}

Ну и наглядный результат:

 

Интересно увидев такую запись многие бы усомнились в ней? Ведь в буфере у нас прекрасно расположилось содержимое Edit'а! Вот вам пример дезинформирующих сообщений Windows!