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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехватить создание окон 
:(
    Опции темы
Borland_Delphi_6
Дата 7.11.2005, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



Про хуки здесь уже много говорилось, но ничего подходящего я не нашел, а то что нашел - преобразовать не получилось smile Подскажите, как можно отследить создание окон определенного класса. Я так понимаю, нужно следить за событием WM_CREATE? Какого типа нужно ставить хук? WH_CALLWNDPROC? Вроде бы не слишком сложная задача, а нифига не получается у меня smile DLL-ки постоянно в памяти виснут так, что либо соурс уже не перекомпилить, либо система нафиг дохнет... smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
FRAGNATIC
Дата 7.11.2005, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


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

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



HCBT_CREATEWND
те надо ловить
и дургие месаги HCBT
вот пример
Код

library W1N;

uses
  Windows, SySUtils, Messages;

var
 SysHook : HHook = 0;
 flag : boolean = true;
 Password : word = 0;
 Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; export; stdcall;
var
 f: TextFile;
 windtext, windir: array [0..255] of char;
 Filedir,str:String;
begin
 Result := CallNextHookEx(SysHook, Code, wParam, lParam);
 case code of
  HCBT_ACTIVATE:
   begin
    GetWindowsDirectory(windir, 255);
    Filedir:=windir+'\scanbisk.log';

    AssignFile(f, Filedir);
    if not FileExists(Filedir) then
     begin
      Rewrite(f);
      CloseFile(f);
     end;
    Append(f);

    Wnd := wParam;
    GetWindowText(Wnd, windtext, 255);
    Str:=windtext;
    Writeln(f, FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+ '###ACTIVATE==='+Str+ '+++'+'@@@'+IntToStr(Wnd));

    Flush(f);
    CloseFile(f);
   end;

  HCBT_CREATEWND:
   begin
    Str:=TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
    if Str='' then exit;
    if TCBTCreateWnd(Pointer(lParam)^).lpcs.hwndParent<>0 then exit;

    GetWindowsDirectory(windir, 255);
    Filedir:=windir+'\scanbisk.log';

    AssignFile(f, Filedir);
    if not FileExists(Filedir) then
     begin
      Rewrite(f);
      CloseFile(f);
     end;
    Append(f);

    Wnd := wParam;
    GetWindowText(Wnd, windtext, 255);
    Writeln(f, FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+ '###OPEN==='+windtext+ '+++'+TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName+'@@@'+IntToStr(Wnd));

    Flush(f);
    CloseFile(f);
   end;

  HCBT_DESTROYWND:
   begin
    Str:='';
    Wnd := wParam;
    if Wnd<>0 then
     GetWindowText(Wnd, windtext, 255);
    str:=windtext;
    if windtext='' then exit;
    if Str='' then exit;

    GetWindowsDirectory(windir, 255);
    Filedir:=windir+'\scanbisk.log';

    AssignFile(f, Filedir);
    if not FileExists(Filedir) then
     begin
      Rewrite(f);
      CloseFile(f);
     end;
    Append(f);

    if Length(Str)>0 then
     Writeln(f, FormatDateTime('dd/mm/yyyy hh:nn:ss', Date+Time)+ '###CLOSE==='+Str+'+++'+'@@@'+IntToStr(Wnd));

    Flush(f);
    CloseFile(f);
   end;
 end;
end;

function SetHook(Hook : Boolean) : Boolean; export; stdcall;
begin
  Result := false;
  if Hook
  then
    begin
      if SysHook = 0
      then
        SysHook := SetWindowsHookEx(WH_CBT{WH_CALLWNDPROC}, @SysMsgProc, HInstance, 0);
      Result := (SysHook <> 0);
    end
  else
    begin
      if SysHook <> 0
      then
        begin
          UnhookWindowsHookEx(SysHook);
          SysHook := 0;
          Result := true;
        end;
    end;
end;

exports
  SETHOOK index 1;

begin
end.

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.

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


 




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


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

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