Полезности в Delphi — HackZona.Ru

Полезности в Delphi

Полезности в Delphi

Тип статьи:
Со старой ХакЗоны.
Источник:

Итак, в статье я опишу несколько маленьких, но очень полезных вещей в дельфи.
Они могут пригодиться при написании больших проектов.


0.Отлавливаем нажатие на клавиши.
Как вы знаете нажатие на клавишу мыши можно отследить при события MouseDown. Нам же нужно отследить какая клавиша нажата и вывести ее на экран. Для этого существуют 3 процедуры (аналогичные мышке) это

KeyPress нажатие
KeyDown только нажатие
KeyUp отпускание клавиши

Создай новое приложение. Помести на форму 1 Label, и создай обработчик KeyDown для формы.

У этого события есть параметр Key сюда нужно записывать ANSII код клавиши. Все коды можно посмотреть здесь
www.realcoding.net/article/view/1857.
Так, а вот и обработчик:


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=51 then
Label1.Caption:='Ты нажал клавишу «3»';
end;


Теперь если жмакнешь по клавиши 3 появиться эта надпись.
Так вот. Думаю, ты понял, что отлавливать события нажатия на клавишу тут мы можем только у нашей формы или ее компонентов.

А если хочется и во всем Windows клавиши отлавливать.
Для этого существует API функция getasynckeystate в качестве параметра ей нужно указать виртуальный код клавиши, которую хотим отлавливать.
Вот список виртуальных кодов


vk_lbutton = $01;
vk_rbutton = $02;
vk_cancel = $03;
vk_mbutton = $04;
vk_back = $08;
vk_tab = $09;
vk_clear = $0c;
vk_return = $0d;
vk_shift = $10;
vk_control = $11;
vk_menu = $12;
vk_pause = $13;
vk_capital = $14;
vk_escape = $1b;
vk_space = $20;
vk_prior = $21;
vk_next = $22;
vk_end = $23;
vk_home = $24;
vk_left = $25;
vk_up = $26;
vk_right = $27;
vk_down = $28;
vk_select = $29;
vk_print = $2a;
vk_execute = $2b;
vk_snapshot = $2c;
vk_insert = $2d;
vk_delete = $2e;
vk_help = $2f;
>> vk_a — vk_z такие же, как и их ascii-эквиваленты: 'a' — 'z' ($41 — $5A)<<
>> vk_0 — vk_9 такие же, как и их ascii-эквиваленты: '0' — '9' ($30 — $39)}
vk_numpad0 = $60;
vk_numpad1 = $61;
vk_numpad2 = $62;
vk_numpad3 = $63;
vk_numpad4 = $64;
vk_numpad5 = $65;
vk_numpad6 = $66;
vk_numpad7 = $67;
vk_numpad8 = $68;
vk_numpad9 = $69;
vk_multiply = $6a;
vk_add = $6b;
vk_separator = $6c;
vk_subtract = $6d;
vk_decimal = $6e;
vk_divide = $6f;
vk_f1 = $70;
vk_f2 = $71;
vk_f3 = $72;
vk_f4 = $73;
vk_f5 = $74;
vk_f6 = $75;
vk_f7 = $76;
vk_f8 = $77;
vk_f9 = $78;
vk_f10 = $79;
vk_f11 = $7a;
vk_f12 = $7b;
vk_f13 = $7c;
vk_f14 = $7d;
vk_f15 = $7e;
vk_f16 = $7f;
vk_f17 = $80;
vk_f18 = $81;
vk_f19 = $82;
vk_f20 = $83;
vk_f21 = $84;
vk_f22 = $85;
vk_f23 = $86;
vk_f24 = $87;
vk_numlock = $90;
vk_scroll = $91;


Теперь кинь на форму таймер и установи интервал в 500 мс. Вот обработчик

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getasynckeystate($1b)<>0 then
Label1.Caption:='Вы нажали «ESC»';
end;

Думаю тут все понятно. Теперь при наличии мозгов можно написать простенький клавиатурный шпион.



1. Такссс с клавкой и разобрались. Теперь очередь мышки. Наверное, многие хотят использовать свои курсоры для мышки в программе. Особенно если пишешь маленькую игрушку. Сейчас мы с этим разберемся.


const
crMyCursor = 1; // объявление константы равной 1.
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadCursorFromFile(C: Курсор.ani);// собственно сама загрузка
Cursor := crMyCursor; // Устанавливаем курсор на форму
end;


Сначала загрузили курсор. Потом установили его в программе. Все.

Теперь мы будем менять расположение кнопок на мыши.
Для этих целей существует функция SwapMouseButton
У нее два аргумента либо true (поменять) либо false (обратно)


SwapMouseButton(true); // Поменять
SwapMouseButton(false); // Поменять обратно


2. Теперь защитим нашу форму паролем.

Сначала сделай форму неактивной (Enabled:=False;)
Далее создай обработчик Create и впиши туда


procedure TForm1.FormCreate(Sender: TObject);
var
Passwrd:string; // переменная для пароля
begin
if InputQuery('Окно ввода пароля','Введите пароль:',Passwrd) then //окно для ввода пароля
// Проверяем его:
if Passwrd = 'Delphi' then
Form1.Enabled:=true
else
if Passwrd <> 'Delphi' then
end;


Самое тут главное это окно для ввода пароля.
Потом едет проверка.


3. Узнаем путь, где лежит наша прога
Здесь есть 2 варианта.

Если в вашем приложении присутствует форма, то можно сделать так
Application.ExeName;


Если формы не подключены, существует функция
GetCurrentDirectory, которая возвращяет путь к нашей проге


DWORD GetCurrentDirectory(
DWORD nBufferLength, // размер буфера [in]
LPTSTR lpBuffer // буфер для текущей директории [out]


Вот пример char
path[100];// буфер
GetCurrentDirectory( 100, path );

И в переменной Path будет хранить путь к директории с нашей программой.

Вот собственно и все. Могу теперь откланяться


Нравится
Не нравится

9 комментариев

M9C
13:33
Спасибо)
23:19
100% чистейший плагиат! Видел эту статью... почти слово в слово!
19:47
Ну насчет слово в слово хз конечно НО:
Про то как защетить форму паролем опять откудо то списал (ИМХО конечно же)
А в целом статья шикарно получилась даже дибилы поймут наверное!
А про кей логер вообще кулл!
23:05
Гм... Гавно!!! Во первых доступ к сообщениям с помощью методов окна дольше, чем прямой доступ!
procedure Wm_PressKey(msg:Tmsg);message WM_KEYPRESS;

Во вторых для перехвата сообщений в винде используют технологию hooks...

В третих, статью только дыбилам и читать!
19:13
Из - за таких уродов как ты эти статьи никто и не пишет!!! Ты сам то до х.. написал ???
21:44
Неплохо так... Даже новички разберутся что к чему.
17:42
Норм -- тока вот кейлогера не написать таким образом - т.к сообщения перехватывает форма!
17:49
Тоесть форму нужно будет развернуть во весь экран. И то это не поможет если например будут печатать в блокноте или где то еще - ничего не перехватиться - нужно непосредственно выделить форму - тоесть кликнуть по ней - а затем писать - вот тогда - да,тоесть ничего таким способом не перехватить.
21:28
Отлично! Молодец! Спасибо!