Показать сообщение отдельно
  #2  
Старый 10.04.2008, 23:42
YoYo YoYo вне форума
Прохожий
 
Регистрация: 10.04.2008
Сообщения: 3
Репутация: 10
По умолчанию

Код:
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. Вызываешь:
Код:
RunStopHook(true);
3. Когда надо, выгружаешь:
Код:
RunStopHook(false);
База взята из книги Михаила Фленова 'Програмирование в Delphi глазами хакера'.
зы. В HTML не работает, там структура другая.
__________________
Если что я еще и математик
Ответить с цитированием