Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
1-72372
SeF
2003-01-13 03:06
2003.01.23
биты...


14-72522
Щькодер
2003-01-07 08:50
2003.01.23
ActionList


1-72258
jiura
2003-01-14 19:11
2003.01.23
Создание в ScroolBox


14-72483
.:Grits:.
2003-01-01 16:25
2003.01.23
Help for Win32?


1-72396
MV-GROB
2003-01-13 12:10
2003.01.23
Не хочет работать COM DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский