李嘉轩
(轩)
1
想知道我怎么做到的吗?
下面代码放到dev-c++里面运行就可以。
#include <windows.h>
#include <iostream>
#include <thread>
// 检测指定键是否被按下
bool isKeyPressed(int key) {
return GetAsyncKeyState(key) & 0x8000;
}
// 检测 'C' 键或 'c' 键是否被按下
bool isCKeyPressed() {
return isKeyPressed('C') || isKeyPressed('c');
}
// 模拟鼠标点击(左键或右键)
void mouseClick(int button) {
if (button == 0) { // 左键
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
} else if (button == 1) { // 右键
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}
}
int main() {
std::cout << "连点器将在5秒后开始运行,请将鼠标放到需要点击的位置。" << std::endl;
Sleep(5000); // 等待5秒
int clicks_per_second = 1000; // 每秒点击次数,这里可以改
int duration = 10; // 持续时间(秒),这里可以改
int total_clicks = clicks_per_second * duration; // 总点击次数
int current_clicks = 0; // 当前点击次数
bool isRunning = true; // 连点器运行状态
int button = 0; // 当前点击类型
while (current_clicks < total_clicks) {
if (isKeyPressed('C')||isKeyPressed('c')) { // 检测 'C' 键或 'c' 键,切换运行状态
isRunning = !isRunning;
std::cout << (isRunning ? "连点器已启动。" : "连点器已暂停。") << std::endl;
Sleep(1000000);
}
if (isKeyPressed('V') || isKeyPressed('v')) { // 检测'V'键或'v'键,切换点击类型
button = 1 - button;
std::cout << (button == 0 ? "当前为左键点击。" : "当前为右键点击。") << std::endl;
Sleep(100);
}
// 只有当连点器正在运行时才执行点击c
if (isRunning) {
mouseClick(button);
current_clicks++;
Sleep(1000/clicks_per_second);
}
}
std::cout << "连点结束。" << std::endl;
return 0;
}
3 个赞
黄炜
(黄炜)
6
GetAsyncKeyState
的参数是虚拟键码,不是ASCLL码,大写字母可以这样搞,因为对应的ASCLL码刚好是虚拟键码的值,但小写就不行了,对应的是其他的虚拟键码,所以不能 isKeyPressed('c')
,也没必要,因为 GetAsyncKeyState
侦测的是虚拟键码,只管是否按下了这个键,不分大小写,所以应该是:
if (isKeyPressed('C')) { // 检测 'C' 键或 'c' 键,切换运行状态
isRunning = !isRunning;
std::cout << (isRunning ? "连点器已启动。" : "连点器已暂停。") << std::endl;
Sleep(1000);
}
if (isKeyPressed('V')) { // 检测'V'键或'v'键,切换点击类型
button = 1 - button;
std::cout << (button == 0 ? "当前为左键点击。" : "当前为右键点击。") << std::endl;
Sleep(100);
}
1 个赞