-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrenda.cpp
More file actions
108 lines (84 loc) · 2.25 KB
/
renda.cpp
File metadata and controls
108 lines (84 loc) · 2.25 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
#include <windows.h>
#include <stdio.h>
#include <signal.h>
HHOOK hHook;
bool enabled = false;
bool autoClicking = false;
volatile sig_atomic_t running = 1;
DWORD WINAPI ClickThread(LPVOID)
{
INPUT inputDown = {};
INPUT inputUp = {};
inputDown.type = INPUT_MOUSE;
inputDown.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
inputUp.type = INPUT_MOUSE;
inputUp.mi.dwFlags = MOUSEEVENTF_LEFTUP;
while (autoClicking && running)
{
SendInput(1, &inputDown, sizeof(INPUT));
SendInput(1, &inputUp, sizeof(INPUT));
Sleep(7);
}
// ★ 停止時に必ず解放
SendInput(1, &inputUp, sizeof(INPUT));
return 0;
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0 && running)
{
MSLLHOOKSTRUCT* p = (MSLLHOOKSTRUCT*)lParam;
// 自己入力を無視
if (p->flags & LLMHF_INJECTED)
return CallNextHookEx(hHook, nCode, wParam, lParam);
switch (wParam)
{
case WM_MBUTTONDOWN:
enabled = !enabled;
printf("AutoClick: %s\n", enabled ? "ON" : "OFF");
if (!enabled)
autoClicking = false;
break;
case WM_LBUTTONDOWN:
if (enabled && !autoClicking)
{
autoClicking = true;
CreateThread(NULL, 0, ClickThread, NULL, 0, NULL);
}
break;
case WM_LBUTTONUP:
autoClicking = false;
break;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
void handle_sigint(int)
{
printf("\nSIGINT received. Exiting...\n");
running = 0;
autoClicking = false;
}
int main()
{
printf("Toggle AutoClicker\n");
printf("Middle Click : ON/OFF\n");
printf("Hold Left Click while ON to auto-click\n");
printf("Press Ctrl+C to exit\n");
signal(SIGINT, handle_sigint);
hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
MSG msg;
while (running)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Sleep(10);
}
autoClicking = false;
if (hHook)
UnhookWindowsHookEx(hHook);
return 0;
}