Код:
library hackpass;
uses
Windows,
Messages,
clipbrd,
sysutils;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
var
s,s1: string;
hMem: THandle;
pMem: PChar;
r,g: integer;
begin
// Передать сообщение другим ловушкам в системе
CallNextHookEx(SysHook, Code, wParam, lParam);
// Проверяю сообщение
if code = HC_ACTION then
begin
// Получаю идентификатор окна сгенерировавшего сообщение
Wnd := TMsg(Pointer(lParam)^).hwnd;
// Проверяю тип сообщения.
// Если была нажата левая кнопка мыши и Ctrl+Shift
if ((TMsg(Pointer(lParam)^).wParam and MK_SHIFT) = MK_SHIFT) and ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
begin
SendMessage(Wnd, wm_cut, 0, 0);
if clipboard.hasformat(cf_text) then
s := clipboard.astext;
g := Length(s);
SetLength(s1,g);
for r := 1 to g do
case s[r] of
'q': s1[r] := 'й';
'Q': s1[r] := 'Й';
'w': s1[r] := 'ц';
'W': s1[r] := 'Ц';
'e': s1[r] := 'у';
'E': s1[r] := 'У';
'r': s1[r] := 'к';
'R': s1[r] := 'К';
't': s1[r] := 'е';
'T': s1[r] := 'Е';
'y': s1[r] := 'н';
'Y': s1[r] := 'Н';
'u': s1[r] := 'г';
'U': s1[r] := 'Г';
'i': s1[r] := 'ш';
'I': s1[r] := 'Ш';
'o': s1[r] := 'щ';
'O': s1[r] := 'Щ';
'p': s1[r] := 'з';
'P': s1[r] := 'З';
'[': s1[r] := 'х';
'{': s1[r] := 'Х';
']': s1[r] := 'ъ';
'}': s1[r] := 'Ъ';
'a': s1[r] := 'ф';
'A': s1[r] := 'Ф';
's': s1[r] := 'ы';
'S': s1[r] := 'Ы';
'd': s1[r] := 'в';
'D': s1[r] := 'В';
'f': s1[r] := 'а';
'F': s1[r] := 'А';
'g': s1[r] := 'п';
'G': s1[r] := 'П';
'h': s1[r] := 'р';
'H': s1[r] := 'Р';
'j': s1[r] := 'о';
'J': s1[r] := 'О';
'k': s1[r] := 'л';
'K': s1[r] := 'Л';
'l': s1[r] := 'д';
'L': s1[r] := 'Д';
';': s1[r] := 'ж';
':': s1[r] := 'Ж';
Chr(39): s1[r] := 'э';
'"': s1[r] := 'Э';
'z': s1[r] := 'я';
'Z': s1[r] := 'Я';
'x': s1[r] := 'ч';
'X': s1[r] := 'Ч';
'c': s1[r] := 'с';
'C': s1[r] := 'С';
'v': s1[r] := 'м';
'V': s1[r] := 'М';
'b': s1[r] := 'и';
'B': s1[r] := 'И';
'n': s1[r] := 'т';
'N': s1[r] := 'Т';
'm': s1[r] := 'ь';
'M': s1[r] := 'Ь';
',': s1[r] := 'б';
'<': s1[r] := 'Б';
'.': s1[r] := 'ю';
'>': s1[r] := 'Ю';
'й': s1[r] := 'q';
'Й': s1[r] := 'Q';
'ц': s1[r] := 'w';
'Ц': s1[r] := 'W';
'у': s1[r] := 'e';
'У': s1[r] := 'E';
'к': s1[r] := 'r';
'К': s1[r] := 'R';
'е': s1[r] := 't';
'Е': s1[r] := 'T';
'н': s1[r] := 'y';
'Н': s1[r] := 'Y';
'г': s1[r] := 'u';
'Г': s1[r] := 'U';
'ш': s1[r] := 'i';
'Ш': s1[r] := 'I';
'щ': s1[r] := 'o';
'Щ': s1[r] := 'O';
'з': s1[r] := 'p';
'З': s1[r] := 'P';
'х': s1[r] := '[';
'Х': s1[r] := '{';
'ъ': s1[r] := ']';
'Ъ': s1[r] := '}';
'ф': s1[r] := 'a';
'Ф': s1[r] := 'A';
'ы': s1[r] := 's';
'Ы': s1[r] := 'S';
'в': s1[r] := 'd';
'В': s1[r] := 'D';
'а': s1[r] := 'f';
'А': s1[r] := 'F';
'п': s1[r] := 'g';
'П': s1[r] := 'G';
'р': s1[r] := 'h';
'Р': s1[r] := 'H';
'о': s1[r] := 'j';
'О': s1[r] := 'J';
'л': s1[r] := 'k';
'Л': s1[r] := 'K';
'д': s1[r] := 'l';
'Д': s1[r] := 'L';
'ж': s1[r] := ';';
'Ж': s1[r] := ':';
'э': s1[r] := chr(39);
'Э': s1[r] := '"';
'я': s1[r] := 'z';
'Я': s1[r] := 'Z';
'ч': s1[r] := 'x';
'Ч': s1[r] := 'X';
'с': s1[r] := 'c';
'С': s1[r] := 'C';
'м': s1[r] := 'v';
'М': s1[r] := 'V';
'и': s1[r] := 'b';
'И': s1[r] := 'B';
'т': s1[r] := 'n';
'Т': s1[r] := 'N';
'ь': s1[r] := 'm';
'Ь': s1[r] := 'M';
'б': s1[r] := ',';
'Б': s1[r] := '<';
'ю': s1[r] := '.';
'Ю': s1[r] := '>';
else s1[r] := s[r];
end;
hMem := GlobalAlloc(GHND or GMEM_SHARE, Length(S1) + 1);
if hMem <> 0 then
begin
pMem := GlobalLock(hMem);
if pMem <> nil then
begin
StrPCopy(pMem, S1);
GlobalUnlock(hMem);
if OpenClipboard(0) then
begin
EmptyClipboard;
SetClipboardData(CF_TEXT, hMem);
CloseClipboard;
end
else
GlobalFree(hMem);
end
else
GlobalFree(hMem);
end;
SendMessage(wnd, wm_paste, 0, 0);
// Перерисовать окно.
InvalidateRect(Wnd, nil, true);
end;
end;
end;
end;
// Процедура запуска.
procedure RunStopHook(State : Boolean) export; stdcall;
begin
// Если State = true, то...
if State=true then
begin
// Запускаем ловушку.
SysHook := SetWindowsHookEx(WH_GETMESSAGE,
@SysMsgProc, HInstance, 0);
end
else// Иначе
begin
// Отключить ловушку.
UnhookWindowsHookEx(SysHook);
SysHook := 0;
end;
end;
exports RunStopHook index 1;
begin
end.
Если ты выделяешь текст и нажимаешь Ctrl+Shift и кликаешь, то текст транслитеруется. Основной блок заменяет каждый символ на нужный. Это все код dll-ки. Вызвать его из внешнего приложения:
1. Экспортируешь функцию:
Код:
procedure RunStopHook(State: Boolean) stdcall; external 'name_of_dll.dll' index 1;
2. Вызываешь:
3. Когда надо, выгружаешь:
База взята из книги Михаила Фленова 'Програмирование в Delphi глазами хакера'.
зы. В HTML не работает, там структура другая.