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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват сообщений чужого окна. забрать добавленный текст 
:(
    Опции темы
_ls_
Дата 10.4.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравстуйте.
Есть чужая программа, в которой несколько дочерних окон. В одном из окон таблица, в которую добавляются строчки.
Как можно перехватить добавляемый текст в этом окне? Посмотрел программой Spy от VisualStudio приходит сообщения WM_GETTEXT, WM_SETTEXT. Как я понимаю нужно перехватить сообщение WM_SETTEXT, как это можно сделать?
PM MAIL   Вверх
Rennigth
Дата 10.4.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Эмс... Ну и ставь хук.  SetWindowsHook(Ex) с флагом  WH_CALLWNDPROC.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_ls_
Дата 10.4.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Скажу сразу, что в программировании я не очень разбираюсь, перехватом никогда не занимался
В __Wnd сохраняется хэндл нужного дочернего окна, MyWND - родительское окно.
Без фильтрации в перехватичике приходят все события и родительская программа вылетает.
С фильтраций вообще не произходит перехват.
В отладчике пытаюсь посмотреть что просходит в функции KeyHook, но не получается, точка остановки не работает.
фрагмент кода
Код

function KeyHook(CODE, WParam, LParam: DWORD): DWORD; stdcall;
var
  ServerWnd: THandle;
  ScanCode:integer;


  s,str:string;
  Wnd : HWND;
  Wnd1 : HWND;
begin
  if CODE = HC_ACTION then begin
    Wnd1 := TCWPSTRUCT(Pointer(lParam)^).hwnd;
    //Wnd:=TMsg(Pointer(lParam)^).hwnd;
    // фильтрация дочернего окна
    //if (Wnd = __Wnd) or (Wnd1 = __Wnd) then begin
    //if (Wnd = MyWND) or (Wnd1 = MyWND) then begin
      if TCWPSTRUCT(Pointer(lParam)^).message = WM_SETTEXT then begin
        s:=String(TCWPSTRUCT(Pointer(lParam)^).lParam);
        //log.Add(s)
        //MessageBox(0, PChar(s+IntToStr(__Wnd)), 'Message', 0);

        //ServerWnd:=FindWindow(nil,'Simple keylogger <7F3AB89>');
        //PostMessage(ServerWnd, WM_KEYEVENT, 0, integer(s));
      end;
    //end;
  end;

  Result:=CallNextHookEx(HookHandle, CODE, WParam, LParam);
end;

procedure SetKeyHook; stdcall; export;
var
  ThreadID, ProcessID: Cardinal;
begin

  MyWnd:=FindWindow(nil,'имя_нужного_окна'); //Находим главное окно
  if MyWnd=0 then begin
    MessageBox(0, 'HOOK1 НЕ установлен !', 'Message', 0);
    exit;
  end;
  ThreadID:=GetWindowThreadProcessId(MyWnd, ProcessID);

  PIDNeeded:=ProcessID;
  //поиск дочернего окна
  EnumWindows(@EnumWindowsProc1,0);


  log := TStringList.Create; // создаём лог

  if HookHandle=0 then
    HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, @KeyHook, HInstance,ThreadID);

  if HookHandle <> 0 then
    MessageBox(0, 'HOOK1 УРА установлен !', 'Message', 0)
  else
    MessageBox(0, 'HOOK1 НЕ установлен !', 'Message', 0)
    //HookHandle:=SetWindowsHookEx(WH_KEYBOARD, @KeyHook, hInstance, 0);

end;

procedure DelKeyHook; stdcall; export;
begin
  if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);
   HookHandle:=0;
  log.SaveToFile('C:\t.txt');
end;

exports
  SetKeyHook, DelKeyHook;

begin
end.

Подскажите, что я делаю не так, как правильно перехватить сообщение.
PM MAIL   Вверх
Rennigth
Дата 11.4.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



_ls_
Цитата

В одном из окон таблица

Что за таблица?
И Еще, в итоге, чего ты хочешь добиться?



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_ls_
Дата 11.4.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Таблица что-то типа StringGrid, туда добавляется новая строка, мне нужно перехватить эту строку.
PM MAIL   Вверх
Rennigth
Дата 11.4.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(_ls_ @  11.4.2010,  12:37 Найти цитируемый пост)
Таблица что-то типа StringGrid

Это ClassName таблицы?
 smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_ls_
Дата 11.4.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



чёт я ступил, компонент syslistview32 и ловить надо наверн событие LVM_INSERTITEM
Можно целиком пример как это сделать, ли хотя бы часть? )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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