C++模拟键盘操作

前言:

C++/C语言模拟键盘操作十分的黑科技啊,作者也是借鉴了 C/C++ 模拟键盘操作(一)_折竹丶的博客-CSDN博客_c++模拟键盘​​​​​​​​​​​​​​

 来做一个小小的全面总结,有兴趣可以去看原创

键盘操作:

在C++中有一个头文件:windows.h 我们可以尝试导入他:

#include<windows.h>

 这个头文件不管你是在DevC++,VS...都应该有的,在其中有一个这样的函数:

keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,ULONG_PTR dwExtraInfo);

就是这个keybd_enent函数,它的参数有4个第一个为按键的虚拟键值;第二个参数为扫描码,一般不用设置,用0代替就行;第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";第四个参数一般也是置0即可。

来做个演示,假如我要模拟按下a键我们就可以:

keybd_event(65,0,0,0);

65是a的十进制值,这样我们就可以按下a键了

在前面加上一个Sleep(4000)等待4秒,选择一个地方可以试着输入以下

​​​​​​​具体虚拟键表自行查找

来做一个好玩的:

你是否在抖音上看见了一些用vbs做的刷屏器,我们在学完这个之后也能做一个C++版本的!

#include<windows.h>
#include<stdio.h>
void ctrl_v(int x = 86)//模拟ctrl+v
{
	keybd_event(VK_CONTROL,0,0,0);//按下ctrl
	keybd_event(x,0,0,0);//按下v
    keybd_event(x,0,KEYEVENTF_KEYUP,0);//弹起v
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);//弹起ctrl
}
int main()
{
	int a;
	scanf("%d",&a);//输入次数
	Sleep(5000);//等待5秒(为了不一瞬间全部模拟)
	for(int i = 0;i < a;i++)
	{
		ctrl_v();//ctrl+v
		keybd_event(13,0,0,0);//按下Enter
		Sleep(100);//等待0.1秒,你不想电脑卡炸吧
	}
}

好家伙,你的好基友要带着好玩的到你家来制裁你了

后记:

作者参考的文章:

keybd_event使用方法_yizhou2010的博客-CSDN博客

C/C++ 模拟键盘操作(一)_折竹丶的博客-CSDN博客_c++模拟键盘

去看看原创也不错~

C++中,模拟键盘操作"kill"通常涉及到操作系统级别的API,这需要使用底层的系统调用或者特定库,如Windows API (WinUser.h) 或者Linux下的Xlib或PDCurses等库。如果你想模拟按下"Ctrl+C"这个组合键来发送一个终止信号(比如用于中断进程),你可以这样做: **在Windows上**: ```cpp #include <windows.h> std::wstring commandToKill("your-process-name"); // 替换为你要杀死的进程名 // 模拟Ctrl+C SendConsoleInput( GetStdHandle(STD_INPUT_HANDLE), { INPUT_KEY_EVENT, VirtualKeyToScan(0x1B), 0, 0 }, // Ctrl key sizeof(INPUT_KEY_EVENT), NULL); SendConsoleInput( GetStdHandle(STD_INPUT_HANDLE), { INPUT_KEY_EVENT, VirtualKeyToScan(0x43), 0, 0 }, // 'C' sizeof(INPUT_KEY_EVENT), NULL); Sleep(500); // 等待一段时间让信号生效 TerminateProcess(GetCurrentProcess(), -1); // 杀死当前进程 ``` 请注意,实际应用中你需要获取到目标进程的句柄。 **在Linux上** (假设使用X11): ```cpp #include <X11/Xlib.h> #include <unistd.h> Display* display = XOpenDisplay(NULL); Window root = DefaultRootWindow(display); KeyCode control = XK_Control_L; KeyCode c = XK_c; XEvent event; event.type = KeyPress; event.key.detail = 0; // 键值 event.xkey.keysym.keycode = control; // 按下Control键 event.xkey.state |= ControlMask; // 设置Control标志位 XSendEvent(display, root, False, SubstructureRedirectMask | KeyPressMask, &event); event.type = KeyPress; event.xkey.keysym.keycode = c; // 按下'C'键 event.xkey.state &= ~ControlMask; // 清除Control标志位 XSendEvent(display, root, False, SubstructureRedirectMask | KeyPressMask, &event); usleep(500000); // 等待一段时间 kill(getpid(), SIGINT); // 发送SIGINT信号 XCloseDisplay(display); ``` 以上代码仅提供一个大概的概念,实际操作可能需要处理错误并适应你的环境。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值