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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при выполнении Hook 
:(
    Опции темы
FShadow
Дата 6.4.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 8.12.2006
Где: Беларусь, г. Минс к

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



Помогите разобраться с ошибкой при выполнении кода.

Значит суть ошибки следующая. Когда создаю дочернюю форму все проходит нормально.
При закрытии дочернего окна появляется ошибка:
First chance exception at $765D3843. Exception class EAccessViolation with message 'Access violation at address 76AAEE25 in module 'USER32.dll'. Read of address 00000000'. Process TestStend.exe (1528)

В чем ошибка? Помогите пожалуйста!!

Код

{**********Модуль хука*******************}
unit uHook;

interface

uses
  SysUtils, Classes, Windows, Messages, uTestForm;

function SetHook: boolean;
function StopHook: boolean;
function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt;

var
  MyHook: HHook = 0;

implementation



function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt;
begin
  if Code < 0 then
  begin
    Result := CallNextHookEx(MyHook, Code, WParam, Longint(Msg));
    Exit;
  end;
  if Code = HC_ACTION  then
   case Msg.message of
     // WM_MDICREATE создание дочернего MDI-окна
     WM_MDICREATE: Form1.ListBox1.Items.Add('Создание MDIChild');
    // WM_MDIDESTROY удаление дочернего MDI-окна
     WM_MDIDESTROY: Form1.ListBox1.Items.Add('Удаление MDIChild');
   end;
  CallNextHookEx(MyHook, Code, WParam, Longint(Msg));
  HookProc := 0;
  Exit;
end;


function SetHook: boolean;
begin
  MyHook:=SetWindowsHookEx(WH_CALLWNDPROC, @HookProc, 0, GetCurrentThreadID());
  if MyHook <> 0 then Result := True
    else Result := False;
end;

function StopHook: boolean;
begin
  if MyHook <> 0 then
  begin
    StopHook := UnhookWindowsHookEx(MyHook);
    MyHook:=0;
  end;
end;

end.


{**********Модуль Главной формы***************}
unit uTestForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uComp, CalcEdit, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ...
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses uHook, uMDIChild;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  TForm2.Create(Application).Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  StopHook;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  SetHook;
end;

end.

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


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 8.12.2006
Где: Беларусь, г. Минс к

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



Извиняюсь решение нашел сам.
Надо было вместо
Код

function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt;

объявить так
Код

function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt; stdcall;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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