Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

Уважаемые профи, помогите исправить ошибку....   Найти похожие ветки 

 
Slavik99   (2002-12-06 20:53) [0]

Ни как не могу понять почему в моей DLL"ке происходит ошибка при возвращении результата функции.
Вот код моей DLL"ки:

library SysHook;

uses SysUtils, Classes, WinTypes, WinProcs, Messages;

const
{пользовательские сообщения}
wm_MyMouseEvent = wm_User + 1;

var
SaveExitProc : Pointer;
{handle для ловушки}
HookHandle: hHook = 0;

function Mouse_Hook(Code: Integer; wParam: Word; lParam: Longint): longint;
var H: HWND;
begin
if wParam=wm_RButtonDown then
begin
{ищем окно по имени класса и по заголовку}
H := FindWindow("TForm1", "xxx");
SendMessage(H, wm_MyMouseEvent, 0, 0);
Result:=0;
end;
{На следующей строке происходит ошибка, система либо виснет
или перегружается, если мышь находится за пределами формы
загрузившей эту DLL"ку}
Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure LocalExitProc;
begin
if HookHandle<>0 then
begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;

exports Mouse_Hook;

begin
HookHandle:=SetWindowsHookEx(WH_SHELL, @Mouse_Hook, hInstance, 0);
if HookHandle = 0 then
MessageBox(0, "Невозможно создать ловушку!!!", "Ошибка", mb_Ok)
else
begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;
end.


Вот код моей программы, которая вызывает DLL"ку:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

const
wm_MyMouseEvent = wm_User + 1;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure WMMyMouseEvent(var M: TMessage); message wm_MyMouseEvent;
{ Public declarations }
end;

var
Form1: TForm1;
P: Pointer;

implementation

{$R *.dfm}

function Mouse_Hook(Code: Integer; wParam: Word; lParam: Longint) : Longint; stdcall; external "SysHook";

procedure TForm1.WMMyMouseEvent(var M: TMessage);
begin
Beep;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
P:=@Mouse_Hook;
end;

end.


Ксли кто знает как ставить Hook, пришлите пожалуйста работующий (проверенный) код.


 
Morfein ©   (2002-12-07 00:02) [1]

Замени HookHandle в CallNextHookEx(HookHandle, Code, wParam, lParam) на WH_SHELL


 
apay ©   (2002-12-07 21:27) [2]

Или я че то не понимаю, но вроде при объявлении function Mouse_Hook... должно быть stdcall, а оно у тебя fastcall (по умолчанию)


 
Slavik99   (2002-12-08 00:58) [3]

stdcall при объявлении function Mouse_Hook не помогает...


 
Юрий Зотов ©   (2002-12-08 11:08) [4]

Читайте статью Алексея Павлова на этом сайте.



Страницы: 1 вся ветка

Текущий архив: 2003.01.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-72029
Ahmad K
2002-12-28 00:39
2003.01.23
А можно без BDE?


4-72606
Evgeny
2002-12-06 10:54
2003.01.23
Файл CGI


14-72519
Oleg_Gashev
2003-01-07 00:35
2003.01.23
Новый вирус.


7-72547
Геннадий
2002-11-11 16:29
2003.01.23
Как перехватить сообщение, посланное конкретному Control у?


1-72391
GTR
2003-01-13 13:25
2003.01.23
Вопрос