0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 3
1

Единоразовое отлавливание Клика Мыши

08.11.2012, 13:50. Показов 925. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!... Мне нужна помощь с Hook'ом.
Все работает если я использую его на рабочей форме. однако если щелчок производится вне формы то UnhookWindowsHookEx не срабатывает =((((


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
library Project2;
Uses Windows,Messages,SysUtils;
Var SysHook:HHook=0;
 
Function SysMsgProc(Code:Integer; WParam:LongInt; LParam:LongInt): Lresult;{:LongInt;} stdcall;
Var
  Msg:TMessage;
  foo: TPoint;
Begin
 IF (Code>=0) then
  Case TMsg(Pointer(LParam)^).Message OF
  //Case WParam of
   WM_LBUTTONUP:
   begin
   GetCursorPos(foo);
   UnhookWindowsHookEx(SysHook);
   SysHook:=0;
   CallNextHookEx(SysHook,Code,WParam,LParam);
   messagebox(0, PAnsiChar(inttostr(foo.x)+'!!!'+inttostr(foo.y)), 'МЭММмв', mb_iconhand);
   end
   else Result:=CallNextHookEx(SysHook,Code,WParam,LParam);
  End;
end;
 
procedure Hook(Flag:Boolean); export; stdcall;
Begin
 IF Flag then SysHook:=SetWindowsHookEx(WH_GETMESSAGE,@SysMsgProc,HInstance,0) Else
  Begin
   UnhookWindowsHookEx(SysHook);
   SysHook:=0;
  End;
End;
 
exports Hook;
 
 
{$R *.res}
 
begin
end.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;
 
type
  MyProcType = procedure (Flag: Boolean); stdcall;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  HDLL:HWND;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 IF Button=mbRight then ShowMessage('Right mouse key pressed');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var Hook: MyProcType;
Begin
 @Hook:=nil;
 HDLL:=LoadLibrary(PChar('project2.dll')); // загрузка DLL }
 IF HDLL>HINSTANCE_ERROR then            // если всё без ошибок, то
  Begin
   @Hook:=GetProcAddress(HDLL,'Hook');     // получаем указатель на необходимую процедуру
   Hook(True);
  End else MessageDlg('Ошибка при загрузке DLL.',mtError,[mbIgnore],0);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
Var Hook: MyProcType;
Begin
 @Hook:=nil;
 IF HDLL>HINSTANCE_ERROR then
  Begin                                   // если всё без ошибок, то
   @Hook:=GetProcAddress(HDLL,'Hook');  // получаем указатель на необходимую процедуру}
   Hook(False);                         //  вызываем нужную процедуру из DLL
  End;
End;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 Button2.Click;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2012, 13:50
Ответы с готовыми решениями:

Имитация клика мыши
Всем привет! Вообщем вопрос: Как при нажатии левой кнопки мыши с имитировать повторные? ...

Эмуляция клика мыши в координату
Программа эмулирует нажатия мыши. С кликом в текущие координаты курсора справляется, а если...

Отлов клика мыши вне формы
Привет.Что-то я уперся в угол а казалось все просто.Ответь те кто нибудь.Как создать обработчик: я...

Запрет клика правой кнопкой мыши в Delphi XE2
Здравствуйте столкнулся с такой проблемой. Нужно сделать запрет правой кнопки мыши. Код такой: ...

4
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
08.11.2012, 16:57 2
Delphi
1
HookHandle:=SetWindowsHookEx(WH_JOURNALRECORD, @Hook, HInstance, 0);
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 3
09.11.2012, 09:22  [ТС] 3
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Delphi
1
HookHandle:=SetWindowsHookEx(WH_JOURNALRECORD, @Hook, HInstance, 0);
а if тогда как делать?

Delphi
1
2
3
 IF (Code>=0) then
  Case TMsg(Pointer(LParam)^).Message OF
   WM_LBUTTONUP:
0
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
09.11.2012, 23:59 4
Так же и делай как делал
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 3
10.11.2012, 09:14  [ТС] 5
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
Так же и делай как делал
вообще так не работает. =(
0
10.11.2012, 09:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2012, 09:14
Помогаю со студенческими работами здесь

Библиотека для КОМПАС-2D на делфи. Как выводить элементы от места клика мыши, а не по статическим координатам?
Есть простенькая библиотека на делфи для компаса. Ее задача - выводить изображения резисторов,...

Отлавливание прокрутки роликом мыши
как зделать так чтоюи в Мемо1 можно било прокручивать с помощу ролика на мишке?

Отлавливание нажатия левой кнопки мыши в Edit
Добрый вечер. Проблема в отлавливании нажатия левой кнопки мыши в Edit. Во всех остальных областях...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru