Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 34
1

Как отследить нажатие кнопок мышки на прозрачной форме или глобально

03.01.2016, 18:57. Показов 1854. Ответов 1
Метки нет (Все метки)

Как отследить нажатие кнопок мышки на прозрачной форме или глобально.

Брал готовый код через хуки, но у меня при компиляции этого кода возникает ошибка - "переменная не найдена" в процедуре SetHook на строчке
Delphi
1
 MyHook := SetWindowsHookEx(WH_GETMESSAGE  , @LowLevelMouseProc , HInstance, GetCurrentThreadId);
после @LowLevelMouseProc.
Я думаю, что там надо задать указатель на эту процедуру @LowLevelMouseProc и еще дальше как-то указать что-то о
возврашаемом значении, т.к. это функция. Но не знаю как писать

вот код:

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
var
 HookedAlready: Boolean;
 MyHook: HHook;
{***********  HOOK -start- ******************}
 
function LowLevelMouseProc (Code: integer; wParam: Word;lParam: Longint): Longint;stdcall;
begin
{WM_LBUTTONDOWN - левая кнопка, WM_RBUTTONDOWN - правая кнопка}
if (code = HC_ACTION)and(TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN) then
{- Do Something -}
 result := CallNextHookEx(MyHook, Code, wParam, lParam);
end;
 
procedure SetHook;
begin
 if HookedAlready then
   exit;
 MyHook := SetWindowsHookEx(WH_GETMESSAGE  , @LowLevelMouseProc , HInstance, GetCurrentThreadId);
 HookedAlready := True;
end;
 
procedure UnHookHook;
begin
if HookedAlready =true then
 UnHookWindowsHookEx(MyHook);
 HookedAlready := False;
end;
 
{***********  HOOK -end-  ******************}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetHook;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookHook;
end;
 
[size="1"][color="grey"][I]Добавлено через 4 минуты[/I][/color][/size]
Еще пробовал через таймер вот так:
 
procedure TForm2.Timer1Timer(Sender: TObject);
begin
if GetKeyState(VK_LBUTTON)>0 then
   begin
     showmessage('нажата кнопка мыши');
   end;
end;
Но неправильно работает - здесь видимо неправильное сравнение, т.к. сообщение "нажата кнопка мыши" выходит даже когда кнопку еще не нажимал. Как исправить?

Добавлено через 9 минут
Должно работать именно на прозрачной форме
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2016, 18:57
Ответы с готовыми решениями:

Как отследить нажатие кнопок на форме VBA
Добрый день! Есть форма VBA с пятнадцатью кнопками. Caption кнопок - числа от 1 до 15. Нужно,...

Как отследить глобально нажатие клавиш в системе
Здравствуйте! Подскажите, пожалуйста, как в c# вызвать функции winapi, где бы просмотреть их...

Глобально отследить нажатие комбинации клавиш
Конкретно Shift+k. Хотелось бы какой-то глобальный обработчик события (несколько форм). Моя...

Как отследить нажатие двух клавиш на форме
Такие дела. Ищу литературу, мануалы, статьи, о работе с клавиатурой в сишарп. Тот мануал по...

1
836 / 731 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
03.01.2016, 22:07 2
Цитата Сообщение от Marat11 Посмотреть сообщение
Как отследить нажатие кнопок мышки на прозрачной форме или глобально.
Хук на мышь, ищи в этом разделе был рабочий пример, вбей в поиск.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2016, 22:07

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Нажатие кнопок мышки внутри окна
Наконец-то избавился от glut'a, разжевал несколько уроков NeHe, с клавиатурой всё ясно, а вот...

Отследить нажатие клавиши на форме
Пишу программу, которая должна отследить нажатие клавиши и зафиксировать кнопку, которая убегает от...

Как отследить нажатие кнопки Cancel или Escape при вызове InputBox?
Подскажите, как отследить нажатие кнопки Cancel или Escape при вызове данной функции? Как известно,...

Нажатие кнопок на форме через расширение
Здравствуйте! Подскажите пожалуйста как реализовать данную функцию: https://xxxx/audios/ -это...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.