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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хук в разных ОС 
:(
    Опции темы
<Spawn>
Дата 30.10.2003, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


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

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



Сделал хук дял перехвата запуска одной проги. В ХП все нормально работает. Если же попробовать запустить прогу в 98 или МЕ, то она завершается с критической ошибкой. Причем в Хуке я учел, что до Win 2000 нужно было его Хендл делать доступным для всех процессов, например через Memory Mapped Files.

Вот код, работающий в ХП:
Код
library ArtHook;

uses UArtHook;

exports
GetID,
SetHook,
FreeHook;

begin
end.


Код
unit UArtHook;

interface

uses
 SysUtils,
 Windows,
 UVariables;
 {Dialogs;}

 const
DataSize=SizeOf(Integer);
HookHandleName='hHookHandleName';

var
hHook:PHandle;
hMapFile:THandle;
Hooked:Boolean=False;

function GetID:integer;stdcall;
function SetHook:Boolean; stdcall;
function FreeHook:Boolean; stdcall;

implementation



function CBTProc(Code:integer;wParam:Integer;lParam:Integer):longint; stdcall;
var
ClassName:array[0..255] of AnsiChar;
FileName:array[0..255] of AnsiChar;
hFile:THandle;
wPrm:Integer;
begin
if code < 0 then
begin
  Result:=CallNextHookEx(hHook^, Code, wParam, lParam);
  Exit;
end;

case Code of
  HCBT_CREATEWND:
   begin
     GetClassName(wParam, ClassName, 256);

     if (AnsiCompareStr(ClassName, XXX_MAIN_CLASS)=0) then
     begin
       Result:=1;
       CallNextHookEx(hHook^, Code, wParam, lParam);
       Exit;
     end;

     if (AnsiCompareStr(ClassName, XXX_MAIN_CLASS)=0) then
     begin
       if (FindWindow(XXX_MAIN_CLASS, nil)=0) then
       begin
        // GetModuleFileName(GetModuleHandle(nil), FileName, 256);
         try
           hFile:=CreateFile(FileName, GENERIC_READ or GENERIC_WRITE,
                             0 ,nil,OPEN_EXISTING,0,0);
           wPrm:=Integer(GetFileSize(hFile,nil)=XXX_FILE_SIZE);
           SendMessage(FindWindow('какая - то прога',nil),WM_XXX_FS_INVALID, wPrm, 0);
         finally
           CloseHandle(hFile);
         end;
       end
       else
       begin
         Result:=1;
         CallNextHookEx(hHook^, Code, wParam, lParam);
         Exit;
       end;
     end;

   end;
 end;    

Result:=CallNextHookEx(hHook^, Code, wParam, lParam);
end;

function SetHook:Boolean; stdcall;
begin
  hHook^:=SetWindowsHookEx(WH_CBT, @CBTProc, hInstance, 0);
  Result:=hHook^<>0;
end;

function FreeHook:Boolean; stdcall;
begin
   Result:=UnhookWindowsHookEx(hHook^);
end;

initialization
 hMapFile:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
                              0, DataSize, HookHandleName);
 if hMapFile=0 then
    raise Exception.Create('Error MMF Handle');
 hHook:=MapViewOfFile(hMapFile, File_Map_Write, 0, 0,
                      DataSize);

finalization
 UnMapViewOfFile(hHook);
 CloseHandle(hMapFile);

end.


Это сообщение отредактировал(а) <Spawn> - 30.10.2003, 15:08


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
gray_k
Дата 30.10.2003, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вполне возможно, что для работы под 98 или Me надо проект скомпилить в этих средах. Хотя я не уверен, что дело в этом.


--------------------
С уважением.
Gray.
PM MAIL   Вверх
<Spawn>
Дата 30.10.2003, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


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

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



gray_k На этих ОС нету Дельфи. Если что придется ставить там.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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