-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHookHandler.cpp
More file actions
112 lines (112 loc) · 4.37 KB
/
HookHandler.cpp
File metadata and controls
112 lines (112 loc) · 4.37 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <Windows.h>
#include "HookHandler.h"
#include "Settings.h"
extern HWND MHhwnd;
extern bool flag_left_button_waits;
extern bool flag_right_button_waits;
extern LONG screen_x, screen_y;
// Интервалы автокликера в миллисекундах: 0: 20мс, 1: 50мс, 2: 100мс, 3: 500мс
static int autoclick_speeds[4]={20, 50, 100, 500};
//========================================================================
// Нажатие пятой клавиши при быстром движении мыши
//========================================================================
void MHookHandler::OnFastMove(LONG _dx, LONG _dy)
{
DWORD time_now=timeGetTime();
// Период, когда мы вычисляем движение - от 1/20 до 1/10 секунды
if(time_now-last_button5_time<50) // недостаточно набрали данных
{
mouse_path_squared+=dx*dx+dy*dy;
return;
}
if(time_now-last_button5_time>100) // Слишком долго ехала мышь
{
// Начинаем новый отсчет
mouse_path_squared=dx*dx+dy*dy;
last_button5_time=time_now;
return;
}
// Наконец, попали в нужный интервал времени. Если скорость мыши нас устроит, нажимаем клавишу.
mouse_path_squared+=dx*dx+dy*dy;
if(mouse_path_squared>MHSettings::minimal_mouse_speed) // Потом подберём значения
{
MHKeypad::Press4(4, true);
MHKeypad::Press4(4, false);
#ifdef _DEBUG
// OutputDebugString("Быстро=>");
#endif
}
// Начинаем новый отсчет
mouse_path_squared=dx*dx+dy*dy;;
last_button5_time=time_now;
}
//==========================================================================
// Обработчик скролла для режимов, где скролл не нужен, должен выглядеть так
//==========================================================================
void MHookHandler::OnMouseScroll(LONG _x, LONG _y)
{
OnMouseMove(_x,_y); // По умолчанию все хендлеры не обращают внимание на то, что нажата не только правая, но и левая
}
//========================================================================
// Нажатие шестой клавиши при режиме, когда левая кнопка бездействует
//========================================================================
void MHookHandler::OnLDown()
{
// Только если ещё не действует таймер!
if(!flag_left_button_waits)
{
MHKeypad::Press4(5, true);
// Автокликер для левой кнопки мыши
if(MHSettings::flag_autoclick_lmb)
{
int speed_ms = autoclick_speeds[MHSettings::autoclick_speed_index];
SetTimer(MHhwnd, 6, speed_ms, NULL);
}
//if(MHSettings::flag_left_mb_push_twice) MHKeypad::Press4(5,false); // Это если мы при отпускании мыши жмём клавишу ещё раз
if(MHSettings::flag_left_mb_push_twice)
{
SetTimer(MHhwnd,3,MHSettings::timeout_mouse_click,NULL); // Это если мы при отпускании мыши жмём клавишу ещё раз
flag_left_button_waits=true;
}
}
}
void MHookHandler::OnLUp()
{
// Остановить автокликер
if(MHSettings::flag_autoclick_lmb)
{
KillTimer(MHhwnd, 6);
}
if(MHSettings::flag_left_mb_push_twice)
{
if(!flag_left_button_waits)
{
MHKeypad::Press4(5,true); // Это если мы при отпускании мыши жмём клавишу ещё раз
SetTimer(MHhwnd,3,MHSettings::timeout_mouse_click,NULL);
}
}
else MHKeypad::Press4(5, false);
}
//========================================================================
// Включение / выключение левой кнопки мыши
//========================================================================
extern bool flag_left_button_key;
void MHookHandler::TopLeftCornerTimer()
{
if(flag_left_button_key)
{
flag_left_button_key=false;
PlaySound( TEXT("DeviceDisconnect"), NULL, SND_ALIAS|SND_ASYNC );
//PlaySound( TEXT("DeviceConnect"), NULL, SND_ALIAS|SND_ASYNC );
//cout << "\a";
//Beep(500,100);
//Beep(400,100);
}
else
{
flag_left_button_key=true;
PlaySound( TEXT("DeviceConnect"), NULL, SND_ALIAS|SND_ASYNC );
//Beep(400,100);
//Beep(500,100);
}
}