Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hook 
:(
    Опции темы
observateur
Дата 15.6.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Прошу помочь всем кто знает как работает принцип программы TranslateIt, кто не знает могу подсказать, что с помощью этой программы можно встретив незнакомое слово в тексте и вам не надо отвлекаться от чтения и искать перевод в словаре, просто подведите указатель мыши к незнакомому слову и тут же получите перевод. Так что если кто знает подскажите пожалуйста как начать эту программу или же какие элементы программирования я должен использовать здесь. Заранее спасибо!
(с виндовском хуками не мношко разбираюс.)
PM MAIL   Вверх
observateur
Дата 16.6.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Люди добрые...помогите.... с чего начать
PM MAIL   Вверх
Virtuals
Дата 17.6.2008, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



observateur, 
нужна ловушка в длл
ниже куски кода для примера, убирает звездочки в поле ввода пароля, тебе просто нужно будет использовать 
Код

{}
function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: LongInt): LRESULT;stdcall;
var tmr:LRESULT;
begin
   tmr:=SendMessage(hWnd, WM_GETTEXT, WPARAM(nMaxCount),lparam(lpString));
   result:=tmr;
end;
{}



Код

   SysHook := SetWindowsHookEx(WH_GETMESSAGE,
      @SysMsgProc, HInstance, 0);


function SysMsgProc(code : integer; wParam : word;
 lParam : longint) : longint; stdcall;
Var
 Msg:TMsg;
begin
//Передать сообщение другим ловушкам в системе
 CallNextHookEx(SysHook, Code, wParam, lParam);
//Проверяю сообщение

 if code = HC_ACTION then
  begin
//Получаю идентификатор окна сгенерировавшего сообщение
   Wnd := TMsg(Pointer(lParam)^).hwnd;

   if TMsg(Pointer(lParam)^).message = WM_KEYDOWN then
//Проверяю тип сообщения.
//Если была нажата левая кнопка мыши
//и удержана кнопка Control, то …
   if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
   if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
    begin
// Убрать в окне отправившем сообщение звёздочки
     SendMessage(Wnd, em_setpasswordchar, 0, 0);
//Перерисовать окно.
     InvalidateRect(Wnd, nil, true);


PM MAIL ICQ   Вверх
Virtuals
Дата 30.6.2008, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



ну вот полный код, неприлизан, так что это только пример 

Код

library HHC;

uses
  Windows,
  Messages,
  SysUtils;

var
 SysHook : HHook = 0;
 Wnd : Hwnd = 0;
Procedure SaveDTA(const xText:string);
var
 hFile, Written, Error: DWORD;
 datetime: string;
 usr, dattim: array [0..255] of char;
var
  SystemTime: TSystemTime;
begin
 Error := GetLastError();
 GetLocalTime(SystemTime);
  datetime:= DateTimeToStr(SystemTimeToDateTime(SystemTime));
 lstrcpy(dattim, pchar(datetime));

 lstrcpy(usr, pchar(xText));
 hFile := CreateFile(PChar('c:\1212.txt'), GENERIC_WRITE,
                           0, nil, OPEN_ALWAYS, 0, 0);
 SetFilePointer(hFile, 0, nil, FILE_END);
 WriteFile(hFile, dattim, Length(datetime), Written, nil);
 WriteFile(hFile, usr, Length(xText), Written, nil);
 CloseHandle(hFile);
 SetLastError(Error);
end;
//-------------
//-------------
function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: LongInt): LRESULT;stdcall;
var tmr:LRESULT;
begin
   tmr:=SendMessage(hWnd, WM_GETTEXT, WPARAM(nMaxCount),lparam(lpString));
   result:=tmr;
end;
//======================

function SysMsgProc(code : integer; wParam : word;
 lParam : longint) : longint; stdcall;
Var
 Msg:TMsg;
 Mytext:string;
 buff: ARRAY [0..127] OF Char;

begin
//Передать сообщение другим ловушкам в системе
result:= CallNextHookEx(SysHook, Code, wParam, lParam);

//Проверяю сообщение
 if code = HC_ACTION then
  begin
   Msg:=TMsg(Pointer(lParam)^);

   //Если была нажата левая кнопка мыши
   //и удержана кнопка Control, то …
   if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
   if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
            begin
//Получаю идентификатор окна сгенерировавшего сообщение
   Wnd := TMsg(Pointer(lParam)^).hwnd;
GetWindowText(Wnd, buff, sizeof(buff));

         Mytext:='*'+inttohex(code ,4)+'/'
                    +inttohex(Msg.wParam ,4)+'/'
                    +inttohex(Msg.lParam ,4)+'/'
                    +BUFF+#$0d+#$0a;
        SaveDTA(Mytext);
        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 name 'RunStopHook';

begin
end.


ну и запускалка
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure RunStopHook(State : Boolean) stdcall; external 'HHC.dll' name 'RunStopHook';
var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
RunStopHook(true);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
RunStopHook(false);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
RunStopHook(false);
end;

end.




а вот с тем как получить именно выделеное слово, или определить над каким словом курсор, пользуйте поиск по форуму, тема уже подымалась

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.