Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка в глобальном хуке? [D6, Win95/98]


IGOREK ©   (2002-04-10 02:57:00) 

Происходит ошибка, когда переводим мышку за пределы окна программы:

unit HookUnit;

interface

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

function HookProc1(HookCode: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
HookHandle1: hHook;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function HookProc1(HookCode: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT;
begin
Result := CallNextHookEx(Form1.HookHandle1, HookCode, wparam, lparam);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle1 := SetWindowsHookEx(WH_Mouse, HookProc1, hInstance, 0);
end;
end.


Fellomena   (2002-04-10 13:21:00) [1]

...и только вDLL - иного пути нет.
(см. статьи на этом сайте)


IGOREK   (2002-04-10 13:14:00) [2]

Как же тогда сделать глобальный хук напр. на мышку? (через DLL?)


Fellomena   (2002-04-10 10:47:00) [3]

SetWindowsHookEx(WH_Mouse, HookProc1, hInstance, 0); // попытка установить глобальный хук, который по определению не возможно установить из *.exe файла
Alx2 правильно сказал:
SetWindowsHookEx(WH_Mouse, HookProc1, hInstance, GetCurrentThreadID); // устанавливает хук в контексте данного потока


Alx2   (2002-04-10 08:10:00) [4]

Вот это "SetWindowsHookEx(WH_Mouse, HookProc1, hInstance, 0);"
исправить надо на это
"SetWindowsHookEx(WH_Mouse, HookProc1, hInstance, GetCurrentThreadID);"

Иначе криво пытается сделаться глобальный хук.


Наверх

Титульная страница Поиск, карта сайта Написать письмо