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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный хук... как реализовать 
V
    Опции темы
tigger
Дата 7.2.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Вообщем проблема в следующем.
Создаю программу на отлов открытия окон сторонними программами.
Прога состоит из двух модулей, сама программа и dll.

Отлавливаемых программ может быть несколько.

Так вот в своем приложении беру id процесса сторонней программы которую хочу контролировать на открытие окон, передаю этот id себе в dll и все работает как часы.

Но вот вопрос если отлавливаемых программ несколько 2 и более т.е будет несколько id процессов как осуществить передачу их в dll и следовательно отлов их окон.



--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 7.2.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



так же, как и при передаче одного id.
в чем собстно проблема то? как передать данные?



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 8.2.2007, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Да проблема при передаче 2 или более id.
У меня в приложении процедура которая стартует хук равна

procedure StartHook(id:THandle)

которая выполняется при нажатии на кнопку. А если процессов много как она будет выглядеть?


--------------------
user posted image
PM MAIL   Вверх
dumb
Дата 8.2.2007, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



тут два варианта: либо просто вызываешь эту же процедуру для новых id, либо делаешь по-настоящему глобальный хук - т.е. не указываешь tid, а разбор полетов делаешь в функции хука.
PM MAIL   Вверх
MetalFan
Дата 8.2.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



tigger, как-как) а пофантазировать?! я же написал, пользуй array [0..0] of....
RangeChecking обязательно должен быть отключен!!!
Код

type
  PPIDS = ^TPIDs;
  TPIDs = array [0..0] of dword;
var
  lPIDs: PPIDs;
  lCount: Integer;
  i: Integer;
  lTxt: array[0..1024] of Char;
begin
  //допустим надо передать 4 элемента.
  lCount := 4;
  //4 байта, или можно написать SizeOf(DWORD)
  GetMem( lPIDs, lCount*4 );

  // "счетчик". делфи не дает напрямую по индексу обращаться к >0 элементам такого массива
  i := 0;
  //присваяеваем нужные значения. можно в цикле
  //____обязательно отключить RangeCheking____!!!!
  {$R-}
  lPIDs^[i] := 1;
  Inc(i);
  lPIDs^[i] := 2;
  Inc(i);
  lPIDs^[i] := 4;
  Inc(i);
  lPIDs^[i] := 8;
  //все, отдаешь Size и lPIDs куда надо...
  //SetHook( lPIDs, lCount*4 );
  FreeMem( lPIDs, lCount*4);

как "принять", разберешься?
учти, тебе еще в ловушку в других процессах нужно эти данные передать, через MMF например.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 8.2.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



MetalFan, очень ценную информацию дал.

А как потом раскидать их по MMF по отдельным файлам.
В один lPIDs а в другой размер массива, я что-то делал ошибка вылетает на функции фильтре.
 smile 


Это сообщение отредактировал(а) tigger - 8.2.2007, 19:14


--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 8.2.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(tigger @  8.2.2007,  19:14 Найти цитируемый пост)
А как потом раскидать их по MMF по отдельным файлам

создается именованный MMF в приложении установившем хук, а остальные только читают.
ты представляешь себе, как глобальные хуки вообще "фунцыклируют"?
когда устанавливаешь глобальную ловушку, библиотека, содержащая функцию-фильтр проецируется во все процессы в системе...
таким образом все специфические для процесса данные такие, как всяческие хэндлы (MMF, окон и проч.объектов системы) становятся непоределенными. Глобальные переменные содержат мусор и проч...
значит в момент "присоединения" библиотеки к процессу тебе нужно получить все необходимые данные из созданного ранее при инициализации ловушки MMF.

Цитата(tigger @  8.2.2007,  19:14 Найти цитируемый пост)
я что-то делал ошибка вылетает на функции фильтре

показывай, что делал ;)

з.ы. могу конечно пример дать, хотя в принципе в сети они есть. остается только найти и адаптировать под свои нужды ;)
да и хотелось бы чтоб сам разобрался большей частью... а я только направление могу дать и ошибки помочь подправить.


Это сообщение отредактировал(а) MetalFan - 8.2.2007, 20:03


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 9.2.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Вообщем что я написал
В приложении.

Код

  type
  Process_id = ^T_Id;
  T_Id = array [0..0] of THandle;
  
  pcount = ^count;
  count = integer;

var
  Hide_Process : Process_id;
  leng :pcount;

//наполняю переменные Hide_Process 
//и leng тут ошибок нет

//и вызываю функцию в dll

    StartHooks(Hide_Process, leng);



теперь что имеем в dll

Код

type
  Process_id = ^T_Id;
  T_Id = array [0..0] of THandle;
  pcount = ^count;
  count = integer;

  Hide_id:Process_id;
  length : pcount;

procedure StartHooks(P:Process_id; count:pcount);
begin
  hMemFile1 := CreateFileMapping($FFFFFFFF, // $FFFFFFFF gets a page memory file
      nil,                                   // no security attributes
      PAGE_READWRITE,          // read/write access
      0,                                     // size: high 32-bits
      SizeOf(integer),               // size: low 32-bits
      'Glob');

             length := MapViewOfFile(hMemFile1, FILE_MAP_WRITE, 0, 0, 0);
             length := count;


  hMemFile := CreateFileMapping($FFFFFFFF, // $FFFFFFFF gets a page memory file
      nil,                     // no security attributes
      PAGE_READWRITE,          // read/write access
      0,                       // size: high 32-bits
      length^*SizeOf(THandle),   // size: low 32-bits
      'Global7v9k');

           Hide_id := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);


       {$R-}
       
           for i := 0 to length^ - 1 do
           begin
             Hide_id^[i] := P^[i];
           end;

                        CBT_hook:= SetWindowsHookEx(WH_CBT, @hook, hInstance, 0);
                        if CBT_hook = 0 then begin
                           messagebox(0,'hmmm..','ERROR',mb_iconhand);
                           Exit;
                        end;// else

end;
//здесь ошибок нет все приходит

//в функции фильтре данных нет

function hook(c0de:integer; wParam: word; lParam : longint): Lresult; stdcall;
var
begin
          hMemFile1  := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'Glob');
          length := MapViewOfFile(hMemFile1, FILE_MAP_ALL_ACCESS, 0, 0, Sizeof(integer));

          if hMemFile1 = 0 then messagebox(0,'Ошибка','Ошибка',mb_ok);
          

          hMemFile  := OpenFileMapping(FILE_MAP_WRITE, False, 'Global7v9k');
          Hide_id := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, length^*Sizeof(THandle));

                GetWindowThreadProcessId(wParam, pProcID);
//далее мой код
end;

так вот в функции фильтре hook нет hMemFile1, length, hMemFile, Hide_id равны нулю
что не так делаю ли как можно это победить?




--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 9.2.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



да, ошибочки есть...да и некоторые места я бы по-другому написал.
явные ошибки (если я сам не ошибаюсь ;) ):
1) 
Цитата
//наполняю переменные Hide_Process 
//и leng тут ошибок нет

ну это ты так думаешь ;) давай код
2) После MapViewOfFile и "отправки" данных надо вызывать UnMapViewOfFile...

замечания:
1) зачем создавать 2!!! MMF? не проще ли отдать все за один раз в одной структуре?
2) зачем каждый раз в функции-ловушке открывать/считывать данные?
достаточно один раз считать, имхо. либо при "подгрузке" длл (см DLLProc), либо при первом вызове ф-ции-ловушки.
3) для "копирования" кусков памяти лучче имхо юзать Move

или давай так) приложи аттачем файлы этого проекта. я поправлю. и тоже приаттачу.
а то влом Ctrl+C/Ctrl+V жать много раз)

Это сообщение отредактировал(а) MetalFan - 9.2.2007, 15:15


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 9.2.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Знаешь явную ошибку здесь нашел это length := count; надо было так length^ := count^; а насчет всех твоих советов я попробую если не пойдет приложу, а то так обучения нет забудется скоро.




--------------------
user posted image
PM MAIL   Вверх
tigger
Дата 19.2.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



MetalFan, посмотри код там приложение с dll и тестовое приложение которое нужно словить, но что-то не идет. В чем проблема.

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  hook2.rar 87,47 Kb


--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 19.2.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(tigger @  19.2.2007,  15:52 Найти цитируемый пост)
но что-то не идет

а вот здесь пжалуста по подробнее ;)
з.ы. + посмотрю попозже аттач


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
dumb
Дата 19.2.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



ух. сильно все перепутано...

примерная схема:

хост-приложение:
Код

 hdll = LoadLibrary
 сбор нужных pid'ов
 CreateFileMapping
 MapViewOfFile
 запись pid'ов в mmf
 // dll_cbt_hook внеси в экспорт dll. в данной схеме достаточно только ее
 hook = SetWindowsHookEx(WH_CBT, @dll_cbt_hook, hdll, 0)


dll:
Код

var
 our_pid: boolean;

dll_cbt_hook:
 // кстати, первый параметр в CallNextHookEx игнорируется,
 // посему не нужно его "таскать" везде, а просто ставить 0.
 if not our_pid then result = CallNextHookEx; exit;
 работа...

Dll_Process_Attach:
 our_pid = false
 hMapFile = OpenFileMapping
 if hMapFile = 0 exit;
 pids = MapViewOfFile
 cpid = GetCurrentProcessId
 идем по массиву и ищем cpid, если нашли - our_pid = true
 UnmapViewOfFile(pids)
 CloseHandle(hMapFile)


ps. 
Цитата(tigger @  19.2.2007,  15:52 Найти цитируемый пост)
Application.MessageBox('В Demo версии можно скрывать не более 2-х процессов!','Внимание!',mb_ok);

smile

PM MAIL   Вверх
MetalFan
Дата 19.2.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



dumb, опередил) да уж, код не блещет наглядностью
з.ы. ошибка как минимум в том, что не сделано UnmapViewOfFile

Это сообщение отредактировал(а) MetalFan - 19.2.2007, 17:18


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 20.2.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



dumb, по подробнее можно.


--------------------
user posted image
PM MAIL   Вверх
dumb
Дата 20.2.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(tigger @  20.2.2007,  12:55 Найти цитируемый пост)
dumb, по подробнее можно. 

схема достаточно подробна. рассказывай, что в ней тебе непонятно.

ps. эта фраза
Цитата(MetalFan @  19.2.2007,  17:17 Найти цитируемый пост)
да уж, код не блещет наглядностью

относилась к твоему коду, а не к моей схеме... smile
PM MAIL   Вверх
tigger
Дата 20.2.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Так то все стало понятно отлов появления на панели задач сделал, а как теперь в тестовом приложении словить появление окна формы.
Код прилагаю.

Да еще без ide среды запускаешь проект ошибка обращения к памяти dll вылетает.

Это сообщение отредактировал(а) tigger - 20.2.2007, 17:52

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  hook3.rar 35,59 Kb


--------------------
user posted image
PM MAIL   Вверх
dumb
Дата 20.2.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



tigger, основное твое непонимание:
CreateFileMapping создает область памяти. MapViewOfFile - отображает эту область в адресное пространство твоего процесса.
т.е. ты не должен выделять память для ArrHide, и работать с этим массивом нужно после CreateFileMapping/MapViewOfFile. причем в схеме, которую я приводил, это вроде как достаточно очевидно.

вобщем, в dll у тебя правильно сделано, если убрать GetMem. относительно массива pid'ов: делай его размер на один элемент больше и последний эл-т делай = 0. в dll отловишь конец массива именно по этому нулевому эл-ту.

StopHookProc вызываешь неинициализированный - это остался "хвост" от прошлой версии dll. сделай обычную процедуру с таким же именем:
Код

procedure StopHookProc;
begin
  UnhookWindowsHookEx(hook);
  UnmapViewOfFile(ArrHide);
  CloseHandle(hMemFile);
end;

PM MAIL   Вверх
MetalFan
Дата 20.2.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



+ ПОКА не будет сделано UnmapViewOfFile, данные, что ты поместил в отораженную область памяти у себя в процессе, будут недоступны другим процессам(читай-хукам в других процессах), AFAIK.
p.s. хотя кажется я гоню) но главное не забыть про синхронизацию

Это сообщение отредактировал(а) MetalFan - 20.2.2007, 22:16


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 21.2.2007, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Я не понял почему этот код не отлавливает появление главного окна в моем тестовом приложении. 


--------------------
user posted image
PM MAIL   Вверх
dumb
Дата 21.2.2007, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(tigger @  21.2.2007,  02:05 Найти цитируемый пост)
Я не понял почему этот код не отлавливает появление главного окна в моем тестовом приложении.

потому, что он с кучей ошибок(часть которых тебе указали) и, как следствие, не является рабочим.

ты определись, что ты хочешь: сам что-то понять и сделать или чтобы за тебя все сделали, а ты бы только вставил "if count > 2 then ShowMessage('это demo-версия')"? - если последнее, то я - пас.
PM MAIL   Вверх
tigger
Дата 21.2.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



Спасибо за ответ.

Это сообщение отредактировал(а) tigger - 22.2.2007, 12:32


--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 21.2.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



причеши код, а?
честно говоря, с кодом, написаным ТАКИМ стилем ковыряться нет никакого удовольствия и/или желания(
если приведешь в читаемый вид, то посмотрю ;)

Код

function cbt_hook(c0de:integer; wParam: word; lParam : longint): LResult; stdcall;
var
pProcID :THandle;
i:integer;
begin
ishide:=false;
if c0de >= 0 then
begin  //1
              //отлов вновь показываемых окон
    if c0de = HCBT_ACTIVATE then
           //берем дескриптор владельца и его имя
    begin

                   if ishide = true then
                       begin
                          Result:= 1;
                          ishide:=false;
                          ShowWindow(wParam,SW_HIDE);
                          CallNextHookEx(0, c0de, wParam, lParam);
                          Exit;
                       end else
                           begin
                           result := CallNextHookEx(0, c0de, wParam, lParam);
                           exit;
                           end;                         //end;
                
      end;
end else  //__1
begin
//Вызываем следующую ловушку в цепочке ловушек Windows
result := CallNextHookEx(0, c0de, wParam, lParam);
exit;
end;

трудно чтоли отформатировать так: ??
Код

//функция ловушка показа окон
function cbt_hook(c0de:integer; wParam: word; lParam : longint): LResult; stdcall;
var
  pProcID :THandle;
  i:integer;
begin
  ishide:=false;
  if c0de >= 0 then
  begin  //1
    //отлов вновь показываемых окон
    if c0de = HCBT_ACTIVATE then
    //берем дескриптор владельца и его имя
    begin
      if ishide = true then
      begin
        Result:= 1;
        ishide:=false;
        ShowWindow(wParam,SW_HIDE);
        CallNextHookEx(0, c0de, wParam, lParam);
        Exit;
      end
      else
      begin
        result := CallNextHookEx(0, c0de, wParam, lParam);
        exit;
      end;                         //end;
    end;
  end
  else  //__1
  begin
    //Вызываем следующую ловушку в цепочке ловушек Windows
    result := CallNextHookEx(0, c0de, wParam, lParam);
    exit;
  end;
  {Вызываем следующую ловушку в цепочке ловушек Windows}
  Result := CallNextHookEx(0, c0de, wParam, lParam);
End;

хотя зачем столько exit'ов и проверок?

Код

    Dll_Process_Attach :
     begin

     GetMem(ArrHide,2*sizeof(THandle)); //ЗАЧЕМ это здесь?
     hMemFile  := OpenFileMapping(FILE_MAP_WRITE, False, 'Global');
     ArrHide := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);
     pid := GetCurrentProcessId;
     {R-}

     for i := 0 to 2 do
     begin
     if ArrHide[i] = pid then begin ishide := true; break; end;
     end;

     UnmapViewOfFile(ArrHide);
     CloseHandle(hMemFile); //если MMF больше нигде не открыт, то он прекратит свое сущесвтование...
     
    end;


з.ы. добавлю - ошибок просто масса... причем порой из-за ужасного кода


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 21.2.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



MetalFan посмотри причесал вроде бы. Какие там ошибки там кода то мало я ничего не вижу?

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  hook3.rar 35,26 Kb


--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 21.2.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



tigger, ММ.. что причесал? не вижу никакого причесывания.

ладно, в кратце по ошибкам.
в dll:
1) где выделяется/освобождается память под PHookRec?
2) почитай( в мсдн например) как правильно работать с хуком WH_CBT. у тебя бред написан, imho
3) в DllEntryPoint что-то тоже както неочень хорошо написано.

проведи рефаторинг кода или забрось программирование...
код написан просто УЖАСНО. 
1) код отформатирован абсолюьно нечитаемо и не наглядно
2) названия локальных/глобальных переменных/полей классов ничем не отличаются
3) весь код в классах форм "свален" в обработчики событий...
4) и т.д. и т.п.

з.ы. былоб время, причесал бы немного твой код. но время=деньги... 
если хошь, могу баксов за 10-20 довести до рабочего состояния твой проектик ;)

Это сообщение отредактировал(а) MetalFan - 21.2.2007, 18:34


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
tigger
Дата 22.2.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

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



MetalFan, сомневаюсь что от форматирования кода зависит его работа, то что код в обработчиках это не смертельно.
PHookRec я уже не использую после подсказок "мозголома".
И все таки ошибка в чем то глобальном.
Всем спасибо, побольше бы таких учителей.


--------------------
user posted image
PM MAIL   Вверх
MetalFan
Дата 22.2.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(tigger @  22.2.2007,  01:56 Найти цитируемый пост)
сомневаюсь что от форматирования кода зависит его работа

зависит. еще как. 
ошибки гораздо проще находить. это как минимум.
Цитата(tigger @  22.2.2007,  01:56 Найти цитируемый пост)
ошибка в чем то глобальном

вот именно. на некоторые места, что содержат ошибки, я тебе уже указал. 
в таким образом оформленном коде их править мягкоговоря не удобно.
а рефакторингом за тебя заниматься никто не будет)
повторюсь:
Цитата(MetalFan @  21.2.2007,  17:04 Найти цитируемый пост)
1) код отформатирован абсолюьно нечитаемо и ненаглядно
2) названия локальных/глобальных переменных/полей классов ничем не отличаются
3) весь код в классах форм "свален" в обработчики событий...

к этому еще добавлю абсолютно не оправданное использование глобальных переменных.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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