Форум: "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