☰
VC++6.0 模拟鼠标点击与键盘输入代码:TaoToken 统一 Key 接入配置骨架
2026/9/27 17:25:30 网站建设 项目流程

1. VC++6.0 模拟鼠标点击与键盘输入到底在做什么

VC++6.0 模拟鼠标点击与键盘输入,本质是调用 Windows 系统已经暴露给开发者的输入注入接口,让程序代替人去移动光标、按下按键。核心 API 就三个:SetCursorPos负责把鼠标指针挪到屏幕坐标,mouse_event负责模拟左键/右键/中键的按下与抬起,keybd_event负责模拟键盘按键的按下与释放。它们都在winuser.h里声明,VC++6.0 的 MFC 工程或 Win32 工程直接包含windows.h就能用,不需要额外链接库。

这套东西适合谁?适合正在学 Windows 消息机制、想搞懂"输入是怎么从硬件走到窗口过程"的开发者,也适合做自动化测试、批量填表、辅助工具的同学。很多教程把它和"木马程序编写"绑在一起讲,这里必须说清楚:本文只讨论本机可控环境下的输入模拟原理与代码骨架,不涉及任何隐蔽驻留、远程控制、信息窃取的内容。你学的是 API 怎么调、消息怎么发、坐标怎么算,这些知识用在自动化脚本里是正经技能。

实际写的时候,新手最容易卡在三个地方:一是坐标搞混了屏幕坐标和窗口客户区坐标,点偏了;二是keybd_event按下没配对释放,导致按键"卡住";三是目标窗口没拿到焦点,消息发过去没人收。下面我把可复制的代码、配置骨架和排障过程一次讲透,并且用 TaoToken 的统一 Key 通道把 AI 辅助工具接进来,方便你在写这些 API 时随时查参数、生成骨架。

2. TaoToken 前置:统一 Key 与 API 通道准备

写这类底层 API 代码,参数多、常量杂,mouse_event的dwFlags有七八个取值,keybd_event的虚拟键码表又长,靠脑子记不现实。我的做法是接一个 AI 通道,遇到不确定的常量直接问,让它给我生成可编译的片段。TaoToken 在这里的作用就是提供一个统一的 Key 和 API 入口,你不用为每个模型单独申请账号、单独记 endpoint。

先到官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册并登录,然后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。创建完把 Key 复制出来,形如sk-开头的一串字符,后面配置里要用。

API 的基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置时直接填这个根路径即可。如果你用的是兼容 OpenAI 协议的客户端,把 base_url 指向它,再把 Key 填进去就能通。想先在网页上验证模型是否可用,可以打开模型对话页 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 发一句话试试。长期写代码、跑 Agent 的话,Coding Plan 页面在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

注意:Key 只存在你自己的配置文件和本机环境变量里,不要写进会提交到公开仓库的源码。VC++6.0 工程目录里如果放了配置文件,记得加进忽略列表。

3. 可复制配置:config.toml 与 settings.json 骨架

下面给两份配置骨架,一份 TOML 一份 JSON,按你手头的工具选。它们的作用是把 TaoToken 的地址和 Key 集中管理,代码里只读配置,不硬编码密钥。

先看config.toml,适合支持 TOML 的客户端或你自己写的读取逻辑:

# config.toml - TaoToken 统一接入配置骨架 [provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-替换成你在控制台创建的Key" timeout_seconds = 60 [model] default = "claude-sonnet" # 需要切换模型时改这里,不用动代码 [request] max_tokens = 2048 temperature = 0.3 # 写底层 API 代码时温度调低,输出更稳定

再看settings.json,适合 VS Code 插件、命令行工具或 Node/Python 脚本读取:

{ "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-替换成你在控制台创建的Key", "timeout": 60000 }, "model": { "default": "claude-sonnet", "fallback": "gpt-4o" }, "generation": { "maxTokens": 2048, "temperature": 0.3 } }

两份配置的字段含义一致:base_url/baseUrl指向 TaoToken 的 API 根地址,api_key/apiKey填你的 Key,default指定默认模型。VC++6.0 本身不直接读这两种格式,但你可以用一个小脚本或外部工具先调通,再把生成的代码片段贴进 MFC 工程。这样做的价值在于:写mouse_event那串常量时,让 AI 帮你核对MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP有没有写反,比翻文档快。

配置里的 Key 建议用环境变量覆盖,比如在系统里设TAOTOKEN_API_KEY,配置文件里写占位符,读取时优先取环境变量。这样即使配置文件被看到,Key 也不泄露。

4. 验证请求:替换 Key 后调一次接口确认连通

配置写完别急着写业务代码,先做一次最小连通性验证。用 curl 发一个最简单的请求,确认 Key 和地址都对:

curl -X POST "https://taotoken.net/api/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-替换成你的Key" \ -d '{ "model": "claude-sonnet", "messages": [ {"role": "user", "content": "用一句话说明 mouse_event 的 MOUSEEVENTF_LEFTDOWN 作用"} ], "max_tokens": 100 }'

如果返回里带了正常的choices内容和message,说明通道通了。返回 401 就是 Key 错了或没带Bearer前缀;返回 404 多半是路径写错,注意是/api/v1/chat/completions,根地址是https://taotoken.net/api;返回超时检查网络和timeout设置。

连通之后,回到 VC++6.0 这边验证输入模拟代码。新建一个 MFC 对话框工程,在按钮响应函数里放这段:

void CTestDlg::OnBnClickedBtnSim() { // 1. 移动鼠标到屏幕坐标 (450, 100) SetCursorPos(450, 100); // 2. 模拟左键单击:按下 + 抬起必须配对 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Sleep(50); // 给系统一点处理时间,避免连击被合并 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // 3. 模拟键盘:按下并释放 A 键 keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); }

编译运行,点按钮,你会看到鼠标跳到 (450,100) 并单击一次,同时当前焦点窗口收到一个 A 字符。如果鼠标动了但没点击,检查mouse_event两次调用是不是都写了;如果键盘没反应,确认目标窗口有焦点,keybd_event是发给当前前台窗口的。

再验证一个组合键,比如模拟 Ctrl+S:

// 模拟 Ctrl+S 保存 keybd_event(VK_CONTROL, 0, 0, 0); keybd_event('S', 0, 0, 0); keybd_event('S', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

顺序很重要:修饰键先按下,普通键后按下,释放时反过来。写反了就会变成"按着 S 再按 Ctrl",行为不对。

5. 本篇常见错排查

坐标点偏了。SetCursorPos用的是屏幕绝对坐标,左上角是 (0,0)。如果你拿的是窗口客户区坐标,得先用ClientToScreen转换。MFC 里可以这样:

CPoint pt(10, 10); // 客户区坐标 ClientToScreen(&pt); // 转成屏幕坐标 SetCursorPos(pt.x, pt.y);

按键卡住不释放。keybd_event按下后必须有一次KEYEVENTF_KEYUP的调用,mouse_event同理。如果程序中途异常退出,系统可能残留按下状态,表现为某个键一直"按住"。排查时检查每一对 down/up 是否成对出现。

消息发不到目标窗口。keybd_event和mouse_event是全局注入,发给当前前台窗口。如果你想让后台窗口收消息,得用PostMessage直接投递:

HWND hwnd = ::FindWindow(NULL, "文档1"); if (hwnd) { ::PostMessage(hwnd, WM_KEYDOWN, VK_ESCAPE, 0L); ::PostMessage(hwnd, WM_KEYUP, VK_ESCAPE, 0L); }

注意PostMessage投递的是消息,不经过真实输入队列,某些程序会校验消息来源而忽略它,这时候还是得靠SetForegroundWindow把窗口激活再用keybd_event。

定时器里连续点击失效。在WM_TIMER里连续调mouse_event时,如果间隔太短,系统可能把两次点击合并成一次双击。加一个Sleep(50)或把定时器间隔设到 100ms 以上。VC++6.0 里SetTimer(1, 100, NULL)就是 100ms 触发一次。

编译报错mouse_event未声明。确认包含了windows.h,并且工程没有定义WIN32_LEAN_AND_MEAN把相关头文件裁掉。VC++6.0 默认的 MFC 工程一般没问题,Win32 控制台工程要手动加#include <windows.h>。

TaoToken 请求返回 401。检查 Key 有没有多余空格,Authorization头是不是Bearer sk-xxx格式,以及 Key 是否在控制台被禁用。排障时可以直接到 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 重新生成一个再试。

6. 把 AI 通道接进你的 VC++6.0 工作流

配置和代码都跑通之后,你可以把 TaoToken 当成写底层 API 时的"参数查询器"。比如你不确定mouse_event的MOUSEEVENTF_ABSOLUTE怎么配合dx/dy用,直接把问题丢给模型,让它给你一段带注释的示例,再贴进工程编译验证。这比翻 MSDN 快,也比搜索引擎准。

具体做法:用第 3 节的settings.json配好客户端,把 base_url 指向 https://taotoken.net/api ,Key 填进去。写代码时遇到常量、消息号、结构体字段不确定,就问一句,拿到片段后自己编译跑一遍确认。模型对话入口在 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,接入细节看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。如果你要长期用这套通道跑编码任务或 Agent,Coding Plan 在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。

最后提醒一句:输入模拟 API 本身是中性的,SetCursorPos、mouse_event、keybd_event在自动化测试、辅助工具、教学演示里都有正当用途。写代码时把焦点放在"消息怎么走、坐标怎么算、按键怎么配对"这些原理上,你收获的是 Windows 输入模型的理解,而不是某个具体脚本。把配置骨架存好,把验证请求跑通,剩下的就是动手改参数、看结果、再改,这个过程本身就是最好的学习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询